程序画了两个平面,实现了对两个平面的拾取,程序的视角可以用上下左右键来控制
问题1:
    在视角进行变化的时候,如果所画的两个平面在当前视角下有重合的时候,往往响应的是代码中先绘制的平面,哪怕是这个平面在当前视角下看不到。就是说我先画square1,再画square2,这两个平面在当前视角下是有重合的,假如说是square2挡在了square1的前面,这时在用鼠标拾取的时候,却返回说是你拾取到了square1,而此时square1却是被square2挡住的,根本看不到!square1被拾取的原因仅仅是因为在代码中先绘制了它!!这个问题该怎么解决?问题2: 
    还有一个问题,就是在拾取时,我先调用了glLoadname(A),绘制物体A,后来我继续画物体B。我的本意是不会B进行任何操作,但是当我点击B物体的时候,也会提示说是你选中了A物体,如何去掉这种影响?

解决方案 »

  1.   


    chiwa737你的论断很是精辟啊!可问题是怎么解决呢?嘿嘿
      

  2.   

    不要在GL_SELECT模式下执行绘制B的语句就行了。GL_SELECT模式下只绘你允许选择的东西!
      

  3.   

    第一个问题,所有拾取结果都会保存其Z-BUFFER值的(就是绘制点在空间中坐标距屏幕的距离)。你的同一个A对应绘制两个平面,就会有两个被拾取记录,他们是相邻存放的。你可以读取该屏幕位置处两个平面的Z-BUFFER值比较。好像是值小的那个离屏幕更近一些。这个值在你设定选择模式时指定的那个数组里面。你看看NEHE的程序实例或其他资料,需要知道那个数组的内容顺序(除了Z-BUFFER,还有其他信息被保存了)。
      

  4.   


    谢谢你的提示!现在问题已经解决了,就是参照Nehe的课程做的,非常感谢!
      

  5.   

    GL_SELECT模式下绘制的东西会有选择记录,但不会有实际显示效果。就是说原来的代码如果不在SELECT模式下而在正常模式下执行的话会在显示屏幕上看到效果。SELECT模式下,有这种“被看到”情况发生时就会有被选取记录。不在SELECT模式下执行的绘制语句就不会触发选取记录。屏幕上看到的图形是执行非SELECT模式时进行第二次绘制的结果,这次绘制内容可以与SELECT下的绘制完全无关,只是为了在屏幕上给出显示效果罢了(仅仅就针对选取的实现而言)。不知道你的具体情况是什么,但肯定要注意两种模式下图形绘制位置的匹配!