如何在 OpenGL ES 2.0 中使用 GL_FLOAT 创建纹理?

Posted

技术标签:

【中文标题】如何在 OpenGL ES 2.0 中使用 GL_FLOAT 创建纹理?【英文标题】:How to create texture using GL_FLOAT in OpenGL ES 2.0? 【发布时间】:2012-11-20 19:22:29 【问题描述】:

打电话时:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texWidth, texHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, rawData);

很容易知道如何格式化数据:传入一个字节数组,范围为 0-255,其中 0 是最低的,255 是每个颜色分量最亮的。

当你对 GL_FLOAT 做同样的事情时,你传入一个浮点数组。我的问题是,每个颜色分量值的范围是多少? 0 到 1.0? 0到浮点数的最大值?

当使用 GL_RGBA 时,您会传入一个浮点数组,每个像素 4 个浮点数,对吗?

另外,确认一下:GL_HALF_FLOAT_OES 不是 glTexImage2D 的参数,而是仅用于顶点,对吗?

我的 iPad 3 报告“GL_OES_texture_float”和“GL_OES_texture_half_float_linear”为受支持。这意味着我确实可以使用 GL_FLOAT 作为 glTexImage2D 的参数,对吧?谁知道 iPad 2 是否支持这个?

【问题讨论】:

【参考方案1】:

浮点值的范围是...the range of floating-point values。这就是使用它们的意义所在。当您从着色器中的浮点纹理获取时,您将获得存储在那里的浮点值。没有夹紧或应用任何东西。

如果你制作一个半浮点纹理,那么它的值的范围是 16 位浮点值。如果您制作单精度浮点纹理,则其值的范围为 32 位浮点值。

【讨论】:

【参考方案2】:

我可以回答这个问题的前两部分,后两部分我推荐你this question

我的问题是,每个颜色分量值的范围是多少? 0 到 1.0?

是的,范围是 0.0 到 1.0

[编辑] 正如 Nicol Bolas 指出的那样,这是不正确的,您可以使用任何浮点值,但是当它被解释为颜色值时,它将被限制在 (0.0 - 1.0) 范围内

当使用 GL_RGBA 时,您会传入一个浮点数组,每个像素 4 个浮点数,对吗?

是的,浮点数也将按该顺序存储(红色、绿色、蓝色、Alpha)

【讨论】:

"但是,当它被解释为颜色值时,它将被限制在 (0.0 - 1.0) 范围内" 当由谁解释时?它由 shader “解释”,在那里,它将被解释为 IEEE 754 浮点值。除非您手动进行,否则不会发生任何形式的夹紧。

以上是关于如何在 OpenGL ES 2.0 中使用 GL_FLOAT 创建纹理?的主要内容,如果未能解决你的问题,请参考以下文章

共享内存架构中的 OpenGL (ES 2.0) VBO 性能

OpenGL ES 2.0 剪裁测试

如何在Android上使用OpenGL ES 2.0绘制点

如何在Android上将OpenGL ES 1.0代码转换为OpenGL Es 2.0?

如何在Android上使用OpenGL ES 2.0绘制点

OpenGL ES 2.0 shader开发