iPhone,浮动纹理
我需要将 GL_RGBA32F 作为内部格式,但我在 OpenGL ES 实现中没有得到它。相反,我只得到 GL_FLOAT 作为纹理数据类型。 OES_texture_float 规范没有说明里面的内容。所以我不知道我的纹理数据是否会标准化为 [0, 1] 。基本上我需要存储在纹理未夹紧的纹理数据中,无论它是浮点值还是整数值。我如何在纹理中获取非标准化数据?
I need to have GL_RGBA32F as internal format, but i do not get this in OpenGL ES implementation. Instead of this i get only GL_FLOAT as a texture data type. The OES_texture_float spec has nothing to say what's inside. So i do not know, whether my texture data will be normalized to [0, 1] or not. Basically i need to store in texture unclamped texture data regardless it's float or integer value. How i can get not normalized data inside my texture?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
遗憾的是,OpenGL ES 对待 glTex(Sub)Image* 参数的方式与桌面 OpenGL 不同。
在桌面 OpenGL 中,定义纹理实际格式的是内部格式。在 GL ES 2.0 中,定义此值的是 format 和 type 值。因此,如果您上传 (GL_RGBA, GL_UNSIGNED_BYTE) 纹理,则相当于使用 GL_RGBA8 作为内部格式。
这意味着,如果您想要浮点纹理,请使用(GL_RGBA,GL_FLOAT)作为格式和类型参数。这是两个规范之间毫无意义的不一致。
Sadly, OpenGL ES treats the parameters to glTex(Sub)Image* differently from desktop OpenGL.
In desktop OpenGL, what defines the actual format of the texture is the internalformat. In GL ES 2.0, it is the format and type values that define this. So if you upload a (GL_RGBA, GL_UNSIGNED_BYTE) texture, that's the equivalent of using GL_RGBA8 as the internal format.
What this means is that, if you want a floating-point texture, you use (GL_RGBA, GL_FLOAT) as the format and type parameters. It's a pointless inconsistency between the two specifications.