我试图将视锥体剔除应用到我的场景中。 我基本上有这个设置:
1
,那么四边形会分成4个较小的四边形(0,0,0)
) depth 1
处的四元组如下所示:
1 --- 2
3 --- 4
其中quad 1
代表四叉树的nw quadrant
,quad 2
代表四叉树的ne quadrant
,依此类推。
我的目标是(例如depth 1
)每当我移动相机时,例如quad 1
和3
不再可见,它们就不应再渲染了。
但是我当前的实现并不正确。我正在提取这样的frustumplanes
,我认为这是错误。
createFrustumPlanes(vp) {
let leftPlane = vec4.fromValues(vp[0] + vp[3], vp[4] + vp[7], vp[8] + vp[11], vp[12] + vp[15]);
vec4.normalize(leftPlane, leftPlane);
let rightPlane = vec4.fromValues(-vp[0] + vp[3], -vp[4] + vp[7], -vp[8] + vp[11], -vp[12] + vp[15]);
vec4.normalize(rightPlane, rightPlane);
let bottomPlane = vec4.fromValues(vp[1] + vp[3], vp[5] + vp[7], vp[9] + vp[11], vp[13] + vp[15]);
vec4.normalize(bottomPlane, bottomPlane);
let topPlane = vec4.fromValues(-vp[1] + vp[3], -vp[5] + vp[7], -vp[9] + vp[11], -vp[13] + vp[15]);
vec4.normalize(topPlane, topPlane);
let nearPlane = vec4.fromValues(vp[2] + vp[3], vp[6] + vp[7], vp[10] + vp[11], vp[14] + vp[15]);
vec4.normalize(nearPlane, nearPlane);
let farPlane = vec4.fromValues(-vp[2] + vp[3], -vp[6] + vp[7], -vp[10] + vp[11], -vp[14] + vp[15]);
vec4.normalize(farPlane, farPlane);
return [
leftPlane,
rightPlane,
bottomPlane,
topPlane,
nearPlane,
farPlane
];
}
其中vp
是以下this._vpMatrix
:
this._lookAtMatrix = mat4.create();
mat4.lookAt(this._lookAtMatrix, vec3.fromValues(0, 0, 0), this._lookAtVector, vec3.fromValues(0, 1, 0));
this._projectionMatrix = mat4.create();
mat4.perspective(this._projectionMatrix, this._FOV * Math.PI / 180.0, this._width / this._height, 0.001, 50);
this._vpMatrix = mat4.create();
mat4.multiply(this._vpMatrix, this._projectionMatrix, this._lookAtMatrix);
如何从frustum planes
中提取matrix
以及从哪个{{1}}创建平面?