如何将部分纹理复制到opengl中的图像
Posted
技术标签:
【中文标题】如何将部分纹理复制到opengl中的图像【英文标题】:How to copy part of texture to an image in opengl 【发布时间】:2015-08-09 13:03:48 【问题描述】:我正在使用 opengl 开发一个项目。 我在填充有 bmp 图像文件的多边形中有一个多边形。 我可以旋转相机从不同的地方查看图像,我想复制图像的一部分并将其放入一个新的 bmp 文件中。 我有很多不必要的代码,所以我将复制重要的部分。
_textureId = LoadBMP("file.bmp");
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, _textureId);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glColor3f(1, 1, 0.7);
float BOX_SIZE = -12.0f;
glBegin(GL_QUADS);
glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, -5);
glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, -5);
glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, 5);
glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, 5);
glEnd();
而且轮换非常基本,所以有人有什么建议吗? 非常感谢。
【问题讨论】:
【参考方案1】:如果要将 OpenGL 的输出保存到文件中,则必须将颜色缓冲区的内容从 GL 读回客户端内存。然后,您可以为所欲为。命令
glReadPixels
(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *data
)
将从x
,y
开始的width
* height
像素的矩形中的像素数据读回到位于data
的内存缓冲区。由于您说要将其保存为 BMP 文件,因此您可能希望 GL_UNSIGNED_BYTE
作为类型,因为 BMP 最多仅支持每个通道 8 位。您可能还希望 GL_BGA
或 GL_BGR
作为格式,因为这是 BMP 的本机通道布局。
【讨论】:
感谢您的快速回答。但是我以什么格式保存数据?是 char** 还是什么?对我的知识感到抱歉,但我对这个主题真的很陌生。 好吧。如果要将其保存为 BMP,则可能应该使用某种图像库。 Windows 本身也应该能够生成 BMP 文件。基本上,您将需要一个挂件到您的LoadBitmap
函数。以上是关于如何将部分纹理复制到opengl中的图像的主要内容,如果未能解决你的问题,请参考以下文章