![]() |
苹果 (2009-06-09 22:21:24) |
我用的笨法,不知道能不能帮您解决这个问题 判断Triangle3D的三个顶点是否均不可见,为真则不可见,为假则可见 |
![]() |
yyy (2009-06-10 08:49:27) |
谢谢您的回答。 不是笨方法,我也是这个思路。 但是Triangle3D的顶点Vertex3D也没有找到直接判断是否可见的属性或者方法,难道要用Vertex3D的坐标X,Y,Z与Camera3D的相关属性来计算? 那也。。。。。。。。。。。。。 |
![]() |
苹果 (2009-06-10 08:54:46) |
就是这样做的,没问题 |
![]() |
yyy (2009-06-10 09:11:41) |
用Vertex3D的坐标X,Y,Z与Camera3D的相关属性来计算吗? 能不能请教一下怎么判断?谢谢 |
![]() |
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; } } } |
![]() |
苹果 (2009-06-11 08:58:54) |
学习了 |
|
|