Python OpenGL中如何获取变换后点的当前世界坐标 可否使用pyrr实现
你完全可以使用pyrr完成和C++ glm逻辑完全一致的坐标变换计算,pyrr默认使用列主序存储矩阵,和glm的存储规则兼容,不需要额外转置处理。
针对你现有代码的补全方案如下:
1. 直接获取变换后的三维坐标(对应C++中把vec4结果转vec3的场景)
import pyrr somePoint = [x,y,z] translationMatrix= pyrr.matrix44.create_from_translation(pyrr.Vector3([xTrans, yTrans, zTrans])) # 直接调用内置方法完成变换,内部会自动处理齐次坐标补1的逻辑 currentPointPosition = pyrr.matrix44.apply_to_vector(translationMatrix, somePoint)
2. 获取和C++完全一致的vec4齐次坐标结果
如果你需要和你C++代码中glm::vec4类型完全对齐的结果,可以手动构造齐次坐标做乘法:
import pyrr somePoint = [x,y,z] translationMatrix= pyrr.matrix44.create_from_translation(pyrr.Vector3([xTrans, yTrans, zTrans])) # 构造齐次坐标,w分量设为1,和glm::vec4(somePoint,1)逻辑一致 point_homogeneous = pyrr.Vector4([*somePoint, 1.0]) # 矩阵乘法,用@运算符或者pyrr.multiply方法都可以 currentPointPosition = translationMatrix @ point_homogeneous
两种方式的计算结果和你C++ glm的计算结果完全一致,可根据后续使用场景选择即可。
内容的提问来源于stack exchange,提问作者CoolGuy
相关产品推荐
相关产品推荐

