我正在写地形渲染器,解释美国航天局SRTM的*.hgt文件,以获得高度数据。我实现了这里描述的LOD技术:http://www.pheelicks.com/2014/03/rendering-large-terrains/。
我的地形网格有1024宽和高。高度图是1201x1201。我将高度图加载到内存中,并将其作为纹理发送到着色器。然后,我在顶点着色器中使用当前的顶点位置(x和z分量在- 512,512范围内)进行采样。接下来,我把它除以1024,给出x和z在- 0.5,0.5范围内的向量。网格的左上角位于(-0.5,-0.5),因此我添加了vec2(0.5, 0.5)来“规范化”它。
当使用计算出的协调程序对jpeg文件进行采样时,它看起来都与预期的一样,但当我对高度图进行采样时,它看起来如下所示:

用这条奇怪的对角线。经过一段时间的思考后,我发现这幅图像到底出了什么问题,它的高度图实际上是倾斜的(或者我的样本有点偏斜.)在左边,你可以看到右边的部分,就像下面这样:

我不知道这里发生了什么。考虑到jpeg图像以相同的采样代码完美地放置在网格上,我认为这不可能是采样方法的问题。
所有代码都可以在github存储库中获得:rendering/tree/lod2在"lod2“分支中。
最有趣的部分可能是抽样代码:
sample_ = texture(heightmap, (position.xz / meshSize) + vec2(0.5f, 0.5f)).r;
position.y = sample_ / 50.0f;以及我如何将高度图传递给着色器:
GL_CHECK(glTexImage2D(GL_TEXTURE_2D, 0, GL_R16I, 1201, 1201, 0, GL_RED_INTEGER, GL_SHORT,
hmData->data()));发布于 2017-05-03 21:36:21
显然,您的数据是紧密打包的,而OpenGL则期望它在默认情况下是4字节对齐的。您可以在glTexImage2D调用之前使用以下内容覆盖预期的对齐:
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);https://stackoverflow.com/questions/43768852
复制相似问题