我有一个基于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