2011-04-19 36 views
1

我写了一个拾取函数,从opengl画布中选取场景对象。glTranslate/glRotated之后的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完美的作品,我可以选择当我画线,

,但不是我做的,

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

我错过了什么?

回答

2

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

+0

非常感谢!干杯。 – chaitu 2011-04-19 08:10:10