2012-11-28 8 views
5

एक छोटे से openscenegraph आवेदन लिखना, और कैमरा ऊंचाई बदलने के तरीके की आवश्यकता में। अनिवार्य रूप से, आंख अंतरिक्ष में एक गेंद पर सीधे देख रही है। मैं जो करना चाहता हूं वह कैमरा ऊंचाई को कम करने में सक्षम है, इसलिए मैं नीचे से गेंद पर सक्षम हूं, और अगर मुझे आवश्यकता हो तो कैमरे की ऊंचाई भी बढ़ाएं। मैं ओपेन कोड या ओपनसेनग्राफ के साथ इसे कैसे प्राप्त करूं?सी ++ ओपनसेनग्राफ चेंज कैमरा आई ऊंचाई

int main(int argc, char* argv[]) 
{ 
    osg::ref_ptr<osg::ShapeDrawable> shape2 = new osg::ShapeDrawable; 
    shape2->setShape(new osg::Sphere(osg::Vec3(3.0f, 0.0f, 0.0f),1.0f)); 
    shape2->setColor(osg::Vec4(0.0f, 0.0f, 1.0f, 1.0f)); 
    osg::ref_ptr<osg::Geode> root = new osg::Geode; 
    root->addDrawable(shape2.get());///add first osgshapeDrawable2 
    osgViewer::Viewer viewer; 
    viewer.setSceneData(root.get());///set the Geode as scenedata for the viewer 
    return viewer.run(); 
} 

उत्तर

3

आप osgViewer::Camera का नियंत्रण अपने हाथ में लेने के लिए की जरूरत है, आप बुनियादी ओपन के साथ ऐसा करने की कोशिश नहीं करनी चाहिए।

osgViewer::Viewer::getCameraWithFocus आपको कैमरा प्राप्त करना चाहिए। यहां से आप कैमरा की स्थिति और लुक सेट कर सकते हैं।

ध्यान रखें, आपके जैसे मूल ऐप में, कैमरा मैनिपुलेटर प्रति फ्रेम एक बार कैमरा (माउस इंटरैक्शन पर आधारित) की स्थिति निर्धारित कर रहा है।

आपको यह तय करना होगा कि आप माउस इनपुट से कैसे निपटना चाहते हैं और संभवतः कैमरा मैनिपुलेटर काम कर रहे हैं।

+0

मेरे पास एक मैनिपुलेटर है और कैमरा है। बाएं क्या है ऊंचाई ऊंचाई बदल रहा है। मुझे यह कैसे हासिल होगा? कैमरे की किस संपत्ति को मैं इस मामले में ऊपर या नीचे ले जाने के लिए संशोधित करता हूं? – Kobojunkie

0

अपने कैमरा ऑब्जेक्ट पर setViewMatrixAsLookAt विधि (link) का उपयोग करें। यह विधि तीन पैरामीटर लेती है:

  • eye: आपके कैमरे की स्थिति - यह आप इसकी ऊंचाई निर्धारित करने के लिए उपयोग कर सकते हैं।
  • center: जिस बिंदु पर आपका कैमरा देख रहा है - इसे ऑब्जेक्ट के केंद्र में सेट करें।
  • up: आपके कैमरे का अप-वेक्टर - यह नियंत्रित करता है कि आपका व्यूपोर्ट इसके केंद्र के बारे में कैसे घूमता है और पारंपरिक ग्राफिक्स समन्वय प्रणाली में [0, 1, 0] के बराबर होना चाहिए।

क्योंकि इस विधि बिंदु है जिस पर यह है देख निर्दिष्ट द्वारा कैमरे के रोटेशन का ख्याल रखता है, आप केवल संशोधित करना चाहिए पूरा करने के लिए आप जो चाह रहे हैं eye वेक्टर के y- निर्देशांक।

आप वेक्टर ट्रिपलेट here पर 'देखो' पर अधिक जानकारी देख सकते हैं।

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