视锥体的 "top" 是否被认为是近平面的顶部?
Is the "top" of a view frustum considered the top of the near plane?
似乎在下面的函数中,视锥体的top
被认为是在近平面上。这是真的?如果不是,它在哪里 "top"?
/*
* mat4.perspective
* Generates a perspective projection matrix with the given bounds
*
* Params:
* fovy - scalar, vertical field of view
* aspect - scalar, aspect ratio. typically viewport width/height
* near, far - scalar, near and far bounds of the frustum
* dest - Optional, mat4 frustum matrix will be written into
*
* Returns:
* dest if specified, a new mat4 otherwise
*/
mat4.perspective = function(fovy, aspect, near, far, dest) {
var top = near*Math.tan(fovy*Math.PI / 360.0);
var right = top*aspect;
return mat4.frustum(-right, right, -top, top, near, far, dest);
};
Math.tan(fovy*Math.PI / 360.0);
基本上是 tan(fovy/2)
如果 fovy
是弧度而不是度数,所以 near*tan(fovy/2)
给出近平面上半部分的高度。
这就是 "top of the view frustum" 在 OpenGL 中的意思,还是只针对这种情况?
当前版本的 OpenGL 在 API 中并没有真正的截锥体概念。只有生成剪辑坐标的顶点着色器。他们如何做到这一点,包括他们应用什么转换,完全取决于调用者。当然,使用定义为视锥体的投影矩阵仍然很常见。
对于遗留 OpenGL 中的 glFrustum()
调用,您的观察是完全正确的。 left
、right
、bottom
和 top
是在 near
平面上测量的。来自 man page:
Typically, the matrix mode is GL_PROJECTION, and left bottom - nearVal and right top - nearVal specify the points on the near clipping plane that are mapped to the lower left and upper right corners of the window, [..]
似乎在下面的函数中,视锥体的top
被认为是在近平面上。这是真的?如果不是,它在哪里 "top"?
/*
* mat4.perspective
* Generates a perspective projection matrix with the given bounds
*
* Params:
* fovy - scalar, vertical field of view
* aspect - scalar, aspect ratio. typically viewport width/height
* near, far - scalar, near and far bounds of the frustum
* dest - Optional, mat4 frustum matrix will be written into
*
* Returns:
* dest if specified, a new mat4 otherwise
*/
mat4.perspective = function(fovy, aspect, near, far, dest) {
var top = near*Math.tan(fovy*Math.PI / 360.0);
var right = top*aspect;
return mat4.frustum(-right, right, -top, top, near, far, dest);
};
Math.tan(fovy*Math.PI / 360.0);
基本上是 tan(fovy/2)
如果 fovy
是弧度而不是度数,所以 near*tan(fovy/2)
给出近平面上半部分的高度。
这就是 "top of the view frustum" 在 OpenGL 中的意思,还是只针对这种情况?
当前版本的 OpenGL 在 API 中并没有真正的截锥体概念。只有生成剪辑坐标的顶点着色器。他们如何做到这一点,包括他们应用什么转换,完全取决于调用者。当然,使用定义为视锥体的投影矩阵仍然很常见。
对于遗留 OpenGL 中的 glFrustum()
调用,您的观察是完全正确的。 left
、right
、bottom
和 top
是在 near
平面上测量的。来自 man page:
Typically, the matrix mode is GL_PROJECTION, and left bottom - nearVal and right top - nearVal specify the points on the near clipping plane that are mapped to the lower left and upper right corners of the window, [..]