मैं आर्कबॉल/ट्रैकबॉल रोटेशन को लागू करने की कोशिश कर रहा हूं लेकिन मुझे रोटेशन के केंद्र में समस्या है। मैं चाहता हूं कि केंद्र मेरी स्क्रीन का केंद्र हो, चाहे कोई फर्क नहीं पड़ता।ओपनएल में quaternions का उपयोग कर स्क्रीन के केंद्र के बारे में कैसे घूमना है?
मुझे बताएं कि मैंने अब तक क्या किया है।
मैं एक quaterion (रोटेशन धुरी: vector_start एक्स vector_end, कोण: vector_start * vector_end) बना लिया है
कि चार का समुदाय मैं आदेश glMultMatrixf (मैट्रिक्स) के साथ इसका इस्तेमाल करने में एक रोटेशन मैट्रिक्स बना लिया है से और वांछित रोटेशन प्राप्त करें।
समस्या यह है कि मेरा मॉडल आर्कबॉल घूमता हुआ लगता है क्योंकि यह हमेशा अपने स्थानीय मूल के आसपास घूमता है। मैं इसे अपनी स्क्रीन के केंद्र के चारों ओर घुमा सकता हूं इससे कोई फर्क नहीं पड़ता कि इसकी स्थानीय उत्पत्ति कहां स्थित है?
मुझे लगता है कि उस समस्या का समाधान स्क्रीन के केंद्र में पूरे रोटेशन अक्ष का अनुवाद करना और फिर घूर्णन लागू करना है, लेकिन क्या यह संभव है? क्या मुझे यहां कुछ याद आती है?
हाँ, लेकिन जब मैं glmultMatrixf() लागू करता हूं तो opengl मॉडल को स्थानीय मूल के आस-पास घूमता नहीं है? तो यदि मैं मूल घुमाने के लिए अनुवाद करता हूं (glRotatef() लेकिन glMultMatrix() का उपयोग करके नहीं) और फिर फिर से अनुवाद करें तो मेरा मॉडल फिर से इसकी उत्पत्ति के चारों ओर घुमाएगा और ऐसा नहीं होगा कि इसकी उत्पत्ति उदाहरण के लिए स्क्रीन का केंद्र था। –
glTranslatef() के साथ अनुवाद करें, फिर अपने रोटेशन मैट्रिक्स glMultMatrix() के साथ गुणा करें, और glTranslatef() का उपयोग करके फिर से अनुवाद करें। यह glmultMatrix() को कॉल करने के विरोध में है। यह काम नहीं करता है? – catchmeifyoutry
नहीं, यह काम नहीं करता है। यह क्या करता है कि यह glMultMatrixf द्वारा लागू रोटेशन मैट्रिक्स से बताए गए मॉडल के रूप में मॉडल को घुमाता है लेकिन इसकी स्थानीय उत्पत्ति के आसपास होता है। मैंने रोटेशन क्वाटरनियन को यूलर कोणों में बदलने की कोशिश की है और फिर glRotatef (Yaw, 0., 0., 1।) लागू करें; glRotatef (Pich, 0., 1., 0।); glRotatef (रोल, 1., 0., 0।); glmultMatrixf() को सीधे लागू करने के बजाय, लेकिन फिर जब रोटेशन स्क्रीन के केंद्र के बारे में था, तो उसके पास आर्केबॉल रोटेशन के साथ कुछ लेना देना नहीं है! –