【问题标题】:glm set object positionglm 设置对象位置
【发布时间】:2018-08-24 21:22:30
【问题描述】:

我想使用 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 坐标,而不转置矩阵本身?

【问题讨论】:

  • 我认为您打印或使用矩阵不正确。
  • 我认为使用这样的功能mat4 m; m = glm::translate(m, glm::vec3(x , y, z));

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 2012-06-08
    • 1970-01-01
    • 2017-09-03
    • 2013-07-06
    相关资源
    最近更新 更多