2013-08-07 5 views
7

का अनुवाद नहीं करता है मैंने glm (VS2010 में) का उपयोग शुरू करते समय कुछ बहुत ही सरल त्रुटि पार कर ली है। मैं इस छोटे से कोड मिल गया है:ग्लम अनुवाद मैट्रिक्स वेक्टर

glm::mat4 translate = glm::translate(glm::mat4(1.f), glm::vec3(2.f, 0.f, 0.f)); 
glm::vec4 vector(1.f,1.f,1.f,0.f); 
glm::vec4 transformedVector = translate * vector; 

transformedVector का परिणाम अपने मूल मूल्य (1.f, 1.f, 1.f, 0.f) के समान है। मुझे नहीं पता कि मैं यहाँ क्या खो रहा हूं। मैंने रोटेशन मैट्रिक्स की कोशिश की है और यह ठीक काम कर रहा है, बिंदु सही ढंग से बदल गया है।

glm::mat4 rotate = glm::rotate(glm::mat4(1.f), 90.f, glm::vec3(0.f, 0.f, 1.f)); 
glm::vec4 vector(1.f, 1.f, 1.f, 0.f); 
glm::vec4 transformedVector = rotate * vector; 

ठीक है, मुझे समस्या मिली है। मैं एक वेरिएक्ट का अनुवाद नहीं करना चाहता हूं, इस मामले में मुझे डब्ल्यू वैल्यू को 1

उत्तर

19

प्रोजेक्टिव निर्देशांक के बारे में भूल रहे हैं। तो

glm::vec4 vector 

के अंतिम घटक 1. होना चाहिए तो सुधार बस इस कर रही है:

glm::mat4 translate = glm::translate(glm::mat4(1.f), glm::vec3(2.f, 0.f, 0.f)); 
glm::vec4 vector(1.f,1.f,1.f,1.f); 
glm::vec4 transformedVector = translate * vector; 

यह, जिस तरह से प्रक्षेपीय काम का समन्वय करता है की वजह से है अनिवार्य रूप से (vec4) प्रक्षेपीय निर्देशांक से प्राप्त करने के लिए सामान्य समन्वय (vec3) के लिए आप डब्ल्यू घटक द्वारा विभाजित। (यदि आप शून्य हैं तो आप नहीं कर सकते हैं।)

कारण यह घूर्णन के लिए काम करता है लेकिन अनुवाद नहीं है क्योंकि प्रोजेक्टिव स्पेस रोटेशन सामान्य स्थान की तरह "समान" हैं, लेकिन अनुवाद अलग हैं।

मैंने अभी देखा है कि आपने अपनी त्रुटि का काम किया है, लेकिन मैंने सोचा कि एक स्पष्टीकरण मदद कर सकता है।

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