Opengl 纹理传输过程中亮度值被剪裁为[0,1]?
我正在使用以下方式将主机端纹理上载到OpenGL:Opengl 纹理传输过程中亮度值被剪裁为[0,1]?,opengl,glsl,textures,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,
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);
GLfloat*值=新的[nRows*nCols];
//初始化值
对于(int i=0;i
但是,当我使用glGetTexImage()读回纹理时,所有值都被剪裁到范围[0..1]
首先,我找不到记录这种行为的地方(我使用的是OpenGL 2.1的红皮书)
第二,是否可以更改此行为并让值不变地传递?我想访问GLSL着色器中未缩放、未剪裁的数据
我找不到记录这种行为的地方
在实际规范中,它位于关于像素矩形的部分,标题为像素矩形的传输
第二,是否可以更改此行为并让值不变地传递
对。如果要使用“无标度、无夹点”数据,则必须使用。纹理的格式在创建时定义,可能通过调用
glTexImage2D
。该函数的第三个参数定义了格式。因此,请使用正确的浮点格式,而不是整数格式。钳位是正确的。但我认为你应该解释你想做什么。为什么不首先使用规范化值?啊,你是指glTexImage2D中的内部格式参数!下面是合适的浮点格式列表:对我来说,GL_R32F成功了!