flash 3d flash3d 研究所 pv3d 共享资源  | 经典范例  | 视频教程  | 友情链接  | 联系我们
登陆 | 注册  flash 3d 研究所
讨论区





最近更新:
● ck47阁下在讨论区里 发表新主题“新手问题...”(07:49:50)
● 无语瓶阁下在教程区里 回复“《超简易papervision3D基础 ...”(18:09:44)
● payday loan阁下在教程区里 回复“《pv3d, sandy, away3d...”(05:56:23)
浏览主题:问一下在PV3D里面怎么判断三角形的可见性?

问一下在PV3D里面怎么判断三角形的可见性?
yyy (2009-06-09 19:51:55)

问一下在PV3D里面怎么判断三角形的可见性?
override protected function onRenderTick(event:Event=null):void
{
var num:Number;
num = 0;
for each(var face:Triangle3D in sphere.geometry.faces)
{
if(face.visible)
{
num++;
}
}
....
}
这样统计一个球里面有多少三角形是可见的,可视得到三角形个数始终为0
face.visible这个属性好像全部都为false
问下哪位研究过?


flash 3d 研究所 苹果
(2009-06-09 22:21:24)
我用的笨法,不知道能不能帮您解决这个问题
判断Triangle3D的三个顶点是否均不可见,为真则不可见,为假则可见

flash 3d 研究所 yyy
(2009-06-10 08:49:27)
谢谢您的回答。
不是笨方法,我也是这个思路。
但是Triangle3D的顶点Vertex3D也没有找到直接判断是否可见的属性或者方法,难道要用Vertex3D的坐标X,Y,Z与Camera3D的相关属性来计算?
那也。。。。。。。。。。。。。

flash 3d 研究所 苹果
(2009-06-10 08:54:46)
就是这样做的,没问题

flash 3d 研究所 yyy
(2009-06-10 09:11:41)
用Vertex3D的坐标X,Y,Z与Camera3D的相关属性来计算吗?
能不能请教一下怎么判断?谢谢

flash 3d 研究所 DDM君
(2009-06-10 10:00:28)
这是比较复杂的culling技巧,不知道您具体想完成什么样的功能,如果只是提高效率的话大可不必,因为默认下本身就不会显示背面或摄像机以外的面
可以看看pv3d包-core-culling-DefaultTriangleCuller

raphal君的这段代码应该能有所启发
注:Vertex3DInstance是一个三维点的二维投影,其z为深度,而且有visibe值,visible值为是否投影后摄像机可见

public function testFace(face:Triangle3D, vertex0:Vertex3DInstance, vertex1:Vertex3DInstance, vertex2:Vertex3DInstance):Boolean
           {
                 //Material checks & backface culling
                 if(vertex0.visible && vertex1.visible && vertex2.visible){
                       
                       var material:MaterialObject3D = face.material ? face.material : face.instance.material;
                       if(material.invisible){
                             return false;
                       };
                       x0 = vertex0.x;
                       y0 = vertex0.y;
                       x1 = vertex1.x;
                       y1 = vertex1.y;
                       x2 = vertex2.x;
                       y2 = vertex2.y;
                       
                       if( material.oneSide ){
                             if( material.opposite ){
                                   if( ( x2 - x0 ) * ( y1 - y0 ) - ( y2 - y0 ) * ( x1 - x0 ) > 0 )
                                   {
                                         return false;
                                   }
                             }else{
                                   if( ( x2 - x0 ) * ( y1 - y0 ) - ( y2 - y0 ) * ( x1 - x0 ) < 0 )
                                   {
                                         return false;
                                   }
                             }
                       }
                       return true;
                 }
                 return false;
           }
           
     }
}

flash 3d 研究所 苹果
(2009-06-11 08:58:54)
学习了

评论人:
邮   箱: (填入邮箱,博客地址均可)

内   容: (广告和垃圾内容可能会被删除,望理解)
链接地址

验证码:(为防止机器人骚扰,请麻烦输入验证码^_^)
  

(目前需登陆方可发表)


不想添加了