2016-02-19 16 views
7

मैं एक ऐप बना रहा हूं जिसमें मैं बनावट के साथ कुछ विमान प्रस्तुत करता हूं। हालांकि, मैं हेलिक्स के त्रिज्या की गणना करना चाहता हूं (जिसे मैं हेलिक्स बनाने के लिए अपनी गणना में उपयोग करता हूं), गतिशील रूप से फ्रस्टम चौड़ाई और कैमरा स्थिति के आधार पर।हेलिक्स के त्रिज्या की गणना करें ताकि हेलिक्स में मॉडल निराशा के अंदर हों

हेलिक्स स्क्रीन x = 0, y = 0, z = 0 के केंद्र में स्थित है।

मैं इसे स्क्रीन अभिविन्यास (परिदृश्य/चित्र) पर विचार करना चाहूंगा। अब तक यह मेरे पास कोड है लेकिन ऐसा लगता है कि मुझे कुछ याद आ रहा है क्योंकि बाएं और दाएं विमान के अंदर नहीं हैं व्यूपोर्ट

App.prototype.calculateHelixRadius = function(){ 

    // plane width = height = 512; 

    var friend = this.getFriend(); 
    var vFOV = friend.camera.fov * Math.PI/180; 
    var dist = utils.getAbsPointsDistance3D(friend.camera.position, friend.scene.position); 
    var aspect = friend.settings.container.clientWidth/friend.settings.container.clientHeight; 

    var frustumHeight = 2.0 * dist * Math.tan(0.5 * vFOV); 
    var frustumWidth = frustumHeight * aspect; 

    return utils.isLandscape() ? frustumHeight/2 : frustumWidth/2 ; 

}; 

मैं क्या गलत कर रहा हूं और स्क्रीन के किनारों पर विमान क्यों नहीं हैं?

संदर्भ यहाँ

इसके अलावा getAbsPointsDistance3D

var utils = { 

    // other helpers... 

    getAbsPointsDistance3D: function(p1, p2) { 

     var xd = p2.x - p1.x; 
     var yd = p2.y - p1.y; 
     var zd = p2.z - p1.z; 

     return Math.sqrt(xd * xd + yd * yd + zd * zd); 
    } 

}; 

अद्यतन

मैं जिले पैरामीटर को कम करने की कोशिश की के कोड है लेकिन परिणाम संगत नहीं हैं ...

+0

1. http://stackoverflow.com/questions/14614252/how-to-fit-camera-to-object, 2. http://stackoverflow.com/questions/20059612/calculate- कैमरा-ज़ूम-आवश्यक-ऑब्जेक्ट-टू-फिट-इन-स्क्रीन-ऊंचाई, 3. http://stackoverflow.com/questions/16462848/three-js-zoom-to-fit-width-of-objects- अनदेखी-ऊंचाई – gaitat

+3

जो आप पहुंचने का प्रयास कर रहे हैं उसका एक स्क्रीनशॉट, इस समस्या को हल करने में मदद करेगा। – ProllyGeek

उत्तर

1

मुझे आश्चर्य है अगर निम्नलिखित आपके क्लिपिंग बताते हैं।

आप अपनी निराशाजनक विशेषताओं की गणना करते हैं, फिर हेलिक्स त्रिज्या की गणना करें, कहें, फ्रस्टम चौड़ाई (स्क्रीन पहलू के आधार पर चौड़ाई या ऊंचाई ... मुझे यहां कुछ विवरण गलत हो रहे हैं क्योंकि आपका प्रश्न नहीं है विवरणों को पूरी तरह से समझाएं, लेकिन सामान्य अवधारणाएं अभी भी हैं)। नीचे दी गई छवि परिदृश्य का एक शीर्ष दृश्य है जो सिलिकर का प्रतिनिधित्व करने वाला एक चक्र दिखाती है जो हेलिक्स को संलग्न करती है। मेरा मानना ​​है कि आपने radius1 की गणना की है। यदि ऐसा है, तो ध्यान दें कि सिलेंडर (छायांकित क्षेत्र) का क्लिपिंग और सिलेंडर केंद्र के "सामने" में हेलिक्स होगा।

enter image description here

इसके बजाय आप आप radius2 की जरूरत के रूप में दूसरी छवि में दिखाया गया सिलेंडर/हेलिक्स त्रिज्या की गणना करने की जरूरत है, अर्थात। यदि छवि पर छोड़ा गया बड़ा कोण fov(फिर से, vFOV? या hFOV ?, आदि है, इस पर निर्भर करता है कि आपका हेलिक्स ऊपर या नीचे की तरफ इत्यादि हो रहा है या नहीं), तो उसका आधा कोण है fov/2। यह सिलेंडर के केंद्र में दिखाया गया वही कोण है। इस प्रकार, आपको अपने हेलिक्स त्रिज्या को निम्नानुसार कम करने की आवश्यकता है: radius2 = radius1 * cos(fov/2)

enter image description here

+0

मैं वही काम कर रहा था। आपकी सोच सही है, यह पहली जगह थी और आपके समय के लिए धन्यवाद – Syd

संबंधित मुद्दे