org.spout.api.model.mesh.MeshFace.java Source code

Java tutorial

Introduction

Here is the source code for org.spout.api.model.mesh.MeshFace.java

Source

/*
 * This file is part of SpoutAPI.
 *
 * Copyright (c) 2011-2012, SpoutDev <http://www.spout.org/>
 * SpoutAPI is licensed under the SpoutDev License Version 1.
 *
 * SpoutAPI is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * In addition, 180 days after any changes are published, you can use the
 * software, incorporating those changes, under the terms of the MIT license,
 * as described in the SpoutDev License Version 1.
 *
 * SpoutAPI is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License,
 * the MIT license and the SpoutDev License Version 1 along with this program.
 * If not, see <http://www.gnu.org/licenses/> for the GNU Lesser General Public
 * License and see <http://www.spout.org/SpoutDevLicenseV1.txt> for the full license,
 * including the MIT license.
 */
package org.spout.api.model.mesh;

import java.util.Iterator;

import org.spout.api.math.MathHelper;
import org.spout.api.math.Vector2;
import org.spout.api.math.Vector3;
import org.spout.api.util.StringUtil;
import org.apache.commons.collections.iterators.ArrayIterator;

/**
 * Represents a Triangle for a model face
 * 
 */
public class MeshFace implements Iterable<Vertex> {

    Vertex[] verts = new Vertex[3];

    public MeshFace(Vertex v1, Vertex v2, Vertex v3) {
        verts[0] = v1;
        verts[1] = v2;
        verts[2] = v3;
    }

    /**
     * Recalculates the normals for this triangle.  All points must be 0'd before this.
     */
    protected void doRecalculateNormals() {
        Vector3 trinormal = MathHelper
                .cross(verts[0].position.subtract(verts[1].position), verts[1].position.subtract(verts[2].position))
                .normalize();
        verts[0].normal = verts[0].normal.add(trinormal).normalize();
        verts[1].normal = verts[1].normal.add(trinormal).normalize();
        verts[2].normal = verts[2].normal.add(trinormal).normalize();

    }

    Vector3[] getPositions() {
        return new Vector3[] { verts[0].position, verts[1].position, verts[2].position };
    }

    Vector3[] getNormals() {
        return new Vector3[] { verts[0].normal, verts[1].normal, verts[2].normal };
    }

    Vector2[] getUVs() {
        return new Vector2[] { verts[0].texCoord0, verts[1].texCoord0, verts[2].texCoord0 };
    }

    @Override
    public String toString() {
        return StringUtil.toNamedString(this, verts[0], verts[1], verts[2]);
    }

    @SuppressWarnings("unchecked")
    @Override
    public Iterator<Vertex> iterator() {
        return new ArrayIterator(verts);
    }
}