出于我无法控制的目的,我需要在顶点着色器中计算ModelView矩阵。我知道这是一个坏主意,但我现在没有选择。这是我的顶点着色器中的代码。基于https://stackoverflow.com/a/6802424
mat4 lookAt(vec3 eye, vec3 center, vec3 up)
{
vec3 zaxis = normalize(center - eye);
vec3 xaxis = normalize(cross(up, zaxis));
vec3 yaxis = cross(zaxis, xaxis);
mat4 matrix;
//Column Major
matrix[0][0] = xaxis.x;
matrix[1][0] = yaxis.x;
matrix[2][0] = zaxis.x;
matrix[3][0] = 0;
matrix[0][1] = xaxis.y;
matrix[1][1] = yaxis.y;
matrix[2][1] = zaxis.y;
matrix[3][1] = 0;
matrix[0][2] = xaxis.z;
matrix[1][2] = yaxis.z;
matrix[2][2] = zaxis.z;
matrix[3][2] = 0;
matrix[0][3] = -dot(xaxis, eye);
matrix[1][3] = -dot(yaxis, eye);
matrix[2][3] = -dot(zaxis, eye);
matrix[3][3] = 1;
return matrix;
}
void main( void )
{
vec3 cam = vec3(0, 0, 3);
mat4 test = lookAt(cam, vec3(0,0,0), vec3(0, 1, 0));
gl_Position = gl_ProjectionMatrix * test * gl_Vertex;
//gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex;
}
但是,当我使用它代替我的ModelView Matrix时,它无法正常工作。但我不知道出了什么问题。有人能指出我正确的方向吗?
以下是一些图片,虽然不是很有帮助。
使用程序ModelViewMatrix
使用Vertex Shader lookAt功能