home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.5 Applications 2004 May / SGI IRIX 6.5 Applications 2004 May.iso / dist / java3d.idb / usr / demos / java / j3d / programs / examples / AppearanceMixed / Tetrahedron.java.z / Tetrahedron.java
Encoding:
Java Source  |  2003-08-08  |  3.6 KB  |  103 lines

  1. /*
  2.  *    @(#)Tetrahedron.java 1.12 02/04/01 15:03:15
  3.  *
  4.  * Copyright (c) 1996-2002 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  *
  10.  * - Redistributions of source code must retain the above copyright
  11.  *   notice, this list of conditions and the following disclaimer.
  12.  *
  13.  * - Redistribution in binary form must reproduce the above copyright
  14.  *   notice, this list of conditions and the following disclaimer in
  15.  *   the documentation and/or other materials provided with the
  16.  *   distribution.
  17.  *
  18.  * Neither the name of Sun Microsystems, Inc. or the names of
  19.  * contributors may be used to endorse or promote products derived
  20.  * from this software without specific prior written permission.
  21.  *
  22.  * This software is provided "AS IS," without a warranty of any
  23.  * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
  24.  * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
  25.  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
  26.  * EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
  27.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  28.  * DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN
  29.  * OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
  30.  * FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
  31.  * PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
  32.  * LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE,
  33.  * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  34.  *
  35.  * You acknowledge that Software is not designed,licensed or intended
  36.  * for use in the design, construction, operation or maintenance of
  37.  * any nuclear facility.
  38.  */
  39.  
  40. import javax.media.j3d.*;
  41. import javax.vecmath.*;
  42.  
  43. public class Tetrahedron extends Shape3D {
  44.     private static final float sqrt3 = (float) Math.sqrt(3.0);
  45.     private static final float sqrt3_3 = sqrt3 / 3.0f;
  46.     private static final float sqrt24_3 = (float) Math.sqrt(24.0) / 3.0f;
  47.  
  48.     private static final float ycenter = 0.5f * sqrt24_3;
  49.     private static final float zcenter = -sqrt3_3;
  50.  
  51.     private static final Point3f p1 = new Point3f(-1.0f, -ycenter, -zcenter);
  52.     private static final Point3f p2 = new Point3f(1.0f, -ycenter, -zcenter);
  53.     private static final Point3f p3 =
  54.     new Point3f(0.0f, -ycenter, -sqrt3 - zcenter);
  55.     private static final Point3f p4 =
  56.     new Point3f(0.0f, sqrt24_3 - ycenter, 0.0f);
  57.  
  58.     private static final Point3f[] verts = {
  59.     p1, p2, p4,    // front face
  60.     p1, p4, p3,    // left, back face
  61.     p2, p3, p4,    // right, back face
  62.     p1, p3, p2,    // bottom face
  63.     };
  64.  
  65.     private TexCoord2f texCoord[] = {
  66.         new TexCoord2f(0.0f, 0.0f),
  67.     new TexCoord2f(1.0f, 0.0f),
  68.         new TexCoord2f(0.5f, sqrt3 / 2.0f),
  69.     };
  70.  
  71.     public Tetrahedron() {
  72.     int i;
  73.  
  74.     TriangleArray tetra = new TriangleArray(12, TriangleArray.COORDINATES |
  75.         TriangleArray.NORMALS | TriangleArray.TEXTURE_COORDINATE_2);
  76.  
  77.     tetra.setCoordinates(0, verts);
  78.         for (i = 0; i < 12; i++) {
  79.             tetra.setTextureCoordinate(0, i, texCoord[i%3]);
  80.         }
  81.  
  82.     int face;
  83.     Vector3f normal = new Vector3f();
  84.     Vector3f v1 = new Vector3f();
  85.     Vector3f v2 = new Vector3f();
  86.     Point3f [] pts = new Point3f[3];
  87.     for (i = 0; i < 3; i++) pts[i] = new Point3f();
  88.  
  89.     for (face = 0; face < 4; face++) {
  90.         tetra.getCoordinates(face*3, pts);
  91.         v1.sub(pts[1], pts[0]);
  92.         v2.sub(pts[2], pts[0]);
  93.         normal.cross(v1, v2);
  94.         normal.normalize();
  95.         for (i = 0; i < 3; i++) {
  96.         tetra.setNormal((face * 3 + i), normal);
  97.         }
  98.     }
  99.     this.setGeometry(tetra);
  100.     this.setAppearance(new Appearance());
  101.     }
  102. }
  103.