topical media & game development

talk show tell print

student-ar-org-papervision3d-core-geom-renderables-Triangle3D.ax

student-ar-org-papervision3d-core-geom-renderables-Triangle3D.ax [swf] [flash] flex


  /*
   *  PAPER    ON   ERVIS  NPAPER ISION  PE  IS ON  PERVI IO  APER  SI  PA
   *  AP  VI  ONPA  RV  IO PA     SI  PA ER  SI NP PE     ON AP  VI ION AP
   *  PERVI  ON  PE VISIO  APER   IONPA  RV  IO PA  RVIS  NP PE  IS ONPAPE
   *  ER     NPAPER IS     PE     ON  PE  ISIO  AP     IO PA ER  SI NP PER
   *  RV     PA  RV SI     ERVISI NP  ER   IO   PE VISIO  AP  VISI  PA  RV3D
   *  ______________________________________________________________________
   *  papervision3d.org • blog.papervision3d.org • osflash.org/papervision3d
   */
  
  /*
   * Copyright 2006 (c) Carlos Ulloa Matesanz, noventaynueve.com.
   *
   * Permission is hereby granted, free of charge, to any person
   * obtaining a copy of this software and associated documentation
   * files (the "Software"), to deal in the Software without
   * restriction, including without limitation the rights to use,
   * copy, modify, merge, publish, distribute, sublicense, and/or sell
   * copies of the Software, and to permit persons to whom the
   * Software is furnished to do so, subject to the following
   * conditions:
   *
   * The above copyright notice and this permission notice shall be
   * included in all copies or substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
   * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
   * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
   * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
   * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
   * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
   * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
   * OTHER DEALINGS IN THE SOFTWARE.
   */
  
  // ______________________________________________________________________
  //                                                                 Face3D
  
  package org.papervision3d.core.geom.renderables {
          import org.papervision3d.core.math.Number3D;
          import org.papervision3d.core.math.NumberUV;
          import org.papervision3d.core.proto.*;
          import org.papervision3d.core.render.command.IRenderListItem;
          import org.papervision3d.core.render.command.RenderTriangle;
          import org.papervision3d.materials.BitmapMaterial;
          import org.papervision3d.materials.special.CompositeMaterial;
          import org.papervision3d.objects.DisplayObject3D;        
  
          
The Face3D class lets you render linear textured triangles. It also supports solid colour fill and hairline outlines.

  
          public class @ax-student-ar-org-papervision3d-core-geom-renderables-Triangle3D extends AbstractRenderable implements IRenderable
          {
                  
An array of Vertex3D objects for the three vertices of the triangle.

  
                  public var vertices :Array;
          
                  
A material id TODO

  
                  public var _materialName :String;
          
                  
A MaterialObject3D object that contains the material properties of the back of a single sided triangle.

  
          //        public var materialBack :MaterialObject3D;
                  
                  public var uv0:NumberUV;
                  public var uv1:NumberUV;
                  public var uv2:NumberUV;
                  
                  public var _uvArray:Array;
                  // ______________________________________________________________________
          
                  
[read-only] The average depth (z coordinate) of the transformed triangle. Also known as the distance from the camera. Used internally for z-sorting.

  
                  public var screenZ :Number;
          
                  
[read-only] A Boolean value that indicates that the face is visible, i.e. it's vertices are in front of the camera.

  
                  public var visible :Boolean;        
          
                  
[read-only] Unique id of this instance.

  
                  public var id :Number;
                  
                  
Used to store references to the vertices.

  
                  public var v0:Vertex3D;
                  public var v1:Vertex3D;
                  public var v2:Vertex3D;
                  
                  
The face normal

  
                  public var faceNormal:Number3D;
                  
                  
The transformed Face3DInstance

  
                  //public var face3DInstance:@fileInstance;
                  
                  
The do3d instance this triangle belongs too.

  
                  //public var instance:DisplayObject3D;
                  
                  
stores the material for this face.

  
                  public var material:MaterialObject3D;
                                  
                  //To be docced
                  public var renderCommand:RenderTriangle;
                  
                  private static var _totalFaces:Number = 0;
                  
                  
The Face3D constructor lets you create linear textured or solid colour triangles. @param vertices An array of Vertex3D objects for the three vertices of the triangle. @param material A MaterialObject3D object that contains the material properties of the triangle. @param uv An array of {x,y} objects for the corresponding UV pixel coordinates of each triangle vertex.

  
                  public function @ax-student-ar-org-papervision3d-core-geom-renderables-Triangle3D(do3dInstance:DisplayObject3D, vertices:Array, material:MaterialObject3D=null, uv:Array=null )
                  {
                          this.instance = do3dInstance;
                          
                          
                          //Setup this instance
                          //face3DInstance = new @fileInstance(this, do3dInstance);
                          
                          faceNormal = new Number3D();
                          // Vertices
                          if(vertices && vertices.length == 3){
                                  this.vertices = vertices;
                                  v0 = vertices[0];
                                  v1 = vertices[1];
                                  v2 = vertices[2];
                                  createNormal();
                          }else{
                                  vertices = new Array();
                                  v0 = vertices[0] = new Vertex3D();
                                  v1 = vertices[1] = new Vertex3D();
                                  v2 = vertices[2] = new Vertex3D();
                          }
                          
                          // Material, if passed from a materials list.
                          this.material = material;
                          this.uv = uv;
                          this.id = _totalFaces++;
                          
                          this.renderCommand = new RenderTriangle(this);
                  }
                  
                  public function reset(object:DisplayObject3D, vertices:Array, material:MaterialObject3D, uv:Array):void{
                          
                                  this.instance = object;
                                  this.renderCommand.instance = object;
                                  this.renderCommand.renderer = material;
                  
                                  this.vertices = vertices;
                                  updateVertices();
                                  //createNormal();
          
                                  this.material = material;
                                  this.uv = uv;
                                  
                                  if(material is BitmapMaterial){
                                          
                                          BitmapMaterial(material).uvMatrices[this.renderCommand] = null;
                                          
                                  }
                                  
                                  if(material is CompositeMaterial){
                                          for each(var mat:MaterialObject3D in CompositeMaterial(material).materials){
                                                  
                                                  if(mat is BitmapMaterial){
                                                          
                                                          BitmapMaterial(mat).uvMatrices[this.renderCommand] = null;
                                                          
                                                  }
                                          }
                                  }
                                  
                                  
                  }
                  
                  public function createNormal():void
                  {
                          var vn0:Number3D = v0.getPosition();
                          var vn1:Number3D = v1.getPosition();
                          var vn2:Number3D = v2.getPosition();        
                          vn1.minusEq(vn0);
                          vn2.minusEq(vn0);
                          faceNormal = Number3D.cross(vn1,vn2,faceNormal);
                          faceNormal.normalize();
                  }
                  
                  override public function getRenderListItem():IRenderListItem
                  {
                          return renderCommand;
                  }
                  
                  public function updateVertices():void
                  {
                          v0 = vertices[0];
                          v1 = vertices[1];
                          v2 = vertices[2];
                  }
                  
                  
An array of {x,y} objects for the corresponding UV pixel coordinates of each triangle vertex.

  
                  public function set uv(uvs:Array):void
                  {
                          if(uvs && uvs.length == 3){
                                  
                                  uv0 = NumberUV(uvs[0]);
                                  uv1 = NumberUV(uvs[1]);
                                  uv2 = NumberUV(uvs[2]);
                          }
                          _uvArray = uvs;
                  }
                  
                  public function get uv():Array
                  {
                          return _uvArray;        
                  }
                  
                  
          }
  }


(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.