【发布时间】:2015-07-10 13:02:36
【问题描述】:
所以这就是我想要做的。我想用我的鼠标实现翻译,以便我正在翻译的对象将跟随我的鼠标移动,即如果我的鼠标光标移动一定数量的像素 X,我希望对象移动完全相同的数量 X。
到目前为止,对于旋转,我一直在使用 glm 来实现轨迹球,因此我得到了一个旋转矩阵。
我正在使用 openGL 和 SDL,因此获取鼠标坐标并不困难。 我可以在鼠标运动事件期间使用当前鼠标坐标创建一个大小为 3 的向量:
while (SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_MOUSEMOTION:
glm::vec3 vecTranslation(event.motion.x, event.motion.y, 0);
glm::mat4 translationMatrix ;
glm::translate(translationMatrix, vecTranslation) ;
}
}
这样我就有了一个翻译矩阵,但这不会让我得到一个完全按照鼠标光标最终所做的翻译。
有人对此有一些见解吗?
此外,要获得我的最终投影矩阵以便调用glMulMatrix(),我会这样做:
glm::matrixCompMult(translationMatrix,rotationMatrix);
但是当我这样做时,平移和旋转都不起作用。如果我只是简单地返回旋转矩阵并直接将它与glMulMatrix() 一起使用,我的轨迹球会按预期运行,但如果我使用上面的代码,我只能看到我拥有的立方体的一个面,并且它会不断改变它的比例,但是从不旋转也不平移。
至于我用于绘图的代码: //假设完成了一些代码以了解是否应该进行翻译以及应该进行哪些翻译 matrixProjection = translationMatrix * mMatNow * scaleMatrix ; glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glClear(GL_COLOR_BUFFER_BIT); glMultMatrixf(矩阵投影); // 缩放变换 glScalef(0.5,0.5,0.5); 绘制立方体();
glFlush();
SDL_GL_SwapBuffers();
我得到的矩阵类似于: 第一:
1 ; 0; 0; 0; 0; 1; 0; 0; 0; 0; 1; 0; 0; 0; 0; 1;
然后翻译后:
1 ; 0; 0; 0; 0; 1; 0; 0; 0; 0; 1; -25 ; 0; 0; 0; 1;
显然翻译确实发生了,但是我在我的绘图上得到了这个奇怪的结果:
原图:
【问题讨论】:
-
如果您拒绝投票并投票结束,请说明原因。没有反馈就无法改进问题