【问题标题】:How to copy part of texture to an image in opengl如何将部分纹理复制到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();

而且轮换非常基本,所以有人有什么建议吗? 非常感谢。

【问题讨论】:

    标签: opengl image-processing textures bmp image-rotation


    【解决方案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_BGAGL_BGR 作为格式,因为这是 BMP 的本机通道布局。

    【讨论】:

    • 感谢您的快速回答。但是我以什么格式保存数据?是 char** 还是什么?对我的知识感到抱歉,但我对这个主题真的很陌生。
    • 好吧。如果要将其保存为 BMP,则可能应该使用某种图像库。 Windows 本身也应该能够生成 BMP 文件。基本上,您将需要一个挂件到您的 LoadBitmap 函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多