Reduce number of startDrawing/draw calls to the tessellator (thanks for the tip), add some render methods to WavefrontObject, removed unnecessary commenting
This commit is contained in:
parent
64f0663e88
commit
bf09bdb8a6
8 changed files with 175 additions and 238 deletions
|
@ -1,15 +1,12 @@
|
||||||
package com.pahimar.ee3.client.model;
|
package com.pahimar.ee3.client.model;
|
||||||
|
|
||||||
import net.minecraft.client.model.ModelBase;
|
import net.minecraft.client.model.ModelBase;
|
||||||
import net.minecraft.client.renderer.Tessellator;
|
|
||||||
import net.minecraftforge.client.model.obj.GroupObject;
|
|
||||||
import net.minecraftforge.client.model.obj.WavefrontObject;
|
import net.minecraftforge.client.model.obj.WavefrontObject;
|
||||||
import net.minecraftforge.common.ForgeDirection;
|
import net.minecraftforge.common.ForgeDirection;
|
||||||
|
|
||||||
import org.lwjgl.opengl.GL11;
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
import com.pahimar.ee3.lib.Models;
|
import com.pahimar.ee3.lib.Models;
|
||||||
import com.pahimar.ee3.lib.Reference;
|
|
||||||
import com.pahimar.ee3.lib.Textures;
|
import com.pahimar.ee3.lib.Textures;
|
||||||
import com.pahimar.ee3.tileentity.TileAludel;
|
import com.pahimar.ee3.tileentity.TileAludel;
|
||||||
|
|
||||||
|
@ -29,43 +26,37 @@ import cpw.mods.fml.relauncher.SideOnly;
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
public class ModelAludel extends ModelBase {
|
public class ModelAludel extends ModelBase {
|
||||||
|
|
||||||
private float scale;
|
|
||||||
|
|
||||||
private WavefrontObject modelAludelOBJ;
|
private WavefrontObject modelAludelOBJ;
|
||||||
|
|
||||||
public ModelAludel() {
|
public ModelAludel() {
|
||||||
|
|
||||||
scale = 1F;
|
|
||||||
modelAludelOBJ = new WavefrontObject(Models.ALUDEL);
|
modelAludelOBJ = new WavefrontObject(Models.ALUDEL);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ModelAludel(float scale) {
|
public void render() {
|
||||||
|
|
||||||
this.scale = scale;
|
modelAludelOBJ.renderAll();
|
||||||
modelAludelOBJ = new WavefrontObject(Models.ALUDEL);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void render(Tessellator tessellator, float scale) {
|
|
||||||
|
|
||||||
if (modelAludelOBJ.groupObjects.size() != 0) {
|
|
||||||
for (GroupObject groupObject : modelAludelOBJ.groupObjects) {
|
|
||||||
groupObject.render(tessellator, Reference.MODEL_TEXTURE_OFFSET, scale);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void render(TileAludel aludel, double x, double y, double z) {
|
public void render(TileAludel aludel, double x, double y, double z) {
|
||||||
|
|
||||||
GL11.glPushMatrix();
|
GL11.glPushMatrix();
|
||||||
GL11.glDisable(GL11.GL_LIGHTING);
|
GL11.glDisable(GL11.GL_LIGHTING);
|
||||||
correctRotation(x, y, z, aludel.getOrientation());
|
|
||||||
|
// Scale, Translate, Rotate
|
||||||
|
scaleTranslateRotate(x, y, z, aludel.getOrientation());
|
||||||
|
|
||||||
|
// Bind texture
|
||||||
FMLClientHandler.instance().getClient().renderEngine.bindTexture(Textures.MODEL_ALUDEL);
|
FMLClientHandler.instance().getClient().renderEngine.bindTexture(Textures.MODEL_ALUDEL);
|
||||||
this.render(Tessellator.instance, scale);
|
|
||||||
|
// Render
|
||||||
|
this.render();
|
||||||
|
|
||||||
GL11.glEnable(GL11.GL_LIGHTING);
|
GL11.glEnable(GL11.GL_LIGHTING);
|
||||||
GL11.glPopMatrix();
|
GL11.glPopMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void correctRotation(double x, double y, double z, ForgeDirection orientation) {
|
private void scaleTranslateRotate(double x, double y, double z, ForgeDirection orientation) {
|
||||||
|
|
||||||
if (orientation == ForgeDirection.NORTH) {
|
if (orientation == ForgeDirection.NORTH) {
|
||||||
GL11.glTranslated(x + 1, y, z);
|
GL11.glTranslated(x + 1, y, z);
|
||||||
|
|
|
@ -1,14 +1,11 @@
|
||||||
package com.pahimar.ee3.client.model;
|
package com.pahimar.ee3.client.model;
|
||||||
|
|
||||||
import net.minecraft.client.model.ModelBase;
|
import net.minecraft.client.model.ModelBase;
|
||||||
import net.minecraft.client.renderer.Tessellator;
|
|
||||||
import net.minecraftforge.client.model.obj.GroupObject;
|
|
||||||
import net.minecraftforge.client.model.obj.WavefrontObject;
|
import net.minecraftforge.client.model.obj.WavefrontObject;
|
||||||
|
|
||||||
import org.lwjgl.opengl.GL11;
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
import com.pahimar.ee3.lib.Models;
|
import com.pahimar.ee3.lib.Models;
|
||||||
import com.pahimar.ee3.lib.Reference;
|
|
||||||
import com.pahimar.ee3.lib.Textures;
|
import com.pahimar.ee3.lib.Textures;
|
||||||
import com.pahimar.ee3.tileentity.TileCalcinator;
|
import com.pahimar.ee3.tileentity.TileCalcinator;
|
||||||
|
|
||||||
|
@ -28,42 +25,35 @@ import cpw.mods.fml.relauncher.SideOnly;
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
public class ModelCalcinator extends ModelBase {
|
public class ModelCalcinator extends ModelBase {
|
||||||
|
|
||||||
private float scale;
|
|
||||||
|
|
||||||
private WavefrontObject modelCalcinatorOBJ;
|
private WavefrontObject modelCalcinatorOBJ;
|
||||||
|
|
||||||
public ModelCalcinator() {
|
public ModelCalcinator() {
|
||||||
|
|
||||||
scale = 1F;
|
|
||||||
modelCalcinatorOBJ = new WavefrontObject(Models.CALCINATOR);
|
modelCalcinatorOBJ = new WavefrontObject(Models.CALCINATOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ModelCalcinator(float scale) {
|
public void render() {
|
||||||
|
|
||||||
this.scale = scale;
|
modelCalcinatorOBJ.renderAll();
|
||||||
modelCalcinatorOBJ = new WavefrontObject(Models.CALCINATOR);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void render(Tessellator tessellator, float scale) {
|
|
||||||
|
|
||||||
if (modelCalcinatorOBJ.groupObjects.size() != 0) {
|
|
||||||
for (GroupObject groupObject : modelCalcinatorOBJ.groupObjects) {
|
|
||||||
if (groupObject.name.equalsIgnoreCase("calcinator")) {
|
|
||||||
groupObject.render(tessellator, Reference.MODEL_TEXTURE_OFFSET, scale);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void render(TileCalcinator calcinator, double x, double y, double z) {
|
public void render(TileCalcinator calcinator, double x, double y, double z) {
|
||||||
|
|
||||||
GL11.glPushMatrix();
|
GL11.glPushMatrix();
|
||||||
GL11.glDisable(GL11.GL_LIGHTING);
|
GL11.glDisable(GL11.GL_LIGHTING);
|
||||||
|
|
||||||
|
// Scale, Translate, Rotate
|
||||||
|
GL11.glScalef(1.0F, 1.0F, 1.0F);
|
||||||
GL11.glTranslatef((float) x + 0.5F, (float) y + 0.0F, (float) z + 1.2F);
|
GL11.glTranslatef((float) x + 0.5F, (float) y + 0.0F, (float) z + 1.2F);
|
||||||
GL11.glRotatef(45F, 0F, 1F, 0F);
|
GL11.glRotatef(45F, 0F, 1F, 0F);
|
||||||
GL11.glRotatef(-90F, 1F, 0F, 0F);
|
GL11.glRotatef(-90F, 1F, 0F, 0F);
|
||||||
|
|
||||||
|
// Bind texture
|
||||||
FMLClientHandler.instance().getClient().renderEngine.bindTexture(Textures.MODEL_CALCINATOR);
|
FMLClientHandler.instance().getClient().renderEngine.bindTexture(Textures.MODEL_CALCINATOR);
|
||||||
this.render(Tessellator.instance, scale);
|
|
||||||
|
// Render
|
||||||
|
this.render();
|
||||||
|
|
||||||
GL11.glEnable(GL11.GL_LIGHTING);
|
GL11.glEnable(GL11.GL_LIGHTING);
|
||||||
GL11.glPopMatrix();
|
GL11.glPopMatrix();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package com.pahimar.ee3.client.renderer.item;
|
package com.pahimar.ee3.client.renderer.item;
|
||||||
|
|
||||||
import net.minecraft.client.renderer.Tessellator;
|
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraftforge.client.IItemRenderer;
|
import net.minecraftforge.client.IItemRenderer;
|
||||||
|
|
||||||
|
@ -47,37 +46,41 @@ public class ItemAludelRenderer implements IItemRenderer {
|
||||||
@Override
|
@Override
|
||||||
public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
|
public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
|
||||||
|
|
||||||
float scale;
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case ENTITY: {
|
case ENTITY: {
|
||||||
scale = 0.66F;
|
renderAludel(-0.5F, 0.0F, 0.5F, 0.66F);
|
||||||
renderAludel(-0.5F * scale, 0.0F * scale, 0.5F * scale, scale);
|
return;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
case EQUIPPED: {
|
case EQUIPPED: {
|
||||||
scale = 0.66F;
|
renderAludel(0.5F, 0.0F, 1.25F, 0.66F);
|
||||||
renderAludel(0.5F * scale, 0.0F * scale, 1.25F * scale, scale);
|
return;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
case INVENTORY: {
|
case INVENTORY: {
|
||||||
scale = 0.85F;
|
renderAludel(-1.0F, -1.2F, 0.0F, 0.85F);
|
||||||
renderAludel(-1.0F * scale, -1.2F * scale, 0.0F * scale, scale);
|
return;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void renderAludel(float x, float y, float z, float scale) {
|
private void renderAludel(float x, float y, float z, float scale) {
|
||||||
|
|
||||||
FMLClientHandler.instance().getClient().renderEngine.bindTexture(Textures.MODEL_ALUDEL);
|
GL11.glPushMatrix();
|
||||||
GL11.glPushMatrix(); //start
|
|
||||||
GL11.glDisable(GL11.GL_LIGHTING);
|
GL11.glDisable(GL11.GL_LIGHTING);
|
||||||
GL11.glTranslatef(x, y, z); //size
|
|
||||||
|
// Scale, Translate, Rotate
|
||||||
|
GL11.glScalef(scale, scale, scale);
|
||||||
|
GL11.glTranslatef(x, y, z);
|
||||||
GL11.glRotatef(-90F, 1F, 0, 0);
|
GL11.glRotatef(-90F, 1F, 0, 0);
|
||||||
aludelModel.render(Tessellator.instance, scale);
|
|
||||||
|
// Bind texture
|
||||||
|
FMLClientHandler.instance().getClient().renderEngine.bindTexture(Textures.MODEL_ALUDEL);
|
||||||
|
|
||||||
|
// Render
|
||||||
|
aludelModel.render();
|
||||||
|
|
||||||
GL11.glEnable(GL11.GL_LIGHTING);
|
GL11.glEnable(GL11.GL_LIGHTING);
|
||||||
GL11.glPopMatrix(); //end
|
GL11.glPopMatrix();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package com.pahimar.ee3.client.renderer.item;
|
package com.pahimar.ee3.client.renderer.item;
|
||||||
|
|
||||||
import net.minecraft.client.renderer.Tessellator;
|
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraftforge.client.IItemRenderer;
|
import net.minecraftforge.client.IItemRenderer;
|
||||||
|
|
||||||
|
@ -47,38 +46,41 @@ public class ItemCalcinatorRenderer implements IItemRenderer {
|
||||||
@Override
|
@Override
|
||||||
public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
|
public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
|
||||||
|
|
||||||
float scale;
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case ENTITY: {
|
case ENTITY: {
|
||||||
scale = 1.0F;
|
renderCalcinator(-0.5F, 0.0F, 0.5F, 1.0F);
|
||||||
renderCalcinator(-0.5F * scale, 0.0F * scale, 0.5F * scale, scale);
|
return;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
case EQUIPPED: {
|
case EQUIPPED: {
|
||||||
scale = 1.0F;
|
renderCalcinator(0.0F, 0.0F, 1.0F, 1.0F);
|
||||||
renderCalcinator(0.0F * scale, 0.0F * scale, 1.0F * scale, scale);
|
return;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
case INVENTORY: {
|
case INVENTORY: {
|
||||||
scale = 1.0F;
|
renderCalcinator(0.0F, -0.1F, 1.0F, 1.0F);
|
||||||
renderCalcinator(0.0F * scale, -0.1F * scale, 1.0F * scale, scale);
|
return;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void renderCalcinator(float x, float y, float z, float scale) {
|
private void renderCalcinator(float x, float y, float z, float scale) {
|
||||||
|
|
||||||
FMLClientHandler.instance().getClient().renderEngine.bindTexture(Textures.MODEL_CALCINATOR);
|
GL11.glPushMatrix();
|
||||||
GL11.glPushMatrix(); //start
|
|
||||||
GL11.glDisable(GL11.GL_LIGHTING);
|
GL11.glDisable(GL11.GL_LIGHTING);
|
||||||
GL11.glTranslatef(x, y, z); //size
|
|
||||||
|
// Scale, Translate, Rotate
|
||||||
|
GL11.glScalef(scale, scale, scale);
|
||||||
|
GL11.glTranslatef(x, y, z);
|
||||||
GL11.glRotatef(-90F, 1F, 0, 0);
|
GL11.glRotatef(-90F, 1F, 0, 0);
|
||||||
calcinatorModel.render(Tessellator.instance, scale);
|
|
||||||
|
// Bind texture
|
||||||
|
FMLClientHandler.instance().getClient().renderEngine.bindTexture(Textures.MODEL_CALCINATOR);
|
||||||
|
|
||||||
|
// Render
|
||||||
|
calcinatorModel.render();
|
||||||
|
|
||||||
GL11.glEnable(GL11.GL_LIGHTING);
|
GL11.glEnable(GL11.GL_LIGHTING);
|
||||||
GL11.glPopMatrix(); //end
|
GL11.glPopMatrix();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,55 @@ public class Face {
|
||||||
public Vertex[] vertexNormals;
|
public Vertex[] vertexNormals;
|
||||||
public Vertex faceNormal;
|
public Vertex faceNormal;
|
||||||
public TextureCoordinate[] textureCoordinates;
|
public TextureCoordinate[] textureCoordinates;
|
||||||
public int glDrawingMode;
|
|
||||||
|
public void addFaceForRender(Tessellator tessellator) {
|
||||||
|
|
||||||
|
addFaceForRender(tessellator, 0.0002F);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addFaceForRender(Tessellator tessellator, float textureOffset) {
|
||||||
|
|
||||||
|
if (faceNormal == null) {
|
||||||
|
faceNormal = this.calculateFaceNormal();
|
||||||
|
}
|
||||||
|
|
||||||
|
tessellator.setNormal(faceNormal.x, faceNormal.y, faceNormal.z);
|
||||||
|
|
||||||
|
float averageU = 0F;
|
||||||
|
float averageV = 0F;
|
||||||
|
|
||||||
|
if (textureCoordinates.length != 0) {
|
||||||
|
for (int i = 0; i < textureCoordinates.length; ++i) {
|
||||||
|
averageU += textureCoordinates[i].u;
|
||||||
|
averageV += textureCoordinates[i].v;
|
||||||
|
}
|
||||||
|
|
||||||
|
averageU = averageU / textureCoordinates.length;
|
||||||
|
averageV = averageV / textureCoordinates.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
float offsetU, offsetV;
|
||||||
|
|
||||||
|
for (int i = 0; i < vertices.length; ++i) {
|
||||||
|
|
||||||
|
if (textureCoordinates.length != 0) {
|
||||||
|
offsetU = textureOffset;
|
||||||
|
offsetV = textureOffset;
|
||||||
|
|
||||||
|
if (textureCoordinates[i].u > averageU) {
|
||||||
|
offsetU = -offsetU;
|
||||||
|
}
|
||||||
|
if (textureCoordinates[i].v > averageV) {
|
||||||
|
offsetV = -offsetV;
|
||||||
|
}
|
||||||
|
|
||||||
|
tessellator.addVertexWithUV(vertices[i].x, vertices[i].y, vertices[i].z, textureCoordinates[i].u + offsetU, textureCoordinates[i].v + offsetV);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
tessellator.addVertex(vertices[i].x, vertices[i].y, vertices[i].z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public Vertex calculateFaceNormal() {
|
public Vertex calculateFaceNormal() {
|
||||||
|
|
||||||
|
@ -24,110 +72,4 @@ public class Face {
|
||||||
|
|
||||||
return new Vertex((float)normalVector.xCoord, (float)normalVector.yCoord, (float)normalVector.zCoord);
|
return new Vertex((float)normalVector.xCoord, (float)normalVector.yCoord, (float)normalVector.zCoord);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void render(Tessellator tessellator, float scale) {
|
|
||||||
|
|
||||||
this.render(tessellator, 0F, scale);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void render(Tessellator tessellator, float textureOffset, float scale) {
|
|
||||||
|
|
||||||
tessellator.startDrawing(glDrawingMode);
|
|
||||||
|
|
||||||
if (faceNormal == null) {
|
|
||||||
faceNormal = this.calculateFaceNormal();
|
|
||||||
}
|
|
||||||
|
|
||||||
tessellator.setNormal(faceNormal.x, faceNormal.y, faceNormal.z);
|
|
||||||
|
|
||||||
float averageU = 0F;
|
|
||||||
float averageV = 0F;
|
|
||||||
|
|
||||||
if (textureCoordinates.length != 0) {
|
|
||||||
for (int i = 0; i < textureCoordinates.length; ++i) {
|
|
||||||
averageU += textureCoordinates[i].u;
|
|
||||||
averageV += textureCoordinates[i].v;
|
|
||||||
}
|
|
||||||
|
|
||||||
averageU = averageU / textureCoordinates.length;
|
|
||||||
averageV = averageV / textureCoordinates.length;
|
|
||||||
}
|
|
||||||
|
|
||||||
float offsetU, offsetV;
|
|
||||||
|
|
||||||
for (int i = 0; i < vertices.length; ++i) {
|
|
||||||
|
|
||||||
if (textureCoordinates.length != 0) {
|
|
||||||
offsetU = textureOffset;
|
|
||||||
offsetV = textureOffset;
|
|
||||||
|
|
||||||
if (textureCoordinates[i].u > averageU) {
|
|
||||||
offsetU = -offsetU;
|
|
||||||
}
|
|
||||||
if (textureCoordinates[i].v > averageV) {
|
|
||||||
offsetV = -offsetV;
|
|
||||||
}
|
|
||||||
|
|
||||||
tessellator.addVertexWithUV(vertices[i].x * scale, vertices[i].y * scale, vertices[i].z * scale, textureCoordinates[i].u + offsetU, textureCoordinates[i].v + offsetV);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
tessellator.addVertex(vertices[i].x * scale, vertices[i].y * scale, vertices[i].z * scale);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tessellator.draw();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void render(Tessellator tessellator, int glDrawingMode, float scale) {
|
|
||||||
|
|
||||||
this.render(tessellator, glDrawingMode, 0F, scale);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void render(Tessellator tessellator, int glDrawingMode, float textureOffset, float scale) {
|
|
||||||
|
|
||||||
tessellator.startDrawing(glDrawingMode);
|
|
||||||
|
|
||||||
if (faceNormal == null) {
|
|
||||||
faceNormal = this.calculateFaceNormal();
|
|
||||||
}
|
|
||||||
|
|
||||||
tessellator.setNormal(faceNormal.x, faceNormal.y, faceNormal.z);
|
|
||||||
|
|
||||||
float averageU = 0F;
|
|
||||||
float averageV = 0F;
|
|
||||||
|
|
||||||
if (textureCoordinates.length != 0) {
|
|
||||||
for (int i = 0; i < textureCoordinates.length; ++i) {
|
|
||||||
averageU += textureCoordinates[i].u;
|
|
||||||
averageV += textureCoordinates[i].v;
|
|
||||||
}
|
|
||||||
|
|
||||||
averageU = averageU / textureCoordinates.length;
|
|
||||||
averageV = averageV / textureCoordinates.length;
|
|
||||||
}
|
|
||||||
|
|
||||||
float offsetU, offsetV;
|
|
||||||
|
|
||||||
for (int i = 0; i < vertices.length; ++i) {
|
|
||||||
|
|
||||||
if (textureCoordinates.length != 0) {
|
|
||||||
offsetU = textureOffset;
|
|
||||||
offsetV = textureOffset;
|
|
||||||
|
|
||||||
if (textureCoordinates[i].u > averageU) {
|
|
||||||
offsetU = -offsetU;
|
|
||||||
}
|
|
||||||
if (textureCoordinates[i].v > averageV) {
|
|
||||||
offsetV = -offsetV;
|
|
||||||
}
|
|
||||||
|
|
||||||
tessellator.addVertexWithUV(vertices[i].x * scale, vertices[i].y * scale, vertices[i].z * scale, textureCoordinates[i].u + offsetU, textureCoordinates[i].v + offsetV);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
tessellator.addVertex(vertices[i].x * scale, vertices[i].y * scale, vertices[i].z * scale);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tessellator.draw();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,9 @@ package net.minecraftforge.client.model.obj;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import net.minecraft.client.renderer.Tessellator;
|
import net.minecraft.client.renderer.Tessellator;
|
||||||
|
|
||||||
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
import cpw.mods.fml.relauncher.Side;
|
import cpw.mods.fml.relauncher.Side;
|
||||||
import cpw.mods.fml.relauncher.SideOnly;
|
import cpw.mods.fml.relauncher.SideOnly;
|
||||||
|
|
||||||
|
@ -11,42 +14,37 @@ public class GroupObject {
|
||||||
|
|
||||||
public String name;
|
public String name;
|
||||||
public ArrayList<Face> faces = new ArrayList<Face>();
|
public ArrayList<Face> faces = new ArrayList<Face>();
|
||||||
|
public int glDrawingMode;
|
||||||
|
|
||||||
public GroupObject() {
|
public GroupObject() {
|
||||||
|
|
||||||
name = "";
|
this("");
|
||||||
}
|
}
|
||||||
|
|
||||||
public GroupObject(String name) {
|
public GroupObject(String name) {
|
||||||
|
|
||||||
|
this(name, GL11.GL_TRIANGLES);
|
||||||
|
}
|
||||||
|
|
||||||
|
public GroupObject(String name, int glDrawingMode) {
|
||||||
|
|
||||||
this.name = name;
|
this.name = name;
|
||||||
|
this.glDrawingMode = glDrawingMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void render(Tessellator tessellator, float scale) {
|
public void render() {
|
||||||
|
|
||||||
|
if (faces.size() > 0) {
|
||||||
|
|
||||||
|
Tessellator tessellator = Tessellator.instance;
|
||||||
|
|
||||||
|
tessellator.startDrawing(glDrawingMode);
|
||||||
|
|
||||||
for (Face face : faces) {
|
for (Face face : faces) {
|
||||||
face.render(tessellator, 0F, scale);
|
face.addFaceForRender(tessellator);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void render(Tessellator tessellator, float textureOffset, float scale) {
|
tessellator.draw();
|
||||||
|
|
||||||
for (Face face : faces) {
|
|
||||||
face.render(tessellator, textureOffset, scale);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void render(Tessellator tessellator, int glDrawingMode, float scale) {
|
|
||||||
|
|
||||||
for (Face face : faces) {
|
|
||||||
face.render(tessellator, glDrawingMode, 0F, scale);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void render(Tessellator tessellator, int glDrawingMode, float textureOffset, float scale) {
|
|
||||||
|
|
||||||
for (Face face : faces) {
|
|
||||||
face.render(tessellator, glDrawingMode, textureOffset, scale);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,32 +6,17 @@ import cpw.mods.fml.relauncher.SideOnly;
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
public class Vertex {
|
public class Vertex {
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public float x, y, z;
|
public float x, y, z;
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public Vertex() {
|
public Vertex() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param x
|
|
||||||
* @param y
|
|
||||||
*/
|
|
||||||
public Vertex(float x, float y) {
|
public Vertex(float x, float y) {
|
||||||
|
|
||||||
this(x, y, 0F);
|
this(x, y, 0F);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param x
|
|
||||||
* @param y
|
|
||||||
* @param z
|
|
||||||
*/
|
|
||||||
public Vertex(float x, float y, float z) {
|
public Vertex(float x, float y, float z) {
|
||||||
|
|
||||||
this.x = x;
|
this.x = x;
|
||||||
|
|
|
@ -6,12 +6,9 @@ import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.logging.Level;
|
|
||||||
|
|
||||||
import org.lwjgl.opengl.GL11;
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
import com.pahimar.ee3.core.helper.LogHelper;
|
|
||||||
|
|
||||||
import cpw.mods.fml.relauncher.Side;
|
import cpw.mods.fml.relauncher.Side;
|
||||||
import cpw.mods.fml.relauncher.SideOnly;
|
import cpw.mods.fml.relauncher.SideOnly;
|
||||||
|
|
||||||
|
@ -81,12 +78,14 @@ public class WavefrontObject {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (currentLine.startsWith("f ")) {
|
else if (currentLine.startsWith("f ")) {
|
||||||
Face face = parseFace(currentLine);
|
|
||||||
if (face != null) {
|
|
||||||
if (currentGroupObject == null) {
|
if (currentGroupObject == null) {
|
||||||
currentGroupObject = new GroupObject("Default");
|
currentGroupObject = new GroupObject("Default");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Face face = parseFace(currentLine);
|
||||||
|
|
||||||
|
if (face != null) {
|
||||||
currentGroupObject.faces.add(face);
|
currentGroupObject.faces.add(face);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -96,6 +95,7 @@ public class WavefrontObject {
|
||||||
if (currentGroupObject != null) {
|
if (currentGroupObject != null) {
|
||||||
groupObjects.add(currentGroupObject);
|
groupObjects.add(currentGroupObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
currentGroupObject = group;
|
currentGroupObject = group;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -116,6 +116,35 @@ public class WavefrontObject {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void renderAll() {
|
||||||
|
|
||||||
|
for (GroupObject groupObject : groupObjects) {
|
||||||
|
groupObject.render();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void renderOnly(String ... groupNames) {
|
||||||
|
|
||||||
|
for (GroupObject groupObject : groupObjects) {
|
||||||
|
for (String groupName : groupNames) {
|
||||||
|
if (groupName.equalsIgnoreCase(groupObject.name)) {
|
||||||
|
groupObject.render();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void renderAllExcept(String ... excludedGroupNames) {
|
||||||
|
|
||||||
|
for (GroupObject groupObject : groupObjects) {
|
||||||
|
for (String excludedGroupName : excludedGroupNames) {
|
||||||
|
if (!excludedGroupName.equalsIgnoreCase(groupObject.name)) {
|
||||||
|
groupObject.render();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private Vertex parseVertex(String line) {
|
private Vertex parseVertex(String line) {
|
||||||
Vertex vertex = null;
|
Vertex vertex = null;
|
||||||
|
|
||||||
|
@ -170,13 +199,10 @@ public class WavefrontObject {
|
||||||
String[] subTokens = null;
|
String[] subTokens = null;
|
||||||
|
|
||||||
if (tokens.length == 3) {
|
if (tokens.length == 3) {
|
||||||
face.glDrawingMode = GL11.GL_TRIANGLES;
|
currentGroupObject.glDrawingMode = GL11.GL_TRIANGLES;
|
||||||
}
|
}
|
||||||
else if (tokens.length == 4) {
|
else if (tokens.length == 4) {
|
||||||
face.glDrawingMode = GL11.GL_QUADS;
|
currentGroupObject.glDrawingMode = GL11.GL_QUADS;
|
||||||
}
|
|
||||||
else {
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
face.vertices = new Vertex[tokens.length];
|
face.vertices = new Vertex[tokens.length];
|
||||||
|
|
Loading…
Reference in a new issue