最新消息:南山南 北秋悲

opengl中的世界坐标与屏幕坐标的相互转换

图形 darksea 875浏览 0评论

在做三维模型编辑软件的时候,经常需要在窗口中拾取一个模型,一般都要通过比较点与包围盒坐标来判断是否拾取到一个模型。但是opengl世界坐标与屏幕坐标的坐标系是不一样的,从原始的opengl坐标通往屏幕的过程是相当漫长的,下图提供了这个过程的流程。

1

 

 

1、opengl世界坐标到屏幕坐标的转换 

2、屏幕坐标到opengl世界坐标的转换

3、注意事项

在使用这种方法进行拾取模型的时候得不到正确的结果,很可能的一点是局部存在模型视图矩阵变换,然而这个局部变换没有被下面这个函数捕获。

例如我在渲染这个三角形的时有这样一个过程:

渲染的时候存在一个glPushMatrix();glPopMatrix()局部变换,这个局部变换就没有没模型视图矩阵捕获,因此在将opengl世界坐标转化为屏幕坐标的时候,如果存在这样的局部变换,需要增加这一转化步骤再进行向世界坐标的转化。

4、结果

判断一个点是否落在物体包围盒内有两种方法进行比较:将opengl世界坐标转化为屏幕坐标比较;将屏幕坐标转化为opengl世界坐标比较;两种方法原理一样。写了一个程序进行验证,点击判断坐标是否落在物体包围盒内,在则显示物体包围盒。结果:

1

转载请注明:小菜C不是菜 » opengl中的世界坐标与屏幕坐标的相互转换

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址