【发布时间】:2017-01-18 07:31:09
【问题描述】:
我有一个由 16 位有符号值组成的高度图,我只是想知道从着色器中对它们进行采样的正确方法是什么。到目前为止,我使用的是 GL_R16 格式,我认为它将图像存储为无符号整数,但是当采样时返回一个浮点数,我假设它被归一化为 0 - 1。是否也可以选择将纹理作为整数采样为存储在纹理中而不是作为浮点数?
当我上传纹理时:
glTexImage2D(GL_TEXTURE_2D, 0, GL_R16, 10800, 10800, 0, GL_R16, GL_SHORT, buffer.data());
在我的着色器中,我对其进行采样:
float colour = texture2D(heightmap, texCoords).r;
outFragColour = vec4(colour, colour, colour, 1);
似乎只对黑色进行采样(即 0);
另外,这会保留高度图的负值吗?这一切都非常令人困惑。
编辑:我刚刚意识到我在调用时收到了来自 OpenGL 的 INVALID_ENUM 错误:
glTexImage2D(GL_TEXTURE_2D, 0, GL_R16, 10800, 10800, 0, GL_R16, GL_SHORT, buffer.data());
谢谢。
【问题讨论】:
标签: opengl graphics glsl shader sampling