2012-04-02 58 views
1

我正在写C射线测量仪,其结果输出到普通的图像文件。现在,我想将内部RGBA表示(4个整数)渲染到由GLUT提供的OpenGL窗口。RGBA的整数值,以OpenGL纹理

我已经知道我必须使用glTexImage2D来生成纹理,将该纹理分配给四边形,然后将这个四边形正好放在相机前面。

http://www.opengl.org/sdk/docs/man/xhtml/glTexImage2D.xml

我遇到的问题是,我不知道我应该如何将数据提交给glTexImage2D函数:我该如何构建这个gluByte数据块包含我的数据,从一个简单的4未来整数RGBA表示?

+0

对于记录,我结束了这样做: '无符号字符*数据=(数据放在这里在数组);' 'glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,宽度,高度,0,GL_RGBA,GL_UNSIGNED_BYTE ,数据);' – 2012-04-05 10:13:15

回答

1

如何存储您的数据或多或少取决于您。最后三个参数为glTexImage2D(以及其他参数)describe how your data is formatted。对于如何存储数据存在限制(每个像素不能有超过4字节对齐的填充,并且组件必须相邻),但是存在很多可用变体。

作为宽度x高度x 4大小的数组,每个组件使用无符号整数:RGBARGBARGBA ...?

这是这样做的一种方式,但它不是唯一的方法。

0

数据块只是一个指向您的RGBA表示的指针。您需要致电glTexImage2D(GL_TEXTURE_2D, 0, 4, width, height, 0, GL_RGBA, GL_UNSIGNED_INT, dataBuffer);。纹理中的一行必须具有width * sizeof(GLuint)个字节才能起作用。

+0

那么如何存储我的数据呢?作为宽x高x 4大小的数组,每个组件使用一个无符号整数:RGBARGBARGBA ...? – 2012-04-02 17:23:50

+0

正是。请注意,您使用的OpenGL驱动程序可能会将未签名的整数转换为上传前在内部无符号字符。为了节省内存,您可能仍然需要手动将提示转换为字符。 – jfortmann 2012-04-03 16:14:50