2014-04-28 38 views
0

我创建了一个包含不同颜色和材质的多个管道(阀门,人孔)的3D场景。现在我想用鼠标选取它们并获取它们的属性(颜色,材质)。我试图使用glupushmatrix,这是OpenGL API提供的方法,当视点几乎在管道前面时它就工作了。但是当从不同的视角看时,比如从(0,1,1)到(0, 0,0),它不能这样做。更重要的是,在glupushmatrix之前我没有找到函数glulookat的投影设置。我也尝试使用基于光线追踪的数学方法,但是我发现很难用蛮力对每个管道进行相交测试。从任意角度拾取3d

+2

首先,'gluPushMatrix'不是OpenGL的规范的一部分。其次,ray * casting *(与追踪不同)很容易,即使使用了您所建议的“强力”方法,并且具有合理数量的形状以及一些广泛扑灭(AABB应该这样做)应该“对每个人都足够”。这就是说,显示用于基于颜色的选取的代码,因为现在我们知道的是它不起作用。 –

回答

0

OpenGL提供了一种特殊的渲染模式(GL_SELECT)来帮助实现拾取。

要实现它,你必须:

  • Name您可选择元
  • 添加渲染通道与GL_SELECT模式。

编辑的链接:

按照this tutorial...

+0

感谢您的关注。事实上,我使用了相同的技术。我跟着[教程链接](http://www.lighthouse3d.com/opengl/picking/),当你正好在对象前面时它就工作了(就像雪人的例子)。但是,从其他角度来看,如鸟瞰,它失败了。我不知道这是这种方法的局限性还是我的程序存在问题。 – Leoxu

+0

@Leoxu:我在3D环境中使用了这种技术,效果很好。显示也许你的代码。绘图顺序是在选择模式下重写深度测试,如果我记得... –

+0

@Leoxu:你的tuto想念一个[''glutPickMatrix'](http://www.opengl.org/sdk/docs/man2/xhtml/gluPickMatrix.xml )例子。它是帮助您设置正确的采摘矩阵。 –