glm设置对象位置

时间:2018-03-15 22:10:31

标签: c++ opengl glm-math coordinate-transformation

我想在OpenGL中使用glm库设置对象(不是相机)的 x,y,z坐标。 我希望glm::translate方法可以应对这种情况,但它会生成矩阵,实际上会修改我查看对象的方式。

这就是调用方法的方式:

glm::translate(glm::vec3(x, y, z));

它返回矩阵:

| 1  0  0  0 |
| 0  1  0  0 |
| 0  0  1  0 |
| x  y  z  1 |

但我希望:

| 1  0  0  x |
| 0  1  0  y |
| 0  0  1  z |
| 0  0  0  1 |

我做了像glm::transpose(glm::translate(glm::vec3(x, y, z)))这样的快速修复,但它似乎是一个糟糕的代码。

有没有办法生成一个可以创建平行平移的矩阵,它可以设置对象的x,y,z坐标,不用转置矩阵本身?

See this picture

1 个答案:

答案 0 :(得分:2)

GLM创建列主要订单矩阵,因为GLSL创建列主要订单矩阵。

如果你想获得一个主要的行矩阵,那么你要么glm::transpose矩阵,要么你必须使用矩阵初始化器:

glm::mat4 m = glm::mat4(
    1.0f, 0.0f, 0.0f, x,
    0.0f, 1.0f, 0.0f, y,
    0.0f, 0.0f, 1.0f, z,
    0.0f, 0.0f, 0.0f, 1.0 );


OpenGL Mathematics (GLM)

  

OpenGL数学(GLM)是一个基于OpenGL着色语言(GLSL)规范的图形软件的标题C ++数学库。


The OpenGL Shading Language 4.6, 5.4.2 Vector and Matrix Constructors, page 101

  

要通过指定向量或标量来初始化矩阵,组件将以列主要顺序分配给矩阵元素。

mat4(float, float, float, float,  // first column
     float, float, float, float,  // second column
     float, float, float, float,  // third column
     float, float, float, float); // fourth column


另请参阅OpenGL Mathematics (GLM); 2. Vector and Matrix Constructors