仅将相机前面的脸部变成红色?

我是GLSL的新手,我一直在努力寻找一种方法来将旋转的立方体的表面涂成红色。我已经实现了在一张具有法线x的面上绘制红色的功能,但是我的目标是使立方体在相机正面所面对的任何面上绘制一个红色的面。

片段着色器

#version 330

in vec3 normal;
out vec4 fragColor;
in vec4 color;

in vec4 vertexColor;

void main() { 

    vec3 nor = normalize(normal);
    fragColor = vec4(nor.x, 0.0, 0.0, 1.0);


 }

顶点着色器

#version 330

uniform mat4 u_m_matrix;
uniform mat4 u_vp_matrix;

layout (location=0) in vec3 a_position;
layout (location=1) in vec3 a_normal;

out vec3 normal;
out vec4 fragColor;

out vec4 vertexColor;
out vec4 color;

void main()
{

  normal = a_normal;
    gl_Position = u_vp_matrix * u_m_matrix * vec4(a_position, 1.0);

}


我尝试将点积与法线和相机看向的方向(0、0、1)弄混,但仍未完成任何工作。

This would be the desired effect: https://i.imgur.com/yOscdJo.gifv

实际上,我确实认为它涉及到一些数学运算(点积),也许是获得cosTetha并查看矢量是否完全垂直,并且取决于绘制的是红色还是黑色?

评论