GLM视图矩阵导致模型矩阵无效

时间:2016-04-16 05:37:06

标签: c++ opengl matrix glm-math

我试图让一个物体始终面对相机。我查找了一种方法来做到这一点,但问题是当我将这部分放入视图矩阵时,没有任何东西受到模型矩阵的影响。如何使用模型矩阵进行翻译?代码:

GLuint transformLocation=glGetUniformLocation(textureShaders,"transform");
glm::mat4 transform;
glm::mat4 model;
glm::vec3 playerPosition=user.getPosition();

model=glm::translate(model,glm::vec3(xpos,0.0f,zpos));

glm::mat4 view;
     view=glm::lookAt(cam.getPositionVector(),cam.getPositionVector()+cam.getFrontVector(),cam.getUpVector());
glm::mat4 rotationMatrix=glm::transpose(glm::lookAt(glm::vec3(xpos,0.0f,zpos),playerPosition,glm::vec3(0.0f,1.0f,0.0f)));
view*=rotationMatrix;
glm::mat4 projection;
projection=glm::perspective(45.0f,(float)900/(float)600,0.1f,100.0f);

transform=projection*view*model;

1 个答案:

答案 0 :(得分:1)

你的“轮换”矩阵没有意义:

rotationMatrix=glm::transpose(glm::lookAt(glm::vec3(xpos,0.0f,zpos),playerPosition,glm::vec3(0.0f,1.0f,0.0f)));

这将导致旋转矩阵(除非xposzpos恰好为零)。 lookAt将创建一个转换矩阵,可以将其分解为r * t(-pos)(对于您调用它的pos)。构建此矩阵的转置将导致转换列转换到第四行,这将完全阻止最终的w坐标。