opengl 在3D中围绕选定对象旋转

iqih9akk  于 2023-08-04  发布在  其他
关注(0)|答案(1)|浏览(130)

我有3D场景,场景中存在多个对象。我想围绕场景中的选定对象旋转场景中的所有对象。我不希望选定对象改变其在屏幕上的位置,它应该只绕自己的轴旋转,所有其他对象应该只绕该轴旋转,就像Revit应用程序中发生的那样。我是通过旋转场景中所有的物体来实现的。下面是这个的伪代码。

glm::vec3 axis                 = glm::vec3{0.0f, 1.0f, 0.0f};
float     angle                = glm::half_pi<float>();
glm::quat rotation             = glm::angleAxis(angle, axis);
glm::vec3 rotation_point       = glm::vec3{1.0f, 2.0f, 3.0f};

// Precompute common transformation matrix
glm::mat4 translate            = glm::translate(glm::mat4{1.0f}, -rotation_point);
glm::mat4 untranslate          = glm::translate(glm::mat4{1.0f},  rotation_point);
glm::mat4 rotate_around_center = untranslate * glm::mat4_cast(rotation) * translate;

// For each node
world_from_node_after = rotate_around_center * world_from_node_before;

字符串
但是,对场景中的每个对象应用旋转矩阵似乎需要大量的计算,所以我想调整相机矩阵,而不是对每个对象应用旋转。我应该如何更改相机矩阵以达到所需的效果?

tv6aics1

tv6aics11#

我想明白了,我们可以在同一个轴上以相反的方向(实际旋转的负Angular )旋转相机,而不是围绕一个轴旋转每个对象,并且只改变它的视图矩阵,所以现在我们不必更新每个对象的模型矩阵。

相关问题