如何使用opengl纹理将非规范化/未采样值发送到GLSL着色器?

如何使用opengl纹理将非规范化/未采样值发送到GLSL着色器?,opengl,glsl,texture-mapping,heightmap,Opengl,Glsl,Texture Mapping,Heightmap,我正在尝试将浮点值数组(高度贴图)作为GL_纹理_2D发送到GLSL。虽然我已正确设置了采样器,但问题来自使用glTexImage2D()上载纹理时发生的夹持 我发送的值在900.0f到1590.0f的范围内。但是当它加载到GL\u纹理\u 2D中时,它会被完全钳制到1.0f 如何保持值不被钳制为[0,1]。我应该如何修改glTexImage2D()函数来实现这一点 另外,我知道采样器工作得很好,因为当我将这些值除以1500.0f并将其上传到GPU并在着色器中缩放时,我得到了正确的高度贴图结构。

我正在尝试将浮点值数组(高度贴图)作为GL_纹理_2D发送到GLSL。虽然我已正确设置了采样器,但问题来自使用glTexImage2D()上载纹理时发生的夹持

我发送的值在900.0f到1590.0f的范围内。但是当它加载到
GL\u纹理\u 2D
中时,它会被完全钳制到1.0f

如何保持值不被钳制为[0,1]。我应该如何修改glTexImage2D()函数来实现这一点


另外,我知道采样器工作得很好,因为当我将这些值除以1500.0f并将其上传到GPU并在着色器中缩放时,我得到了正确的高度贴图结构。

首先,您应该始终使用a(这是
glTexImage*
的第三个参数)<代码>总账红色将太多事情留给了实施

其次,您正在尝试存储和使用浮点数据。因此,您需要选择浮点内部格式,而不是规范化的整数格式。如果内部格式的大小不是以
F
结尾,则它不存储浮点值<代码>GL_R32F将是合适的

  glGenTextures(1, &_idnewTID);
  glBindTexture(GL_TEXTURE_2D, _idnewTID);

  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

  glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, regMesh._cols, regMesh._rows, 0, GL_RED, GL_FLOAT, regMesh._heightMap);