GLM:将 vec3 乘以 3x3 转换矩阵会产生奇怪的结果
GLM: Multiplying vec3 by a 3x3 translation matrix gives weird results
我有一个通过实验性 glm::translate(mat3,vec2)
函数构建的 glm::mat3
。但是,使用此矩阵修改 vec3 会产生古怪的结果。这是一个简短的程序演示:
#define GLM_ENABLE_EXPERIMENTAL
#include <glm/glm.hpp>
#include <glm/gtx/matrix_transform_2d.hpp>
#include <iostream>
std::ostream& operator<< (std::ostream& o, const glm::vec3& vec){
return o << '(' << vec.x << ',' << vec.y << ',' << vec.z << ")\n";
}
int main(){
glm::mat3 translate = glm::translate(glm::mat3(1.), glm::vec2(-1.,-1.));
std::cout << glm::vec3(10.,10.,1.); //prints (10,10,1)
std::cout << glm::vec3(10.,10.,1.) * translate; //prints (10,10,-19)
}
我的矩阵有什么问题导致它修改 Z 坐标而不是平移它?
您的操作顺序错误;你想要translate * glm::vec3(10, 10, 1)
。
我有一个通过实验性 glm::translate(mat3,vec2)
函数构建的 glm::mat3
。但是,使用此矩阵修改 vec3 会产生古怪的结果。这是一个简短的程序演示:
#define GLM_ENABLE_EXPERIMENTAL
#include <glm/glm.hpp>
#include <glm/gtx/matrix_transform_2d.hpp>
#include <iostream>
std::ostream& operator<< (std::ostream& o, const glm::vec3& vec){
return o << '(' << vec.x << ',' << vec.y << ',' << vec.z << ")\n";
}
int main(){
glm::mat3 translate = glm::translate(glm::mat3(1.), glm::vec2(-1.,-1.));
std::cout << glm::vec3(10.,10.,1.); //prints (10,10,1)
std::cout << glm::vec3(10.,10.,1.) * translate; //prints (10,10,-19)
}
我的矩阵有什么问题导致它修改 Z 坐标而不是平移它?
您的操作顺序错误;你想要translate * glm::vec3(10, 10, 1)
。