glTranslate / glRotated 之后的 openGL 拾取

发布于 2024-11-02 08:10:28 字数 705 浏览 5 评论 0原文

我编写了一个 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) 

我错过了什么?

I wrote a pick function, to pick scene objects from the opengl canvas.

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()

This works perfect if i do not use glTanslate or glRotated in drawing the object
i.e, i can pick line when i draw,

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

but not when i do,

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

What am i missing?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

凉风有信 2024-11-09 08:10:29

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

You're still in projection matrix mode, when applying the translation, thus messing up the picking matrix. Switch to modelview before transforming the scene.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文