【问题标题】:RGBA integer values to OpenGL TextureRGBA 整数值到 OpenGL 纹理
【发布时间】:2012-04-02 16:08:35
【问题描述】:

我正在用 C++ 编写一个光线投射器,它将其结果输出到常规图像文件。现在,我想将内部 RGBA 表示(4 个整数)渲染到 GLUT 提供的 OpenGL 窗口。

我已经知道我必须使用 glTexImage2D 来生成一个纹理,将该纹理分配给一个四边形,然后将这个四边形渲染到相机的正前方。

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

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

【问题讨论】:

  • 为了记录,我最终这样做了:unsigned char* data = (data goes here in array);glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,width,height,0,GL_RGBA,GL_UNSIGNED_BYTE,data);

标签: c++ opengl graphics glut


【解决方案1】:

如何存储数据或多或少取决于您自己。最后三个参数为glTexImage2D(以及附加参数)describe how your data is formatted。关于如何存储数据存在一些限制(除了每像素 4 字节对齐之外,您不能有太多填充,并且组件必须相邻),但有很多可用的变化。

作为一个宽 x 高 x 4 大小的数组,每个组件都有一个无符号整数:RGBARGBARGBA...?

这是一种方法,但不是唯一的方法。

【讨论】:

    【解决方案2】:

    将您的 0-(2^32-1) 范围转换为 0-(2^8-1)。

    或使用GL_UNSIGNED_INT for format

    【讨论】:

      【解决方案3】:

      数据块只是指向 RGBA 表示的指针。你会想打电话给glTexImage2D(GL_TEXTURE_2D, 0, 4, width, height, 0, GL_RGBA, GL_UNSIGNED_INT, dataBuffer);。纹理中的一条线必须具有宽度 * sizeof(GLuint) 字节才能正常工作。

      【讨论】:

      • 那我该如何存储我的数据呢?作为一个宽 x 高 x 4 大小的数组,每个组件都有一个无符号整数:RGBARGBARGBA... ?
      • 没错。请注意,您使用的 OpenGL 驱动程序可能会将无符号整数转换为例如上传前内部的无符号字符。为了节省内存,您可能仍需要手动将 uint 转换为 chars。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-04
      • 2015-11-17
      • 2013-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多