package glmodel; /** * The Face class describes one triangle, quad or polygon in the model. * For each point in the face, this class holds references to a vertex, * texture coord, and normal. A "reference" is an index into the vertex, * texture coord, or normal arrays. *

* The int arrays will hold one element for each point in the * face, ie. a triangle face will have int[3] for each, a quad face * will have int[4]. */ class Face { int[] vertexIDs; int[] textureIDs; int[] normalIDs; int materialID; // index into materials array Face(int[] vertIDs, int[] txtrIDs, int[] normIDs) { vertexIDs = new int[vertIDs.length]; textureIDs = new int[vertIDs.length]; normalIDs = new int[vertIDs.length]; if (vertIDs != null) System.arraycopy(vertIDs, 0, vertexIDs, 0, vertIDs.length); if (txtrIDs != null) System.arraycopy(txtrIDs, 0, textureIDs, 0, txtrIDs.length); if (normIDs != null) System.arraycopy(normIDs, 0, normalIDs, 0, normIDs.length); } /** * return how many triangles this Face contains (if Face is a triangle then * return 1, if a quad then return 2, if a triangle fan then return N-2). * * @return number of triangles in this face */ public int numTriangles() { if (vertexIDs == null || vertexIDs.length < 3) { return 0; // null or bogus face } return vertexIDs.length - 2; } }