glFrustum
生成透视投影矩阵。
这个矩阵将空间的一部分(“平截头体”)映射到您的屏幕。许多警告适用(标准化设备坐标、透视划分等),但这就是想法。
令您困惑的部分是已弃用的 OpenGL API 的遗留物。您可以放心地忽略它,因为通常您应用于gluFrustum()
单位投影矩阵,因此文档中提到的乘法无效。
一种可能更容易理解的做事方式如下:
// Projection matrix : 45° Field of View, 4:3 ratio, display range : 0.1 unit <-> 100 units
glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.0f);
// Or, for an ortho camera :
//glm::mat4 Projection = glm::ortho(-10.0f,10.0f,-10.0f,10.0f,0.0f,100.0f); // In world coordinates
// Camera matrix
glm::mat4 View = glm::lookAt(
glm::vec3(4,3,3), // Camera is at (4,3,3), in World Space
glm::vec3(0,0,0), // and looks at the origin
glm::vec3(0,1,0) // Head is up (set to 0,-1,0 to look upside-down)
);
// Model matrix : an identity matrix (model will be at the origin)
glm::mat4 Model = glm::mat4(1.0f);
// Our ModelViewProjection : multiplication of our 3 matrices
glm::mat4 MVP = Projection * View * Model; // Remember, matrix multiplication is the other way around
在这里,我使用glm::perspective
了(相当于旧式 gluPerspective() ),但您也可以使用 gluFrustum。
至于函数的参数,最好通过文档的这一部分来解释:
left bottom - nearVal 和 right top - nearVal 指定近裁剪平面上映射到窗口左下角和右上角的点,假设眼睛位于 (0, 0, 0)
如果你不熟悉变换矩阵,我在这里写了一个教程;“投影矩阵”部分尤其应该对您有所帮助。