我有一個基於2D的地圖和高度圖的圖像,我希望使用它來使地圖看起來不那麼平坦。但我是SFLS中使用的GLSL的新手。我正在尋找一些GLSL着色器,我可以將瓦片紋理和高度貼圖的一部分傳遞到同一座標上或創建高度錯覺。但是我自己做了所有事情,而且我沒有時間學習GLSL,只是希望使用這一個着色器,所以非常感謝任何回覆(最好是有人可以發佈一些着色器代碼並將其解釋爲傻瓜)用於.cpp文件)GLSL代碼到2D高程地圖渲染地形
回答
您可能對"Parallax Occlusion Mapping"技術感興趣。一個好的實現可以發現here。
謝謝,這是很好的例子。我閱讀了一些GLSL教程,但我仍然不明白我應該傳遞給該着色器。我需要初始化GLSL代碼中定義的每個glogal變量? – Reiv
您需要設置以下變量:uniform mat4 matView; uniform mat3 matViewProjection; uniform float fHeightScale; uniform float fPerspectiveBias; uniform vec4 vLightOffset; – Constantinius
應該注意的是,在基於二維貼片的渲染中,視差遮擋貼圖並不十分有用。 2D瓦片意味着「自上而下」的觀點,在這種情況下,視差爲零。儘管可以使用通常與POM一起計算的自閉合項。這會給人一些深度的印象。 – Damon
這將踢屏幕上的Z給予高度圖的錯覺。 它實際上並沒有改變幾何。 [編輯]這對於自上而下的視圖沒有用處。我嘗試添加基於新的Z和光照方向的某種陰影效果。
此行:pos.z + = color.x + color.y + color.z;是推動Z.你可以給規模一個正數或負數。
/* Vertex Program
* Shifts Z by Textures color
*/
uniform sampler2D color_texture;
uniform float scale;
varying vec4 p_color;
void main()
{
vec2 texcoords = gl_MultiTexCoord0.st;
p_color = texture2D(color_texture,texcoords);
vec4 color = texture2D(color_texture,texcoords);
vec4 pos = gl_Vertex;
pos.z += color.x + color.y + color.z;
pos.z*=scale;
gl_Position = gl_ModelViewProjectionMatrix * pos;
}
這裏是非常簡單的片段程序..
/* Fragment Program
Copies incoming fragment color without change.
*/
varying vec4 p_color;
void main()
{
gl_FragColor = p_color;
}
此變形與氣泡/圓頂形狀基過的位置的光在世界空間中一個地形網格。地形鑲嵌得越多,結果就越好。
Const Float PI = 3.1415928;
vec3 vVertex = vec3(gl_Vertex);
float d = distance(lightPos , gl_Vertex);
float d2;
if (d < 1500.0)
{
d2 = d/1500.0;
d = cos(PI*2.0*d2);
}
else
{
d=0.0;
d2=0.0;
}
vVertex.y += (d*75.0)*(1.0-d2)-50.;
gl_Position = gl_ModelViewProjectionMatrix* vec4(vVertex,gl_Vertex.w);
- 1. 渲染2D塊狀地圖 - LibGDX
- 2. 如何正確高效地在2D遊戲中渲染Java圖形
- 3. 高效地渲染多個圖像
- 4. iPhone地圖渲染
- 5. 從OpenGL中的位圖渲染地形
- 6. 近地平線地形渲染
- 7. 谷歌地圖渲染空白地圖
- 8. 使用GLSL渲染矩形紋理
- 9. GLSL OpenGL多邊形不渲染
- 10. 地圖渲染錯誤slick2d
- 11. Google地圖渲染問題?
- 12. 渲染谷歌地圖backbonejs
- 13. 谷歌地圖不渲染
- 14. React本地視圖渲染
- 15. 分形地形/高度圖代
- 16. 將2500個geoJSON多邊形渲染到小冊子地圖上
- 17. 如何在Android上使用OpenGL渲染2D圖形/圖形?
- 18. 在遊戲中渲染2D地圖 - 裁剪和滾動
- 19. 渲染2d函數圖
- 20. 只能渲染底部的地形
- 21. 在Three.js中優化地形渲染
- 22. 3D:如何渲染/創建地形
- 23. PyOpenGL中的地形紋理未渲染
- 24. 從heightmap渲染的地形的大小
- 25. 在directx中渲染地形11
- 26. SDL平鋪和雪碧渲染地形
- 27. SharpDX渲染2D多邊形到離屏位圖
- 28. iOS圖形渲染
- 29. 製圖插件渲染奇數地圖
- 30. Opengl GLSL渲染紋理
「我沒有時間去學習GLSL只是這種」不可能讓你遠,因爲它不太可能有人會寫所有的代碼對你來說,包括着色器綁定,基於一個相當模糊的描述。然而,給你一些想法:遮光更高的地面打火機將給出一種便宜的AO近似,這種給人以深度印象。使用dFdx/dFdy,您可以估計地形法線所指向的位置。爲陽光安定一個光照矢量,並採取點積。這使得面向「太陽」的山坡更加明亮,也給人一種深度的幻覺。 – Damon
提供代碼。 – pmr