计算相机近平面和远平面边界

2024-04-04

我正在尝试执行中提到的计算使用 THREE.Frustum 计算近/远平面顶点 https://stackoverflow.com/questions/12018710/calculate-near-far-plane-vertices-using-three-frustum。我使用了问题和答案,https://stackoverflow.com/a/12022005/299037 https://stackoverflow.com/a/12022005/299037,整理一个完整的工作示例,http://jsfiddle.net/cZb66/ http://jsfiddle.net/cZb66/,将粒子放置在远平面的边界处,在这种情况下,近平面非常近,以至于粒子会遮挡视图。由于某种原因,远平面点并不像我预期的那样位于相机的范围(窗口的角落)。

hNear = 2 * Math.tan(camera.fov / 2) * camera.near; // height
wNear = hNear * camera.aspect; // width

// Far Plane dimensions
hFar = 2 * Math.tan(camera.fov / 2) * camera.far; // height
wFar = hFar * camera.aspect; // width

var farTopLeft = new THREE.Vector3( wFar / 2, hFar / 2, -camera.far );
var farBottomRight = new THREE.Vector3( -wFar / 2, -hFar / 2, -camera.far );
var farTopRight = new THREE.Vector3( -wFar / 2, hFar / 2, -camera.far );
var farBottomLeft = new THREE.Vector3( wFar / 2, -hFar / 2, -camera.far );

// adjust the vectors to the camera location and direction
camera.updateMatrixWorld();
farTopLeft.applyMatrix4( camera.matrixWorld );
farBottomRight.applyMatrix4( camera.matrixWorld );
farTopRight.applyMatrix4(camera.matrixWorld);
farBottomLeft.applyMatrix4(camera.matrixWorld);

var z = 1;
var farParticles = new THREE.Geometry();
farParticles.vertices.push(new THREE.Vector3(farTopLeft.x, farTopLeft.y, z));
farParticles.vertices.push(new THREE.Vector3(farBottomRight.x, farBottomRight.y, z));
farParticles.vertices.push(new THREE.Vector3(farTopRight.x, farTopRight.y, z));
farParticles.vertices.push(new THREE.Vector3(farBottomLeft.x, farBottomLeft.y, z));
farParticles.vertices.push(new THREE.Vector3(0, 0, 0));

你很接近。camera.fov以度为单位。你需要转换camera.fov计算可见高度时使用弧度。

hNear = 2 * Math.tan( camera.fov * Math.PI / 180 / 2 ) * camera.near;

还有一些其他错误。这是一个工作小提琴:

http://jsfiddle.net/cZb66/3/ http://jsfiddle.net/cZb66/3/

三.js r.66

编辑:将 jsfiddle 链接更新为具有 1x1 近粒子的版本。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算相机近平面和远平面边界 的相关文章

随机推荐