THREE.Frustumオブジェクトを扱うにはいくつかの助けが必要です。THREE.Frustumを使用して近平面/遠平面の頂点を計算します。
私の問題:私は遠い/近い平面の頂点を計算する必要が
。私はこれらのチュートリアル
- http://www.lighthouse3d.com/tutorials/view-frustum-culling/view-frustums-shape/
- http://www.lighthouse3d.com/tutorials/view-frustum-culling/geometric-approach-extracting-the-planes/
を見て撮影したと私はちょうど左上取得する(正確に実装し、この関数(私はそう願っています)手順を説明スケッチしました/右の頂点、カメラを仮定すると、唯一の左と右の見ることができます):
// Near Plane dimensions
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
getVertices : function() {
var p = camera.position.clone();
var l = getCurrentTarget(); // see below
var u = new THREE.Vector3(0, 1, 0);
var d = new THREE.Vector3();
d.sub(l, p);
d.normalize();
var r = new THREE.Vector3();
r.cross(u, d);
r.normalize();
// Near Plane center
var dTmp = d.clone();
var nc = new THREE.Vector3();
nc.add(p, dTmp.multiplyScalar(camera.near));
// Near Plane top-right and top-left vertices
var uTmp = u.clone();
var rTmp = r.clone();
var ntr = new THREE.Vector3();
ntr.add(nc, uTmp.multiplyScalar(hNear/2));
ntr.subSelf(rTmp.multiplyScalar(wNear/2));
uTmp.copy(u);
rTmp.copy(r);
var ntl = new THREE.Vector3();
ntl.add(nc, uTmp.multiplyScalar(hNear/2));
ntl.addSelf(rTmp.multiplyScalar(wNear/2));
// Far Plane center
dTmp.copy(d);
var fc = new THREE.Vector3();
fc.add(p, dTmp.multiplyScalar(camera.far));
// Far Plane top-right and top-left vertices
uTmp.copy(u);
rTmp.copy(r);
var ftr = new THREE.Vector3();
ftr.add(fc, uTmp.multiplyScalar(hFar/2));
ftr.subSelf(rTmp.multiplyScalar(wFar/2));
uTmp.copy(u);
rTmp.copy(r);
var ftl = new THREE.Vector3();
ftl.add(fc, uTmp.multiplyScalar(hFar/2));
ftl.addSelf(rTmp.multiplyScalar(wFar/2));
getCurrentTarget : function() {
var l = new THREE.Vector3(0, 0, -100);
this.camera.updateMatrixWorld();
this.camera.matrixWorld.multiplyVector3(l);
return l;
}
これは動作するようですが、...
私の質問:THREE.Frustumオブジェクトを使用して、より洗練された(多分正しい)方法で同じ結果を得ることができますか?
はどうもありがとうございましthree.jsように更新!私は無駄に私の人生を複雑にしていた:-)このソリューションは簡単で、より良い作品です! – Skarafaz
私は目に見える空間の外に粒子を置くのを避けるために、基本的に同じことをしようとしていますが、正しいことが起きているようには見えません。 http://jsfiddle.net/cZb66/は、私が意味するものの一例です。私は角の四角が画面の角にあることを期待しましたが、彼らはそうではありません.... –
@ChrisMorganあなたは質問がある場合は、新しい投稿をする必要があります。 – WestLangley