是"顶部"视锥体被认为是近平面的顶部?

时间:2015-04-12 06:36:59

标签: javascript opengl math matrix webgl

似乎在以下函数中,视锥体的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)给出了近平面上半部分的高度。

这是“顶视图截头”在OpenGL中意味着什么,还是仅仅针对这种情况?

1 个答案:

答案 0 :(得分:0)

当前版本的OpenGL在API中并没有真正的平截头体概念。只有顶点着色器可以生成剪辑坐标。他们如何做到这一点,包括他们应用的转换,完全取决于调用者。当然,使用被定义为视锥体的投影矩阵仍然很常见。

对于传统OpenGL中的glFrustum()调用,您的观察是绝对正确的。 leftrightbottomtopnear平面进行测量。来自man page

  

通常,矩阵模式为GL_PROJECTION,左下角 - nearVal和右上角 - nearVal指定近剪裁平面上映射到窗口左下角和右上角的点,[..]