2010-11-10 43 views
6

मैं वर्तमान में उस स्थान पर घन खींचने के लिए ओपनजीएल (एसडीएल के साथ) का उपयोग करने की कोशिश कर रहा हूं जहां मैंने स्क्रीन पर क्लिक किया था और फिर इसे प्राप्त किया स्क्रीन पर स्थिति पर इंगित करें जहां मैं दायाँ क्लिक करता हूं।3 डी में एक्स, वाई और जेड अक्ष के लिए कोण ढूंढना - ओपनजीएल/सी ++

मैं gluUnproject का उपयोग करके अपने वांछित स्थान पर सफलतापूर्वक एक घन खींच सकता हूं - मतलब मैं पहले से ही जानता हूं कि मेरे घन स्थित है।

हालांकि मुझे नहीं पता कि मेरे घन बिंदु को नए स्थान पर बनाने के लिए आवश्यक सभी कोणों की गणना कैसे करें।

बेशक मैं अभी भी अपने दाएं क्लिक के निर्देशांक खोजने के लिए gluUnproject का उपयोग कर रहा हूं, लेकिन मुझे केवल 2 डी ग्राफिक्स का उपयोग करने से ज़ेड अक्ष के चारों ओर घुमाने के बारे में पता है।

उदाहरण के लिए, यदि मैं ज़ेड अक्ष के चारों ओर एक ट्रैक्टर घुमाने के लिए चाहता था (बेशक, यह एक शीर्ष नीचे दृश्य होगा जहां ज़ेड अक्ष अभी भी "स्क्रीन से गुज़र रही है) 2 डी में मैं कुछ ऐसा करूंगा :

angle = atan2(mouseCoordsY - quadPosY, mouseCoordsX - quadPosX); 
glRotatef(angle*180/PI, 0, 0, 1); 

मेरा सवाल है, मैं इसे 3 डी में करने के बारे में कैसे जाऊं?

  • क्या मुझे ऊपर दिए गए प्रत्येक अक्ष के कोणों की गणना करने की आवश्यकता है?
  • यदि ऐसा है तो मैं एक्स और वाई अक्ष के चारों ओर घूर्णन के कोण को कैसे गणना करूं?
  • यदि नहीं, तो मेरे वांछित परिणाम प्राप्त करने के लिए मुझे किस विधि का उपयोग करना चाहिए?

किसी भी मदद की बहुत सराहना की जाती है।

+0

साथ glRotate कॉल कर सकते हैं के रूप में रोटेशन धुरी की गणना z निर्देशांक क्लिक प्रत्येक माउस के प्रतिनिधित्व वाले आप कैसे निर्दिष्ट करूँ? यदि आप बस 0 पर सेट करते हैं, तो 2 डी ज्यामिति पर्याप्त है, और मुझे लगता है कि यह आपका इरादा नहीं है। –

+0

एक 3 डी स्पेस में एक क्लिक को रे को परिभाषित करना चाहिए, बिंदु नहीं। मुझे यह जानकर उत्सुकता है कि आपने पहली जगह घन को कैसे ढूंढ लिया। – tafa

+0

@ मार्सेलो कैंटोस: अगर मुझे आपका प्रश्न गलत समझा गया है तो मुझे माफ़ कर दो, लेकिन मैं इसके लिए नया हूं और इसलिए मुझे लगता है कि मुझे पता है कि आप क्या पूछ रहे हैं, मुझे अभी भी गलत विचार हो सकता है।असल में यदि मेरा घन (100, 200, 300) पर है और मैं (400, 500, 600) पर क्लिक करता हूं, तो मुझे कोणों को खोजने की ज़रूरत है, जिन पर मुझे घन घुमाए जाने की आवश्यकता है, ताकि दूसरे सेट को देखने के लिए समन्वय करता है। –

उत्तर

9

अपने घन एक = पर है, तो (x0, Y0, z0)

अपने घन वर्तमान में बी में = (x1, y1, z1) देख

और है, तो आप इसे देखने के लिए चाहते हैं, तो सी = (x2, y2, z2) तो;

देना बी को

v1 = बी ए से वेक्टर हो V1 - एक

और सी

वी 2 = सेल्सियस के लिए एक से एक हो v2 - एक

पहले सामान्य उन्हें।

v1 = v1/|v1| 
v2 = v2/|v2| 

तो रोटेशन कोण और

angle = acos(v1*v2) //dot product 
axis = v1 X v2 //cross product 

आप

glRotate(angle, axis[0], axis[1], axis[2]) 
+0

इस उत्तर के लिए आपको बहुत बहुत धन्यवाद! मैं पिछले कुछ दिनों से इस मामले पर ट्यूटोरियल और अन्य संसाधनों की खोज कर रहा हूं, और डॉट उत्पादों आदि के साथ परीक्षण की गई सामग्री, लेकिन चूंकि मेरे पास केवल 2 डी से आया है, इसलिए यह मुझे बहुत समझ में नहीं आया था। लेकिन आपके जवाब ने मुझे स्पष्ट रूप से जानने के लिए आवश्यक सब कुछ समझाया है, कि कोई भी संसाधन I Google पर पाया जा सकता है। धन्यवाद। –

+0

@ सॉर नींबू, यह सुनकर खुशी हुई। – tafa

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