我正在研究我的第一个真正的 OpenGL 项目。它是一个 3x3x3 魔方。这是我到目前为止的简单截图的链接(我的魔方)
旋转立方体是通过按住鼠标右键拖动鼠标来完成的。这使用来自 NeHe 教程(NeHe Arcball)的轨迹球示例
我有一个类 singleCubes,它通过 6 个实际四边形表示一个立方体,存储在一个显示列表中,可以在它的绘制方法中使用。类 ComplexCube 有一个 3x3x3 singleCubes 数组,在与完整的魔方交互时用作接口。
现在我想根据鼠标左键向下拖动来旋转每个特定的面。我使用pick来获取用户单击的单个立方体的对应侧的ID。这也有效。所以我点击一个立方体的一侧,根据拖动的方向,我设置了受影响的立方体的旋转和偏移因子。(我也想实现你实际上看到脸部旋转而不是仅仅改变颜色)
现在我的问题是,当我用鼠标右键拖动以任何方向旋转魔方时,它会变成上下颠倒。因此,当我单击一侧并想要将面向右旋转时,它会朝错误的方向前进,因为我无法跟踪立方体是否倒置或其他。由于使用了轨迹球旋转,我没有可以用来确定这一点的 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();
设置:C++ 和 Microsoft Visual Studio 2008、GLEW、freeglut