opengl - ओपनग्लॉग अनुवाद एक रोटेशन से पहले और बाद में



coordinate-transformation opengl-compat (1)

निम्नलिखित कोड ( http://www.glprogramming.com/red/chapter03.html से लिया गया है) रोबोट के हाथ और कंधे को कैसे खींचना है और कुछ उपयोगकर्ता इनपुट द्वारा उन्हें कैसे घुमाएँ:

glPushMatrix();
    glTranslatef (-1.0, 0.0, 0.0);
    glRotatef ((GLfloat) shoulder, 0.0, 0.0, 1.0);
    glTranslatef (1.0, 0.0, 0.0);
    glPushMatrix();
        glScalef (2.0, 0.4, 1.0);
        glutWireCube (1.0);
    glPopMatrix();

    glTranslatef (1.0, 0.0, 0.0);
    glRotatef ((GLfloat) elbow, 0.0, 0.0, 1.0);
    glTranslatef (1.0, 0.0, 0.0);
    glPushMatrix();
        glScalef (2.0, 0.4, 1.0);
        glutWireCube (1.0);
    glPopMatrix();
glPopMatrix();  

glutSwapBuffers();

मैं कंधे को खींचने और इसे घुमाने के लिए कोड को समझता हूं। कंधे के लिए: पहले हम इसे एक्स-अक्ष के साथ एक इकाई में अनुवाद करते हैं ताकि जब हम रोटेशन करते हैं, तो यह मूल के साथ एक धुरी के रूप में घूमता है। फिर हम इसे वापस अनुवाद करते हैं (एक्स-अक्ष पर एक इकाई को अग्रेषित करते हैं)। यह परिवर्तन उस घन पर लागू किया जाएगा जिसे स्केल किया गया है।

अब, मेरा सवाल कोहनी के लिए है। रोटेशन से पहले और बाद में एक्स-एक्सिस पर कोई अनुवाद आगे क्यों है?


अब, मेरा सवाल कोहनी के लिए है। रोटेशन से पहले और बाद में एक्स-एक्सिस पर कोई अनुवाद आगे क्यों है?

यदि आप कल्पना करना चाहते हैं कि मैट्रिक्स ऑपरेशन मॉडल को कैसे बदलते हैं, तो आपको रिवर्स ऑर्डर में संचालन को "पढ़ने" की आवश्यकता है। यह है, क्योंकि मैट्रिक्स स्टैक का वर्तमान मैट्रिक्स मैट्रिक्स द्वारा गुणा किया जाता है जो नए ऑपरेशन द्वारा निर्दिष्ट किया जाता है और मैट्रिस कॉलम-प्रमुख ऑर्डर (फिक्स्ड फ़ंक्शन पाइपलाइन) में संग्रहीत होते हैं।

कोहनी के क्यूब से शुरू करें

glutWireCube(1.0f);

कोहनी को स्केल करें

glPushMatrix();
glScalef(2.0f, 0.4f, 1.0f);
glutWireCube(1.0f);
glPopMatrix();

इसे दाईं ओर ले जाएं

glTranslatef(1.0f, 0.0f, 0.0f);

कोहनी को घुमाएं

glRotatef(45.0f, 0.0f, 0.0f, 1.0f);

घुमाए हुए कोहनी को दाईं ओर ले जाएं

glTranslatef(1.0f, 0.0f, 0.0f);

कंधे क्यूब ड्रा करें

glutWireCube(1.0f);

कंधे की हड्डी

glPushMatrix();
glScalef(2.0f, 0.4f, 1.0f);
glutWireCube(1.0f);
glPopMatrix();

हाथ (कोहनी और कंधे) को दाईं ओर ले जाएँ

glTranslatef(1.0f, 0.0f, 0.0f);

हाथ को घुमाएं

glRotatef(-15.0f, 0.0f, 0.0f, 1.0f);

हाथ को उसकी अंतिम स्थिति में ले जाएं (बाईं ओर)

glTranslatef(-1.0f, 0.0f, 0.0f);