我正在使用强制使用固定管道转换的NV Path extension。现在,对于视图和模型矩阵,我只是自己滚动并通过以下方式加载:
glMatrixPushEXT(GL_MODELVIEW);
glMatrixLoadfEXT(GL_MODELVIEW, value_ptr(viewmodel) );
我有透视矩阵FOV的问题。创建persp矩阵的固定方法是:
glMatrixLoadIdentityEXT(GL_PROJECTION);
glMatrixFrustumEXT(GL_PROJECTION, -aspect_ratio, aspect_ratio, -1, 1, nearF, farF);
但它不允许传递自定义FOV。因此,它可能会根据上述方法的l,r,b,t参数创建一些默认FOV。我可以使用:
glMatrixLoadfEXT(GL_PROJECTION, myProjectionMatrix);
加载自定义投影矩阵而不使用glMatrixFrustumEXT?
更新
正如一些人指出的那样,我可以像模型视图一样加载投影矩阵。但是我发现我的自定义投影看起来与使用glMatrixFrustumEXT()时看起来不一样。可能FOV计算是不同的。有谁知道glMatrixFrustumEXT如何计算FOV?
答案 0 :(得分:3)
使用glFrustum或glMatrixFrustumEXT可以指定FOV,实际上是这样做的。当您定义近平面上的点以及近平面的距离时,您将隐含地定义垂直和水平的fov。
看看旧的gluPerspective功能:
gluPersepctive(fov_y, aspect, zNear, zFar)
这会产生一个对称的平截头体,其给定的fov_y垂直FOV如下:
top=tan(fov_y/2.0) * zNear; // assuming fov_y in radians here
bottom=-top;
left=bottom*aspect;
right=-left;
glFrustum(left, right, bottom, top, zNear, zFar);
在您的代码中,您只需指定2 * atan(1 / nearF)的垂直FOV