【发布时间】:2023-03-29 12:19:01
【问题描述】:
我知道尽可能简单的方法是使用:
glTranslate(a,b,c);
glRotate(...);
glTranslate(-a,-b,-c);
但在这种情况下,我使用缓冲区来使事情更加清晰和快速,问题是我正在做同样的事情:
iMat4x4 tempModel;
iMat4x4 tempModel2;
tempModel = math::translate(tempModel, iVec3(0.5f * size.x, 0.5f * size.y, 0.0f));
model[3].z = model[3].w = 0;
model[3] = model[3] + tempModel[3];
model = math::rotate(model, rotation, iVec3(0.0f, 0.0f, 1.0f));
tempModel2 = math::translate(tempModel2, iVec3(-0.5f * size.x, -0.5f * size.y, 0.0f));
model[3].z = model[3].w = 0;
model[3] = model[3] + tempModel2[3];
但是,当我执行object->rotation = sin(Time::WorldTime) 之类的操作时,我得到的对象是从左上角旋转的。
另外,在旋转之前将对象移动到原点的目的应该是什么,无论我更改它,旋转矩阵都没有影响,并且矩阵的第 4 列不会以任何方式与旋转矩阵相乘, 只是放在原来的位置上...
【问题讨论】:
-
添加平移分量不相当于乘以对应的平移矩阵,后者是正确的方法。
-
@meowgoesthedog 我不明白。那么预期的操作应该是什么? (不影响物体当前位置)相乘再除?
标签: c++ opengl math 3d glm-math