【发布时间】:2019-06-26 01:21:20
【问题描述】:
我有一个想要沿圆形路径移动的宇宙飞船模型。我希望船头始终指向它前进的方向。
这是我现在必须将其移动一圈的代码:
glm::mat4 m = glm::mat4(1.0f);
//time
long value_ms = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::time_point_cast<std::chrono::milliseconds>(std::chrono::
high_resolution_clock::now())
.time_since_epoch())
.count();
//translate
m = glm::translate(m, translate);
m = glm::translate(m, glm::vec3(-50, 0, -20));
m = glm::scale(m, glm::vec3(0.025f, 0.025f, 0.025f));
m = glm::translate(m, glm::vec3(1800, 0, 3000));
float speed = .002;
float x = 100 * cos(value_ms * speed); // + 1800;
float y = 0;
float z = 100 * sin(value_ms * speed); // + 3000;
m = glm::translate(m, glm::vec3(x, y, z));
如何移动它以使鼻子始终指向前方?我尝试将旋转轴设置为 x 或 y 或 z 进行 glm::rotate,但我无法使其正常工作。
【问题讨论】:
-
提示:您的圆形路径在 x-z 平面内。 => 旋转轴应该是y(不是x or y or z)。 ;-)
-
并非所有转换都是可交换的。翻译是(即多个翻译的任何顺序都会导致相同的最终转换)。旋转和缩放都不是这样。