我希望使用OpenGL绘制一个基本的机械臂,使用原始形状,如圆柱体,立方体等。
在这一点上,我设法通过应用必要的变换来静态地绘制手臂。平移、旋转、缩放等。
我现在需要让它具有交互性。也就是说,当用户选择某个对象并四处移动时,附加到该对象的较小对象必须移动。
示例:-如果用户正在移动手臂,则手腕、手掌和手指必须移动,但不能移动肩膀。同样,如果选择手掌并围绕手腕旋转,则只有连接到该手掌的手指可以随手掌一起移动,而不是手臂或手腕。
我必须在代码中遵循哪种设计模式才能干净利落地实现这一点?
发布于 2011-10-15 10:08:41
您在这里所做的被称为转换层次结构,实际上在OpenGL-1.1编程指南中关于转换的章节中已经涵盖了( OpenGL的最新版本,即v3和后来的更大版本)中包含了矩阵操作的东西,所以您需要自己实现这一点,但原理保持不变。
看看这一章的末尾(我建议你读完整篇文章):
发布于 2011-10-14 20:11:58
我不是专家,但我认为您应该考虑在OpenGL之上使用工具包。也许是像OpenSceneGraph ( http://www.openscenegraph.org/projects/osg/wiki/About/Introduction )这样的东西
请看这里对它的介绍:http://www.artoolworks.com/support/library/An_Introduction_to_OpenSceneGraph_and_osgART
它解释说,您可以构建将被链接的“对象树”。
发布于 2011-10-14 20:31:13
我自己没有使用过它们,但我知道OpenGL会跟踪堆栈上的转换矩阵。
这似乎允许您推动一个变换矩阵来绘制父对象(例如,上臂),然后使用其组件的层次关系,顺序地推动和弹出手臂的每个子对象的变换矩阵。变换按顺序应用于当前堆栈上的每个矩阵,因此只需对每个父对象应用一次变换,然后相对于其位置绘制所有子对象。
请查看此页面以了解更多详细信息(我自己还没有读过!):
http://fly.cc.fer.hr/~unreal/theredbook/chapter03.html
这有帮助吗?它似乎适用于您所描述的简单情况。对于更复杂的应用程序,Pascal T.是正确的,您可能想要查看OpenGL之上的层。
https://stackoverflow.com/questions/7772839
复制相似问题