OpenGL Matcap 着色器在透视中摇摆不定?

问题描述 投票:0回答:0

我正在尝试在 OpenGL 中编写一个 matcap 着色器

#version 300 es
。我正在努力将法线方向转换为 UV 空间。

到目前为止,通过将网格法线方向与视图矩阵相乘,它正在工作 90%。生成的向量 X 和 Y 坐标用于 UV,而 Z 坐标提供了很好的菲涅耳效果。

问题是如果网格从视图中心点移开,坐标会失真。我原以为他们只是从视野的前方投射出来。似乎我必须以某种方式在转换过程中考虑空间中的网格位置,但我无法弄清楚需要做什么。

如何将网格法线方向转换到我的视图空间并更正网格平移?


顶点着色器:

v_Normal = mat3(transpose(inverse(MODEL_MATRIX))) * NORMAL;

片段着色器:

vec3 normalDirection = normalize(VIEW_MATRIX * vec4(v_Normal, 0.0)).rgb;

vec2 screenSpaceUV = normalDirection.xy * 0.5 + vec2(0.5,0.5);

vec4 matCap = texture(u_MatCap, vec2(screenSpaceUV.x, 1.0 - screenSpaceUV.y));

Test Image with Grid Texture

matrix 3d opengl-es glsl transformation
© www.soinside.com 2019 - 2024. All rights reserved.