小编Rat*_*vel的帖子

如何使用opengl纹理将非标准化/非固定值发送到GLSL着色器?

我正在尝试将浮点值(高度图)数组作为GL_TEXTURE_2D发送到GLSL。当我设置好采样器后,问题出在使用glTexImage2D()上传纹理时发生的钳位。

  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);
Run Code Online (Sandbox Code Playgroud)

我要发送的值在900.0f至1590.0f范围内。但这在加载到时会被完全钳制到1.0f GL_TEXTURE_2D

如何保持值不被钳制到[0,1]。如何修改glTexImage2D()函数以实现此目标?

PS我知道采样器工作正常,因为当我将值除以1500.0f并将其上载到GPU并在着色器中缩放时,我得到了正确的高度图结构。

opengl glsl texture-mapping heightmap

3
推荐指数
1
解决办法
87
查看次数

标签 统计

glsl ×1

heightmap ×1

opengl ×1

texture-mapping ×1