topical media & game development

talk show tell print

student-ar-org-papervision3d-core-culling-DefaultTriangleCuller.ax

student-ar-org-papervision3d-core-culling-DefaultTriangleCuller.ax [swf] [flash] flex


  package org.papervision3d.core.culling {
          import org.papervision3d.core.geom.renderables.Triangle3D;
          import org.papervision3d.core.geom.renderables.Vertex3DInstance;
          import org.papervision3d.core.proto.MaterialObject3D;
          import org.papervision3d.objects.DisplayObject3D;        
  
          public class @ax-student-ar-org-papervision3d-core-culling-DefaultTriangleCuller implements ITriangleCuller
          {
                  
                  protected static var x0:Number;
                  protected static var y0:Number;
                  protected static var x1:Number;
                  protected static var y1:Number;
                  protected static var x2:Number;
                  protected static var y2:Number;
                  
                  public function @ax-student-ar-org-papervision3d-core-culling-DefaultTriangleCuller()
                  {
                          
                  }
          
                  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;
                  }
                  
          }
  }


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.