1

我写了一个pick函数,从opengl画布中挑选场景对象。

glRenderMode(GL_SELECT)
glMatrixMode(GL_PROJECTION)
glPushMatrix()
glLoadIdentity()
gluPickMatrix(self.last_point_2D_.x(),viewport[3]-self.last_point_2D_.y(),10,10,viewport)
glMultMatrixf(projection)

glInitNames()
glPushName(0)

//i scene objects rendering goes here, drawn in modelview
glLoadName(i)

glMatrixMode(GL_PROJECTION)
glPopMatrix()
glMatrixMode(GL_MODELVIEW)
glFlush()
glPopName()

如果我在绘制对象时不使用 glTanslate 或 glRotated ,这将非常有效,即,我可以在绘制时选择线条,

glVertex3f(1,1,1)
glVertex3f(2,2,2)

但当我这样做时,

glTranslate(1,1,1)
glVertex3f(0,0,0)
glVertex3f(1,1,1) 

我错过了什么?

4

1 回答 1

2

应用平移时,您仍处于投影矩阵模式,从而弄乱了拾取矩阵。在转换场景之前切换到模型视图。

于 2011-04-19T06:49:13.783 回答