您必须手动计算矩阵,然后将其传递给 OpenGL。
计算矩阵
这个sn-p的代码基于gluPerspective documentation。
void BuildPerspProjMat(float *m, float fov, float aspect,
float znear, float zfar)
{
float f = 1/tan(fov * PI_OVER_360);
m[0] = f/aspect;
m[1] = 0;
m[2] = 0;
m[3] = 0;
m[4] = 0;
m[5] = f;
m[6] = 0;
m[7] = 0;
m[8] = 0;
m[9] = 0;
m[10] = (zfar + znear) / (znear - zfar);
m[11] = -1;
m[12] = 0;
m[13] = 0;
m[14] = 2*zfar*znear / (znear - zfar);
m[15] = 0;
}
有一个名为 OpenGL Mathematics 的 C++ 库可能很有用。
在 OpenGL 3.1 中加载矩阵
我还是 OpenGL 3.1 API 的新手,但是您需要更新 GPU 上的矩阵,然后在顶点着色器中使用它以获得正确的透视。以下代码只是使用glUniformMatrix4fv 将矩阵加载到视频卡上。
{
glUseProgram(shaderId);
glUniformMatrix4fv(glGetUniformLocation(shaderId, "u_proj_matrix"),
1, GL_FALSE, theProjectionMatrix);
RenderObject();
glUseProgram(0);
}
来自随机blog 的简单顶点着色器(通过堆栈溢出找到)。
attribute vec4 a_position;
attribute vec4 a_color;
varying vec4 v_color;
uniform mat4 u_proj_matrix;
uniform mat4 u_model_matrix;
void main() {
mat4 mvp_matrix = u_proj_matrix * u_model_matrix;
v_color = a_color;
gl_Position = mvp_matrix * a_position;
}