(एक टन दूसरों जो मैं खोजने के लिए परेशान नहीं कर रहा हूँ herehere, here, here, here, और, और) googling के दो घंटे के बाद, मैंने सोचा था कि मैंने अंततः 3 डी निर्देशांक को 2 डी निर्देशांक में बदलने का सिद्धांत सीखा था। लेकिन यह काम नहीं कर रहा है। विचार जहाज के 3 डी निर्देशांक को उस जहाज को नियंत्रित करने वाले प्लेयर के उपयोगकर्ता नाम को प्रस्तुत करने के लिए स्क्रीन पर 2 डी निर्देशांकों का अनुवाद करना है।gluProject 3 डी में कनवर्ट निर्देशांक 2 डी निर्देशांक में नहीं बदलता 2 डी वाई समन्वय सही ढंग से
हालांकि, पाठ गलत स्थान में प्रदर्शित हो रहा है:
पाठ "टेस्ट || 2DXCoordinate || 2DZCoordinate" है।
यहां मेरा getScreenCoords()
है - जो 3 डी निर्देशांक को 2 डी में परिवर्तित करता है।
public static int[] getScreenCoords(double x, double y, double z) {
FloatBuffer screenCoords = BufferUtils.createFloatBuffer(4);
IntBuffer viewport = BufferUtils.createIntBuffer(16);
FloatBuffer modelView = BufferUtils.createFloatBuffer(16);
FloatBuffer projection = BufferUtils.createFloatBuffer(16);
GL11.glGetFloat(GL11.GL_MODELVIEW_MATRIX, modelView);
GL11.glGetFloat(GL11.GL_PROJECTION_MATRIX, projection);
GL11.glGetInteger(GL11.GL_VIEWPORT, viewport);
boolean result = GLU.gluProject((float) x, (float) y, (float) z, modelView, projection, viewport, screenCoords);
if (result) {
return new int[] { (int) screenCoords.get(0), (int) screenCoords.get(1) };
}
return null;
}
स्क्रीनकॉर्ड्स.get (0) एक पूर्ण एक्स समन्वय लौट रहा है। हालांकि, शिपकॉर्ड्स.जेट (1) जहाज से कितनी दूर है इस पर निर्भर करता है कि यह उच्च या निम्न हो रहा है। डिबगिंग के कई घंटे के बाद, मैं इसे इस लाइन गलत किया जा रहा है को संकुचित होता है:
GLU.gluProject((float) x, (float) y, (float) z, modelView, projection, viewport, screenCoords);
हालांकि, मुझे नहीं पता कि क्या गलत है। जहाज का एक्स समन्वय ठीक है .... वाई क्यों नहीं?
बीडीएल के उत्तर के अनुसार, मैं gluProject() को "गलत मैट्रिक्स" की आपूर्ति कर रहा हूं। लेकिन मुझे नहीं लगता कि यह कैसे संभव है, क्योंकि मैं अपने जहाज को प्रस्तुत करने के बाद विधि को सही कहता हूं (जो स्पष्ट रूप से जहाज में जो कुछ भी मैट्रिक्स खींचता है)।
मैं बस गलत क्या नहीं समझ सकता।
नोट: बीडीएल का जवाब पूरी तरह से पर्याप्त है सिवाय इसके कि यह स्पष्ट नहीं करता है कि वाई निर्देशांक गलत क्यों हैं।
नोट: यह प्रश्न बहुत लंबा और अधिक अस्पष्ट होता था। मैंने डिबगिंग के घंटों के बाद उपरोक्त मेरा संकुचित प्रश्न पोस्ट किया है।
1. आप अपने कोड में कहीं अपने GL_MODELVIEW-मैट्रिक्स की स्थापना कर रहे हैं? मेरे लिए ऐसा लगता है कि यह एक पहचान मैट्रिक्स है। 2. क्या ऑर्थोग्राफिकप्रोजेक्शनमैट्रिक्स में आपके जहाज को प्रस्तुत करने के लिए उपयोग किए जा रहे परिप्रेक्ष्य प्रक्षेपण शामिल हैं? – BDL
@BDL ऑर्थोग्राफिकप्रोजेक्शनमैट्रिक्स में प्रक्षेपण शामिल है जिसका उपयोग मैं पाठ प्रस्तुत करने के लिए कर रहा हूं। जहाज नहीं – Joehot200
आपके द्वारा पोस्ट किए गए दूसरे कोडब्लॉक में आप अपने प्रक्षेपण मैट्रिक्स में ऑर्थोग्राफिक प्रोजेक्शनमैट्रिक्स लोड कर रहे हैं। इस मैट्रिक्स की सामग्री क्या है? और मेरे लिए ऐसा लगता है कि आपने कभी भी मॉडलव्यू मैट्रिक्स सेट नहीं किया है। जहाज को खींचते समय क्या आप कभी gltranslatef/glRotatef को कॉल नहीं करते? – BDL