OpenGL选择模式中的问题

  ---------作者 熊斌

    OpenGL中的交互功能中最重要的一个是拾取(或者叫选择),但是我们经常会碰到开启了选择模式,但是确在屏幕上选不到物体,或者是点屏幕上任何地方都有物体被选中的情况....

     这是为什么呢?

   看看使用选择模式的过程是怎么样的:

   1.在绘图函数中给图元命名

   2.在鼠标响应中调用你的选择处理函数

   3. 在处理函数中设置选择缓冲区,

   4.###### 最重要的地方 #########

    1)  调用矩阵操作函数,切换到投影矩阵模式,然后将其压栈,并置为单位矩阵

          glMatrixMode(GL_PROJECTION);
          glPushMatrix();
         glLoadIdentity();

   2) 生成你的拾取矩阵

        glGetIntegerv(GL_VIEWPORT, viewport);
        gluPickMatrix(point.x, viewport[3] - point.y, 2,2, viewport); 

      要注意上面的函数的操作对象是投影矩阵, 所以调用它以后必须紧跟着下面的函数 设置与渲染模式下相同的透视投影矩阵,中间千万不要再干扰投影矩阵了,否则你就永远别想得到正确的选取了

   3) 设置与渲染模式下相同的透视投影矩阵

     gluPerspective(m_dFovy, (double)viewport[2]/(double)viewport[3],NEARPLANE, FARPLANE);

    到此位置要进行的投影矩阵的准备工作就完成了

5. 切换渲染模式 到SELECT模式

    glRenderMode(GL_SELECT);

6.渲染并搜集点击

    RenderScene();

    hits = glRenderMode(GL_RENDER);

 

  根据上面的过程可以看出,要正确的使用选择模式,关键在于设置正确的投影矩阵,  gluPickMatrix ,gluPerspective 两个函数所设置的投影矩阵的值不能被破坏,否则你就无法得到正确的结果了.

  一般情况下,如果出现选择异常,则需要检查投影和模型视图矩阵的超作,比如PushMatrix后有没有PopMatrix, 是不是

对这些矩阵进行了不正确的改动.

   以上为本人实践经验,如果有错,欢迎指正.

   帮助俺点俺博客中左边的图图咯........ 

   不要看了就跑(太自私了吧)......

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值