OpenGL亮度内部数据类型

2024-07-03 06:30:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个2D纹理,并且对我的纹理实际存储的数据类型感到困惑。我的输入是一个2D 32位浮点数组,它现在被标准化为0-1。我正在创建一个类似以下调用的纹理:

glTexImage2D(self._target, 0, GL_LUMINANCE, GL_LUMINANCE, gl.GL_UNSIGNED_BYTE, (2048, 8192))

用类似这样的东西推送数据:

glTexSubImage2D(self._target, 0, x, y, GL_LUMINANCE, GL_FLOAT, data)

我知道,因为我使用亮度的数据被钳制为0到1作为浮动(这就是为什么我规格化它),并提供给我在GLSL作为vec4(L,L,L,1)。但是实际使用什么数据类型来存储这个浮点呢?它是否存储为单个32位浮点,然后使其看起来像GLSL中的vec4?你知道吗

我问,因为如果我要切换到GLèR32F或类似的东西,我的纹理会占用与亮度相同的视频内存吗?有没有办法不将亮度数据从0钳制到1。除了添加alpha来“填充”值(表示不应渲染texel的值,如NaN或-9999.0或其他什么),还有其他常见的方法吗?你知道吗

谢谢你的帮助。我使用的是包装pyopengl的vispython包。你知道吗


Tags: 数据selftarget数组浮点数据类型glsl亮度