
// TexturedPlane.java
// Andrew Davison, April 2005, ad@fivedots.coe.psu.ac.th

/* Vytvoří jediný čterec pomocí pole 4 vrcholů, na kterých bude 
   namapována textura.

   Uzlová komponenta je mnohem jednodušší než u ostatních verzí
   této třídy (např. v aplikaci FPShooter3D), protože
   textura se aplikuje bez míchání s materiálem.
*/

import javax.vecmath.*;
import javax.media.j3d.*;


public class TexturedPlane extends Shape3D 
{
  private static final int NUM_VERTS = 4;

  public TexturedPlane(Point3d p1, Point3d p2, Point3d p3, Point3d p4,
							                Texture2D tex) 
  { createGeometry(p1, p2, p3, p4);

    Appearance app = new Appearance();
    app.setTexture(tex);      // nastav texturu
    setAppearance(app);
  } // konec metody: TexturedPlane()


  private void createGeometry(Point3d p1, Point3d p2, Point3d p3, Point3d p4)
  {
    QuadArray plane = new QuadArray(NUM_VERTS, 
					GeometryArray.COORDINATES |
					GeometryArray.TEXTURE_COORDINATE_2 );

    // proti směru hodinových ručiček od sodního levého rohu
    plane.setCoordinate(0, p1);
    plane.setCoordinate(1, p2);
    plane.setCoordinate(2, p3);
    plane.setCoordinate(3, p4);

    TexCoord2f q = new TexCoord2f();
    q.set(0.0f, 0.0f);    
    plane.setTextureCoordinate(0, 0, q);
    q.set(1.0f, 0.0f);   
    plane.setTextureCoordinate(0, 1, q);
    q.set(1.0f, 1.0f);    
    plane.setTextureCoordinate(0, 2, q);
    q.set(0.0f, 1.0f);   
    plane.setTextureCoordinate(0, 3, q);  

    setGeometry(plane);
  }  // konec metody: createGeometry()

} // konec třídy: TexturedPlane class

