在OpenGL中绘制多个相关对象

时间:2011-10-14 19:51:44

标签: c++ opengl

我希望使用原始形状(如圆柱体,立方体等)使用OpenGL绘制基本机器人手臂。

此时,我设法通过应用必要的转换静态地绘制手臂即。翻译,旋转,缩放等。

我现在需要让它互动。也就是说,当用户选择某个对象并移动它时,附着在其上的较小对象必须移动。

示例: - 如果用户正在移动手臂,则手腕,手掌和手指必须移动而不是肩部。同样,如果选择手掌并围绕手腕旋转,则只有连接到手掌的手指可以与手掌一起移动,而不是手臂或手腕。

我必须在代码中遵循什么样的设计模式才能干净利落地实现这一目标?

3 个答案:

答案 0 :(得分:1)

我不是专家,但我认为你应该考虑在OpenGL之上使用工具包。也许像OpenSceneGraph(http://www.openscenegraph.org/projects/osg/wiki/About/Introduction

在这里查看介绍:http://www.artoolworks.com/support/library/An_Introduction_to_OpenSceneGraph_and_osgART

它解释了你可以构建将被链接的“对象树”。

答案 1 :(得分:1)

我自己没有和他们合作,但我知道OpenGL跟踪堆栈中的转换矩阵。

这似乎允许您按下一个变换矩阵来绘制父对象(比如上臂),然后使用其组件的层次关系依次推送和弹出手臂的每个子对象的变换矩阵。转换按顺序应用于当前堆栈中的每个矩阵,因此您只需对每个父对象应用一次转换,然后相对于其位置绘制所有子项。

查看此页面了解更多详情(我自己没有看过!):

http://fly.cc.fer.hr/~unreal/theredbook/chapter03.html

这有帮助吗?它似乎适用于您所描述的简单案例。对于更复杂的应用程序,Pascal T.是正确的,您可能希望在OpenGL之上查看图层。

答案 2 :(得分:1)

你在这里所做的事情被称为变换层次,实际上是由OpenGL-1.1编程指南中的变换章节所涵盖的(OpenGL的最新版本,即v3及以后的bigley剥离了矩阵操作的东西,所以你需要自己实现这个,但原则仍然是相同的。)

看看本章的结尾(我建议你阅读整篇文章):

http://fly.cc.fer.hr/~unreal/theredbook/chapter03.html