我想做一个类似于ProE,Catia的三维软件,在MFC的SDI中打开并显示一个CAD模型。现在我能够画出图形,也可以通过鼠标单击选择面片。
方法是判断全部面片gluProject到二维面后,鼠标点所落在的三角面片中,哪个zbuffer最小的方法。但是我想要通过鼠标框选面片时,再用这个方法就要对所框选的每一个像素做一次类似于点选的操作,效率非常的低。我看Opengl本身可以自动消隐掉背后的面,有没有办法加一个判断,如果选中的面是被消隐掉的,就跳过呢?或者各位大牛,有没有什么办法能后效率高一些实现这个功能呢?PS:我所存的是三角面片。
方法是判断全部面片gluProject到二维面后,鼠标点所落在的三角面片中,哪个zbuffer最小的方法。但是我想要通过鼠标框选面片时,再用这个方法就要对所框选的每一个像素做一次类似于点选的操作,效率非常的低。我看Opengl本身可以自动消隐掉背后的面,有没有办法加一个判断,如果选中的面是被消隐掉的,就跳过呢?或者各位大牛,有没有什么办法能后效率高一些实现这个功能呢?PS:我所存的是三角面片。
当然,前提是你的数据结构里面,要方便求面的法向量!这个在半边结构为基础的CAD中经常用!
我现在的算法是按照图形相交的算法, 判断相交部分哪个面在上的.
具体方法是:
1.根据鼠标框选的大小,申请一个含有两个变量的结构体类型的二维数组(其实是一维),数组每个单元的第一个变量的初始值为10000(深度),第二个为-1(面序号);
2.依次判断面片,并与鼠标框相交,以此计算每个相交范围内点的深度,如果该点的深度小于存储值,则深度改变,并且将该面需要存入.
3.把所有面序号提取出来,可能有重复的,做一次检查,排除之.经过测试, 2G内存,E5200 CPU下打开1000000个面片左右大小的文件, 框选的平均耗时为1-2秒.基本满意, 感谢楼上的解答.