2014-02-18 4 views
0

Я хочу переместить матрицу в соответствии с ее собственным пространством (направлением), а не мировым пространством.glm :: перевод с местным пространством

В частности, я хочу переместить матрицу вида/«камеру».

glm::mat4x4 view = glm::lookAt(glm::vec3(1.1f, 1.3f, 1.2f), 
            glm::vec3(0.0f, 0.0f, 0.0f), 
            glm::vec3(0.0f, 1.0f, 0.0f)); 

view=glm::rotate(view, r, glm::vec3(0,1,0)); 
view=glm::translate(view, glm::vec3(x,y,z)); 

Перевод равно пренебрегая это вращение, но я хотел бы перевести в соответствии с которой камера сталкивается, например, когда камера обращена к оси x, и я переводю z, она должна перевести по оси х мира. Как это может быть сделано?

ответ

0

Если вы хотите управлять позицией камеры, вы должны сохранить положение камеры и только поместить ее в поле зрения, когда вам нужно.

glm::mat4 camera = glm::inverse(glm::lookAt(
           glm::vec3(1.1f, 1.3f, 1.2f), 
           glm::vec3(0.0f, 0.0f, 0.0f), 
           glm::vec3(0.0f, 1.0f, 0.0f))); 
camera = glm::rotate(camera, r, glm::vec3(0,1,0)); 
camera = glm::translate(camera, glm::vec3(x,y,z)); 
glm::mat4 view = glm::inverse(camera); 

Это также возможно, что делает предварительный multiplcation вашего зрения матрицы, что вы хотите, но я неопределенный, так как я стараюсь, чтобы избежать необходимости иметь дело с предварительно против после умножения, как будто моя жизнь зависела от него ,

glm::mat4 view = glm::lookAt(
           glm::vec3(1.1f, 1.3f, 1.2f), 
           glm::vec3(0.0f, 0.0f, 0.0f), 
           glm::vec3(0.0f, 1.0f, 0.0f))); 
view = glm::rotate(glm::mat4(), r, glm::vec3(0,1,0)) * view; 
view = glm::translate(glm::mat4(), glm::vec3(x,y,z)) * view; 

 Смежные вопросы

  • Нет связанных вопросов^_^