Orthographic projection of 3D shape libgdx -
मैं इस सरल ट्यूटोरियल को कार्यान्वित कर रहा हूं
blog.xoppa.com/basic-3d-using-libgdx-2/
परन्तु परिप्रेक्ष्य कैमरे को एक यातायात के साथ स्थानांतरित करने की कोशिश कर रहा है।
हालांकि, मुझे समझने में कुछ समस्या है कि कैमरे की स्थिति कैसे काम करती है:
मैंने जोड़ा
< कोड> कैम 2 = नया ऑर्थोग्राफिक कैमेरा (जीडीएक्स। ग्राफिक्स .getWidth (), जीडीएक्सजीआरफ़िक्स.गेटहाइट ()); Cam2.setToOrtho (सच, Gdx.graphics.getWidth (), Gdx.graphics.getHeight ()); cam2.position.set (0,0,10); Cam2.lookAt (0, 0, 0); Cam2.update ()और मुझे एक बहुत छोटा वर्ग मिलता है। अगर मैं स्थिति बदलता हूं।
cam2.position.set (0,0,100);
मुझे कुछ भी नहीं दिखाई दे रहा है, और मुझे आश्चर्य है कि ऑर्थोग्राफिक कैमरे को जेड की अनदेखी क्यों नहीं की जानी चाहिए।
मूलतः मुझे क्या चाहिए एक 3D आकार बनाने और इसे उसी पर प्रदर्शित करना है दो अलग-अलग दृश्यों में समय, एक परिप्रेक्ष्य का उपयोग करने वाला एक आया और दूसरा एक ऑर्थोग्राफिक कैमरा का उपयोग कर रहा था।धन्यवाद!
यह पूर्ण कोड है
सार्वजनिक वर्ग MyGdxGame लागू ApplicationListener {// सार्वजनिक परिप्रेक्ष्य कैमरा कैम; सार्वजनिक ऑर्थोग्राफिक कैमरामा cam2; सार्वजनिक मॉडलबैच मॉडलबैच; सार्वजनिक मॉडल मॉडल; सार्वजनिक मॉडल उदाहरण उदाहरण; @ ओवरराइड सार्वजनिक शून्य बनाएँ () {modelBatch = नया ModelBatch (); // कैम = नया परिप्रेक्ष्य कैमरा (67, जीडीएक्स.graphics.getWidth () / 2, Gdx.graphics.getHeight () / 2); Cam2 = नया ऑर्थोग्राफिक कैमेरा (जीडीएक्स। ग्राफिक्स .getWidth (), जीडीएक्स। ग्राफिक्स.गेटहाइट ()); cam2.setToOrtho (सच, Gdx.graphics.getWidth (), Gdx.graphics.getHeight ()); // cam.position.set (10f, 10f, 10f); // cam.lookAt (0, 0, 0); // cam.near = 1f; // cam.far = 300f; // cam.update (); cam2.position.set (0, 0,0); cam2.lookAt (0, 0, 0); cam2.update (); मॉडलबिल्डर मॉडलबिल्डर = नया मॉडल निर्माता (); मॉडल = मॉडेलबिल्डर.सेंटबॉक्स (50 एफ, 50 एफ, 50 एफ, नई सामग्री (रंग सामग्री। कंटेंट डीफ्यूस (रंग। ग्रीन)), उपयोग। रचना | उपयोग। सामान्य; उदाहरण = नया मॉडल इंसान (मॉडल); } @ ओवरराइड सार्वजनिक शून्य रेंडर () {cam2.update (); Gdx.gl.glViewport (0, 0, Gdx.graphics.getWidth), Gdx.graphics.getHeight ()); // Gdx.gl.glClear (GL20.GL_COLOR_BUFFER_BIT | जीएल 20.GL_DEPTH_BUFFER_BIT); // modelBatch.begin (सांचा); // मॉडलबैच.रेडर (उदाहरण); // modelBatch.end (); // // Gdx.gl.glViewport (Gdx.graphics.getWidth) / 2, 0, Gdx.graphics.getWidth () / 2, // Gdx.graphics.getHeight () / 2); // मॉडलबैच.बेजिन (सीएम 2); modelBatch.render (उदाहरण); modelBatch.end (); } @ ओवरराइड पब्लिक रिक्त विसर्ज करें () {modelBatch.dispose (); model.dispose (); } @ ओवरराइड पब्लिक वाइड रीसाइज (इंट चौड़ाई, इंटी ऊंचाई) {} @ ओवरराइड पब्लिक विराम पॉज़ () {} @ ओवरराइड पब्लिक वाइड रीज़ाईम () {}}
< div class = "post-text" itemprop = "text">
एक orthographic कैमरा (सौभाग्य से) z को अनदेखा नहीं करता है बस ने कहा, यह मूल रूप से एक अलग प्रक्षेपण है, अर्थात् इसकी एक पिरामिड के बजाय बॉक्स फस्टम है। गहराई से अधिक विवरण के लिए इस लेख की जांच करें:
ध्यान दें कि डिफ़ॉल्ट रूप से मूल्य = 1f के पास कैमरा और दूर का मूल्य = 100f आपके मामले में, आप वास्तव में अपने मॉडल से 100 एफ इकाइयों को दूर कर रहे हैं। दूसरे शब्दों में: मॉडल दूर के विमान पर है विभिन्न कारकों पर निर्भर करता है कि आप मॉडल को आंशिक रूप से देखेंगे, यदि बिल्कुल भी।
अब, जब आप ऐसा करते हैं:
नया ऑर्थोग्राफिक कैमेरा (Gdx.graphics.getWidth) , Gdx.graphics.getHeight ());
आप मूल रूप से कह रहे हैं कि आपकी दुनिया में एक यूनिट को एक पिक्सेल में मैप करना चाहिए। इस प्रकार आपके मॉडल (50x50x50 बॉक्स) लगभग 50 पिक्सल चौड़ी / ऊंचाई होगी यदि आप एक विश्व इकाई को उदाहरण के लिए मानचित्रित करना चाहते हैं दो पिक्सल, आप कर सकते हैं:
नया ऑर्थोग्राफिक कैमरा (Gdx.graphics.getWidth) / 2f, Gdx.graphics.getHeight () / 2f);
और इतना आगे। यदि आप इस पर बेहतर नियंत्रण चाहते हैं, तो आप व्यूपोर्ट का उपयोग करने पर विचार कर सकते हैं, देखें:
इसके अलावा अपने कैमरे को अपने मॉडल के अंदर न रखें और, जैसा कि डैनियल ने कहा है, न कि
lookAt आपका
स्थिति , इससे आपका
दिशा शून्य हो जाएगा।
Comments
Post a Comment