mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
87 lines
2.7 KiB
Java
87 lines
2.7 KiB
Java
package com.hbm.render.loader;
|
|
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
import net.minecraft.client.renderer.Tessellator;
|
|
import net.minecraft.util.Vec3;
|
|
import net.minecraftforge.client.model.obj.TextureCoordinate;
|
|
import net.minecraftforge.client.model.obj.Vertex;
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
public class S_Face {
|
|
|
|
public int[] verticesID;
|
|
public Vertex[] vertices;
|
|
public Vertex[] vertexNormals;
|
|
public Vertex faceNormal;
|
|
public TextureCoordinate[] textureCoordinates;
|
|
|
|
/*public S_Face copy() {
|
|
S_Face f = new S_Face();
|
|
|
|
return f;
|
|
}*/
|
|
|
|
public void addFaceForRender(Tessellator tessellator) {
|
|
addFaceForRender(tessellator, 0.0F);
|
|
}
|
|
|
|
public void addFaceForRender(Tessellator tessellator, float textureOffset) {
|
|
|
|
if (this.faceNormal == null) {
|
|
this.faceNormal = calculateFaceNormal();
|
|
}
|
|
|
|
tessellator.setNormal(this.faceNormal.x, this.faceNormal.y, this.faceNormal.z);
|
|
|
|
float averageU = 0.0F;
|
|
float averageV = 0.0F;
|
|
|
|
if ((this.textureCoordinates != null) && (this.textureCoordinates.length > 0)) {
|
|
|
|
for (int i = 0; i < this.textureCoordinates.length; i++) {
|
|
averageU += this.textureCoordinates[i].u;
|
|
averageV += this.textureCoordinates[i].v;
|
|
}
|
|
|
|
averageU /= this.textureCoordinates.length;
|
|
averageV /= this.textureCoordinates.length;
|
|
}
|
|
|
|
for (int i = 0; i < this.vertices.length; i++) {
|
|
|
|
if ((this.textureCoordinates != null) && (this.textureCoordinates.length > 0)) {
|
|
|
|
float offsetU = textureOffset;
|
|
float offsetV = textureOffset;
|
|
|
|
if (this.textureCoordinates[i].u > averageU) {
|
|
offsetU = -offsetU;
|
|
}
|
|
if (this.textureCoordinates[i].v > averageV) {
|
|
offsetV = -offsetV;
|
|
}
|
|
if ((this.vertexNormals != null) && (i < this.vertexNormals.length)) {
|
|
tessellator.setNormal(this.vertexNormals[i].x, this.vertexNormals[i].y, this.vertexNormals[i].z);
|
|
}
|
|
|
|
tessellator.addVertexWithUV(this.vertices[i].x, this.vertices[i].y, this.vertices[i].z, this.textureCoordinates[i].u + offsetU, this.textureCoordinates[i].v + offsetV);
|
|
|
|
} else {
|
|
tessellator.addVertex(this.vertices[i].x, this.vertices[i].y, this.vertices[i].z);
|
|
}
|
|
}
|
|
}
|
|
|
|
public Vertex calculateFaceNormal() {
|
|
|
|
Vec3 v1 = Vec3.createVectorHelper(this.vertices[1].x - this.vertices[0].x, this.vertices[1].y - this.vertices[0].y, this.vertices[1].z - this.vertices[0].z);
|
|
Vec3 v2 = Vec3.createVectorHelper(this.vertices[2].x - this.vertices[0].x, this.vertices[2].y - this.vertices[0].y, this.vertices[2].z - this.vertices[0].z);
|
|
Vec3 normalVector = null;
|
|
|
|
normalVector = v1.crossProduct(v2).normalize();
|
|
|
|
return new Vertex((float) normalVector.xCoord, (float) normalVector.yCoord, (float) normalVector.zCoord);
|
|
}
|
|
}
|