【发布时间】:2019-09-28 15:22:07
【问题描述】:
我关注了一篇名为“基于 GPU 的地形纹理算法”的论文,其中内容如下:
应用三平面纹理的主要算法相当简单。 首先我们用同样的方法检查斜率是否比较大 我们用基于斜率的纹理来做。这些坡度高的地区 将是唯一受算法影响的区域。然后我们检查什么 法线的较大分量是 x 和 z 中的一个。如果 x 是 较大的分量,我们使用几何 z 坐标作为纹理 坐标 s,几何 y 坐标作为纹理坐标 吨。如果 z 是较大的分量,我们使用几何 x 坐标作为 纹理坐标 s,几何 y 坐标作为纹理 坐标t。
请注意,我在边界中添加了白线只是为了进行实验,所以现在我的地图周围有最大高度的墙。
紧接着文章,下面是顶点着色器中的实现:
#version 430
uniform mat4 ProjectionMatrix;
uniform mat4 CameraMatrix;
uniform vec3 scale;
layout(location = 0) in vec3 vertex;
layout(location = 1) in vec3 normal;
out vec3 fsVertex;
out vec3 fsNormal;
out vec2 fsUvs;
void main()
{
fsVertex = vertex;
fsNormal = normalize(normal);
if(fsNormal.y < 0.75) {
if(fsNormal.x > fsNormal.z)
fsUvs = vertex.zy * scale.zy;
else
fsUvs = vertex.xy * scale.xy;
}
else
fsUvs = vertex.xz * scale.xz;
gl_Position = ProjectionMatrix * CameraMatrix * vec4(vertex * scale, 1.0);
}
Here's片段着色器,如果有帮助的话。
这是我得到的:
Here's a further look,表示比例。 (高度图的)顶部和左侧墙壁渲染正常,底部和右侧墙壁仍然受到拉伸的影响。我还在墙的开始处发现了这些奇怪的延伸点。
这可能是什么原因?
【问题讨论】:
标签: opengl graphics glsl shader hlsl