所以这就是我想要做的。我想用我的鼠标实现翻译,以便我翻译的对象将跟随我的鼠标移动,即如果我的鼠标光标移动了一定数量的像素,XI希望对象移动该确切相同的X.用glm翻译对象,使其跟随鼠标指针
到目前为止,我一直在使用glm来实现arcball,并且我得到了一个旋转矩阵。
我正在使用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()
,则我的arcball的行为与预期相同,但是如果使用上面的代码,我只能看到我拥有的立方体的一个面,并且它不断改变其比例但不会旋转也不翻译。
至于我使用的绘图代码: //假设一些代码做是为了知道,应该做些什么翻译 matrixProjection = translationMatrix * mMatNow * scaleMatrix; glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glClear(GL_COLOR_BUFFER_BIT); glMultMatrixf(matrixProjection); //比例转换 glScalef(0.5,0.5,0.5); drawCube();
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;
因此很明显,翻译确实发生,但我得到我的画这个怪异的结果:
原画:
之前,如果你反对投票和投票关闭请说明原因。如果没有反馈,问题无法改进 – LBes