GLM 视图矩阵导致模型矩阵无效
GLM view matrix causing model matrix to have no effect
我正在尝试让一个物体始终面对相机。我查找了一种方法来执行此操作,但问题是当我将这部分放入视图矩阵时,模型矩阵不会影响任何东西。我怎样才能让它使用模型矩阵进行翻译?代码:
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;
您的 "rotation" 矩阵没有任何意义:
rotationMatrix=glm::transpose(glm::lookAt(glm::vec3(xpos,0.0f,zpos),playerPosition,glm::vec3(0.0f,1.0f,0.0f)));
这将不会产生旋转矩阵(除非xpos
和zpos
恰好为零)。 lookAt
将创建一个可以分解为 r * t(-pos)
的变换矩阵(无论您用什么 pos
调用它)。构建此矩阵的 转置 将导致平移列被转置到第四行,这将完全破坏最终的 w
坐标。
我正在尝试让一个物体始终面对相机。我查找了一种方法来执行此操作,但问题是当我将这部分放入视图矩阵时,模型矩阵不会影响任何东西。我怎样才能让它使用模型矩阵进行翻译?代码:
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;
您的 "rotation" 矩阵没有任何意义:
rotationMatrix=glm::transpose(glm::lookAt(glm::vec3(xpos,0.0f,zpos),playerPosition,glm::vec3(0.0f,1.0f,0.0f)));
这将不会产生旋转矩阵(除非xpos
和zpos
恰好为零)。 lookAt
将创建一个可以分解为 r * t(-pos)
的变换矩阵(无论您用什么 pos
调用它)。构建此矩阵的 转置 将导致平移列被转置到第四行,这将完全破坏最终的 w
坐标。