首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将SRTM *.hgt文件作为纹理传递给OpenGL着色器会导致图像倾斜。

将SRTM *.hgt文件作为纹理传递给OpenGL着色器会导致图像倾斜。
EN

Stack Overflow用户
提问于 2017-05-03 19:53:36
回答 1查看 375关注 0票数 0

我正在写地形渲染器,解释美国航天局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“分支中。

最有趣的部分可能是抽样代码:

代码语言:javascript
复制
sample_ = texture(heightmap, (position.xz / meshSize) + vec2(0.5f, 0.5f)).r;
position.y = sample_ / 50.0f;

以及我如何将高度图传递给着色器:

代码语言:javascript
复制
GL_CHECK(glTexImage2D(GL_TEXTURE_2D, 0, GL_R16I, 1201, 1201, 0, GL_RED_INTEGER, GL_SHORT, 
                      hmData->data()));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-03 21:36:21

显然,您的数据是紧密打包的,而OpenGL则期望它在默认情况下是4字节对齐的。您可以在glTexImage2D调用之前使用以下内容覆盖预期的对齐:

代码语言:javascript
复制
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43768852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档