2012-01-09 12 views
5

मैं इस कोड की कोशिश की:डायरेक्टएक्स पर XYZ अक्षों में किसी ऑब्जेक्ट को घुमाने के लिए कैसे?

D3DXMatrixRotationX(&matRotate, rx); 
D3DXMatrixRotationY(&matRotate, ry); 
D3DXMatrixRotationZ(&matRotate, rz); 
d3ddev->SetTransform(D3DTS_WORLD, &matRotate); 

लेकिन ऐसा लगता है हमेशा केवल पिछले रोटेशन (Z अक्ष) को घुमाने के लिए।

मैं एक ही समय में सभी XYZ अक्षों के साथ किसी ऑब्जेक्ट को घुमाता हूं?

glRotatef(rx, 1, 0, 0); 
glRotatef(ry, 0, 1, 0); 
glRotatef(rz, 0, 0, 1); 


संपादित करें: ऐसा लगता है कि मैं इसे अपने आप से पता लगा:

D3DXMATRIX matRotateX; 
D3DXMATRIX matRotateY; 
D3DXMATRIX matRotateZ; 
D3DXMatrixRotationX(&matRotateX, rx); 
D3DXMatrixRotationY(&matRotateY, ry); 
D3DXMatrixRotationZ(&matRotateZ, rz); 
D3DXMATRIX matRotate = matRotateX*matRotateY*matRotateZ; 
d3ddev->SetTransform(D3DTS_WORLD, &matRotate); 

नहीं है, तो कृपया टिप्पणी इम ओपन रोटेशन के लिए डायरेक्ट बराबर खोजने की कोशिश । मैं 8 घंटे बीतने तक इसे उत्तर के रूप में पोस्ट नहीं कर सकता! (इसे करने के लिए +7 प्रतिष्ठा की आवश्यकता है)।

+0

मुझे डायरेक्टएक्स के बारे में पता नहीं है, लेकिन आपके पास गलत क्रम में गुणा हो सकता है। यदि आप जानते हैं कि आपका ऑर्डर सही है, तो इस टिप्पणी को अनदेखा करें, अन्यथा इसे जांचें। –

उत्तर

4

D3DXMatrixRotationX एक मैट्रिक्स को घुमाता नहीं है लेकिन एक मैट्रिक्स बनाता है जिसे कुछ घुमाने के लिए उपयोग किया जा सकता है।

तो यह आप सही बाद में हर कदम मैट्रिक्स इस्तेमाल कर सकते हैं और कुछ और बारी बारी से या आप D3DXMatrixRotationYawPitchRoll इस्तेमाल कर सकते हैं ताकि आप केवल एक एक बार बनाने की जरूरत ...

D3DXMatrixRotationYawPitchRoll(&matRotate, ry, rx, rz); 

संपादित करें: आपका संपादन भी काम करता है ...

+0

अच्छा खोज, कृपया अपने पैरामीटर को सही क्रम में संपादित करें: आरई, आरएक्स, आरजे – Rookie

+0

@ रूकी धन्यवाद, और यह तब होता है जब आप दोबारा जांच करना भूल जाते हैं ... अभी फिक्स्ड ... –