gpt4 book ai didi

opengl - 如何使用 opengl 纹理将非标准化/未钳位的值发送到 GLSL 着色器?

转载 作者:行者123 更新时间:2023-12-05 00:45:43 25 4
gpt4 key购买 nike

我正在尝试将一组浮点值(高度图)作为 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);

我发送的值在 900.0f 到 1590.0f 的范围内。但是当它加载到 GL_TEXTURE_2D 时,它被完全钳制到 1.0f。 .

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

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

最佳答案

首先,您应该始终使用 sized internal format (这是 glTexImage* 的第三个参数)。 GL_RED留给实现的太多了。

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

关于opengl - 如何使用 opengl 纹理将非标准化/未钳位的值发送到 GLSL 着色器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56246109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com