import java.awt.*;
import java.lang.Math;

public class Shape extends Transformed {
    public Vertex vertices_[] = null;
    public int []faces_[] = null;
    public Vector3D matteColor_ = new Vector3D(.95,.95,.95),
		glareColor_ = new Vector3D(.8,.8,.8);
	double shinyExp_ = 8;
    public Vertex transformed_[] = null; // unused here
        
    public Shape() {} // for subclasses that have to calculate for init()
    public Shape(int numvert, int [] facesizes) { 
        init(numvert,facesizes);
    }
    public Shape(int numvert, int nfaces, int facesize) {
        init(numvert,nfaces,facesize);
    }
    void init(int numvert, int [] facesizes) {
        initz(numvert,facesizes.length);
        for(int i = 0; i<facesizes.length; ++i)
            faces_[i] = new int[facesizes[i]];
    }
    void init(int numvert, int nfaces, int facesize) {
        initz(numvert,nfaces);
        for(int i = 0; i<nfaces; ++i)
            faces_[i] = new int[facesize];
    }
    private void initz(int numvert,int numfaces) {
        vertices_ = new Vertex[numvert];
        transformed_ = new Vertex[numvert];
        for(int i = 0; i<numvert; ++i)
            transformed_[i] = new Vertex();
        faces_ = new int[numfaces][];
    }
    // unused in raytracer
    Matrix3D inverse_ = new Matrix3D();
    public void transform(Matrix3D parent) {
        parent.inverse(inverse_);
        for(int i = 0; i<vertices_.length; ++i) {
            parent.transform(vertices_[i].pt,transformed_[i].pt);
            inverse_.transform /* L??!! */ (vertices_[i].v,transformed_[i].v);
			transformed_[i].v.normalize();
        }
    }
}
