OpenGL rubiks立方体 - 用鼠标旋转面部

Van*_*ear 5 c++ opengl rubiks-cube

我正在开发我的第一个真正的OpenGL项目.这是一个3x3x3 Rubiks立方体.这是到目前为止我所拥有的简单屏幕截图的链接(我的rubiks立方体)

通过在按住鼠标右键的同时拖动鼠标来旋转立方体.这是使用NeHe Tutorials(NeHe Arcball)的弧形球的例子

我有类singleCubes,它通过6个实际四边形表示一个立方体,存储在可以在其绘制方法中使用的显示列表中.ComplexCube类具有3x3x3单个立方体的数组,并在与完整的rubiks立方体交互时用作接口.

现在我想根据mousedragging旋转每个特定的面部,用鼠标左键按下.我使用pick来获取用户点击的单个多维数据集的相应边的id.这也有效.所以我点击一个面上一个立方体的一侧,根据拖动的方向,我设置受影响的立方体的旋转和偏移系数.(我也想实现你实际上看到的是旋转面而不是仅仅改变颜色)

现在我的问题是,当我用鼠标右键拖动任意方向旋转rubiks立方体时,它会变得颠倒过来.因此,当我单击一侧并想要将面向右旋转时,它的方向是错误的,因为如果立方体是倒置的或者其他什么,我无法跟踪.由于使用了弧形旋转,我没有x或y旋转角度,我可以使用它来确定这一点.

问题1:当使用上面链接的弧形示例时,如果立方体是倒置,倾斜等以便转换鼠标拖动信息(当旋转一个面时),我如何跟踪或稍后获取信息?

// In render function
glPushMatrix();
{
    glMultMatrixf(Transform.M); // Rotation applied by arcball object
    complCube.draw();           // Draw all the cubes using display lists
}
glPopMatrix();
Run Code Online (Sandbox Code Playgroud)

安装程序:C++与Microsoft Visual Studio 2008,GLEW,freeglut

Mar*_*tin 0

像我们大多数人一样,您会遇到著名的万向锁问题。

请参阅:http ://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=208925

这个问题有非常详细的记录,因此我没有太多必要在这里详细介绍。我相信您会找到大量有关它的信息。

  • 我不明白这怎么能以**任何**方式回答他的问题。即使万向节锁**对他来说**是一个问题(考虑到他的陈述,这不是预先确定的),那么这可能更好是一个评论,因为目前它肯定**不是他的问题。 (2认同)