纹理转移期间亮度值是否被裁剪为[0,1]?

时间:2013-05-22 06:16:12

标签: opengl glsl textures

我正在使用类似的东西将主机端纹理上传到OpenGL:

GLfloat * values = new [nRows * nCols];

// initialize values
for (int i = 0; i < nRows * nCols; ++i)
{
    values[i] = (i % 201 - 100) / 10.0f; // values from -10.0f .. + 10.0f
}

glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, nRows, nCols, GL_LUMINANCE, GL_FLOAT, values);

然而,当我使用glGetTexImage()回读纹理时,结果发现所有值都被剪切到范围[0..1]。

首先,我找不到记录此行为的位置(我正在使用Red Book for OpenGL 2.1)。

其次,是否可以更改此行为并让值保持不变?我想在GLSL着色器中访问未缩放的未剪辑数据。

1 个答案:

答案 0 :(得分:1)

  

我无法找到记录此行为的位置

在实际规格中,它位于像素矩形部分,标题为像素矩形转移。

  

其次,是否可以更改此行为并让值不变?

是。如果要使用“未缩放,未展开”的数据,则必须使用floating point image format。纹理的格式是在created the storage for it时定义的,可能是通过调用glTexImage2D来定义的。该函数的第三个参数定义格式。因此,请使用适当的浮点格式而不是整数格式。