1
0
mirror of https://github.com/LearnOpenGL-CN/LearnOpenGL-CN.git synced 2025-08-22 20:25:28 +08:00

使语句更通顺

This commit is contained in:
cathy0612
2020-02-04 22:08:41 +08:00
parent a45aab50e9
commit f7772ac8b5

View File

@@ -148,9 +148,9 @@ vec2 ParallaxMapping(vec2 texCoords, vec3 viewDir)
}
```
这个相对简单的函数是我们所讨论过的内容的直接表述。我们用本来的纹理坐标texCoords从高度贴图中来采样当前fragment高度\(\color{green}{H(A)}\)。然后计算出\(\color{brown}{\bar{P}}\)x和y元素在切线空间中viewDir向量除以它的z元素用fragment的高度对它进行缩放。我们同时引入额一个height_scale的uniform来进行一些额外的控制因为视差效果如果没有一个缩放参数通常会过于强烈。然后我们用\(\color{brown}{\bar{P}}\)减去纹理坐标来获得最终的经过位移纹理坐标。
这个相对简单的函数是我们所讨论过的内容的直接表述。我们用本来的纹理坐标texCoords从高度贴图中来采样,得到当前fragment高度\(\color{green}{H(A)}\)。然后计算出\(\color{brown}{\bar{P}}\)x和y元素在切线空间中viewDir向量除以它的z元素用fragment的高度对它进行缩放。我们同时引入额一个height_scale的uniform来进行一些额外的控制因为视差效果如果没有一个缩放参数通常会过于强烈。然后我们用\(\color{brown}{\bar{P}}\)减去纹理坐标来获得最终的经过位移纹理坐标。
有一个地方需要注意就是viewDir.xy除以viewDir.z那里。因为viewDir向量是经过了标准化的viewDir.z会在0.0到1.0之间的某处。当viewDir大致平行于表面时它的z元素接近于0.0除法会返回比viewDir垂直于表面的时候更大的\(\color{brown}{\bar{P}}\)向量。所以基本上我们增加了\(\color{brown}{\bar{P}}\)的大小,当以一个角度朝向一个表面相比朝向顶部时它对纹理坐标会进行更大程度的缩放;这回在角上获得更大的真实度。
有一个地方需要注意就是viewDir.xy除以viewDir.z那里。因为viewDir向量是经过了标准化的viewDir.z会在0.0到1.0之间的某处。当viewDir大致平行于表面时它的z元素接近于0.0除法会返回比viewDir垂直于表面的时候更大的\(\color{brown}{\bar{P}}\)向量。所以,从本质上,相比正朝向表面,当带有角度地看向平面时,我们会更大程度地缩放\(\color{brown}{\bar{P}}\)的大小,从而增加纹理坐标的偏移;这样做在视角上获得更大的真实度。
有些人更喜欢在等式中不使用viewDir.z因为普通的视差贴图会在角上产生不想要的结果这个技术叫做有偏移量限制的视差贴图Parallax Mapping with Offset Limiting。选择哪一个技术是个人偏好问题但我倾向于普通的视差贴图。