2012-12-03 10 views
9

मैं एक glm :: ve4 (camera.trotation) को glm :: mat4 (camera.rotationMatrix) द्वारा बदलना चाहता हूं। मैं गुणा करने की कोशिश करता हूं यह मुझे एक त्रुटि देता है: त्रुटि: 'originalTarget * ((कैमरा *) में' ऑपरेटर * 'के लिए कोई मिलान नहीं) -> कैमरा :: रोटेशनमैट्रिक्स'। मुझे लगता है कि मैं एक vec3 * mat4 गुणा नहीं कर सकता। क्या जीएलएम कुछ बदलाव इसे बदलने के लिए करता है? परिवर्तन करने के लिए अन्य तरीका?मैं एक glm :: ve4 द्वारा एक glm :: vec3 को कैसे बदल सकता हूं :: mat4

कोड:

void Camera::Update(void) 
{ 
// Aplicamos la rotacion sobre el target 
glm::vec3 originalTarget = target; 
glm::vec3 rotatedTarget = originalTarget * rotationMatrix; 

// Aplicamos la rotacion sobre el Up 
glm::vec3 originalUp = up; 
glm::vec3 rotatedUp = originalUp * rotationMatrix; 

// Establecemos las matrices de vista y proyeccion 
view = lookAt(
position, //eye 
rotatedTarget, //direction 
rotatedUp //up 
); 
projection = perspective(
FOV, 
(float) getParent()->getEngine()->GetCurrentWidth()/getParent()->getEngine()->GetCurrentWidth() , 
near_plane, 
far_plane); 
} 

उत्तर

13

आप पहले परिवर्तित करना चाहते हैं अपने 4 तत्व एक 0 के साथ एक glm::vec4 में glm::vec3, और फिर उन्हें एक साथ गुणा।

glm::vec4 v(originalUp, 0); 
+5

मान लें कि "चौथा तत्व 1.0 के बराबर है", नहीं? ट्रांसफॉर्म का अनुवाद 0 –

+2

के साथ काम नहीं करेगा क्योंकि यह कैमरे के लिए अप वेक्टर है, इसलिए इसका अनुवाद करने की आवश्यकता नहीं है, इसलिए इस मामले में शून्य अधिक उपयुक्त है – Slicedpan

+0

क्षमा करें। कोड को अच्छी तरह से नहीं पढ़ा है –

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