簡體   English   中英

將SRTM * .hgt文件作為紋理傳遞到OpenGL着色器會導致圖像歪斜

[英]Passing SRTM *.hgt file as texture to OpenGL shader results in skewed image

我正在編寫用於解釋NASA SRTM * .hgt文件以獲取高度數據的地形渲染器。 我實現了此處描述的LOD技術: http : //www.pheelicks.com/2014/03/rendering-large-terrains/

我的地形網格物體的寬度和高度為1024。 高度圖為1201 x1201。我將高度圖加載到內存中,並將其作為紋理發送到着色器。 然后,使用x和z分量在[-512,512]范圍內的當前頂點位置在頂點着色器中對其進行采樣。 接下來,我將其除以1024,得到x和z在[-0.5,0.5]范圍內的向量。 網格的左上角位於(-0.5,-0.5),因此我添加了vec2(0.5, 0.5)以對其進行“歸一化”。

當使用計算出的坐標對jpeg文件進行采樣時,一切看起來都與預期的一樣,但是當我對高度圖進行采樣時,它看起來像這樣: 在此處輸入圖片說明

用這條奇怪的對角線。 在思考了片刻之后,這張圖片出了什么問題,我發現高度圖實際上只是偏斜了(或者我的采樣有些偏斜了……),在左側,您可以看到應該在右側的部分,如下所示: 在此處輸入圖片說明

我不知道這是怎么回事。 考慮到使用相同的采樣代碼jpeg圖像可以完美地放置在網格上的事實,我認為采樣方法不會有什么問題。

所有代碼都可以在github存儲庫上找到:“ lod2”分支中的https://github.com/0ctothorp/terrain_rendering/tree/lod2

最有趣的部分可能是采樣代碼:

sample_ = texture(heightmap, (position.xz / meshSize) + vec2(0.5f, 0.5f)).r;
position.y = sample_ / 50.0f;

以及如何將heightmap傳遞給着色器:

GL_CHECK(glTexImage2D(GL_TEXTURE_2D, 0, GL_R16I, 1201, 1201, 0, GL_RED_INTEGER, GL_SHORT, 
                      hmData->data()));

顯然,您的數據是緊密打包的,而OpenGL期望默認情況下它是4字節對齊的。 glTexImage2D調用之前,可以使用以下命令覆蓋預期的對齊方式:

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM