मुझे तीन। फ्रस्टम ऑब्जेक्ट से निपटने के लिए कुछ मदद की ज़रूरत है।तीन का उपयोग करके निकट/दूर विमान शिखरों की गणना करें। फ्रस्टम
मेरे समस्या:
मैं/के पास अब तक विमान कोने गणना करने के लिए की जरूरत है; मैं इन ट्यूटोरियल
- 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 वस्तु का उपयोग कर?
आपको बहुत धन्यवाद! मैं व्यर्थ में अपने जीवन को जटिल बना रहा था :-) यह समाधान सरल है और बेहतर काम करता है! – Skarafaz
मैं दृश्यमान स्थान के बाहर कण डालने से बचने के लिए मूल रूप से वही काम करने की कोशिश कर रहा हूं, लेकिन ऐसा नहीं लगता कि सही चीज हो रही है। http://jsfiddle.net/cZb66/ मेरा मतलब है इसका एक उदाहरण है। मुझे उम्मीद है कि कोने के वर्ग स्क्रीन के कोनों पर होंगे लेकिन वे नहीं हैं .... –
@ChrisMorgan यदि आपके कोई प्रश्न है तो आपको एक नई पोस्ट करने की आवश्यकता है। – WestLangley