【发布时间】:2011-10-27 11:26:35
【问题描述】:
我正在开发我的第一个真正的 OpenGL 项目。它是一个 3x3x3 魔方。这是我到目前为止的简单截图的链接(my rubiks cube)
旋转立方体是通过按住鼠标右键拖动鼠标来完成的。这可以使用 NeHe Tutorials(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
【问题讨论】:
-
OpenGL 不是场景图,您将“对象放入其中”。它只是画东西。记账是你的工作。
-
是的,你是对的。也许是我的错,我没有完全理解 NeHe 的轨迹球示例,因此无法保存立方体的旋转状态。
标签: c++ opengl rubiks-cube