//tessellator.setColorOpaque_I(clr);
public static void boxOnIcon(Tessellator tessellator, IIcon icon, double minX, double minY, double minZ, double maxX, double maxY, double maxZ) {
if (icon == null) return;
double icon_minX = (minX < 0D ? 0D : minX) * 16D;
double icon_minY = (minY < 0D ? 0D : minY) * 16D;
double icon_minZ = (minZ < 0D ? 0D : minZ) * 16D;
double icon_maxX = (maxX > 1D ? 1D : maxX) * 16D;
double icon_maxY = (maxY > 1D ? 1D : maxY) * 16D;
double icon_maxZ = (maxZ > 1D ? 1D : maxZ) * 16D;
tessellator.startDrawingQuads();
//Top
tessellator.addVertexWithUV(maxX, maxY, minZ,
(double)icon.getInterpolatedU(icon_maxX),
(double)icon.getInterpolatedV(icon_minZ)
);
tessellator.addVertexWithUV(minX, maxY, minZ,
(double)icon.getInterpolatedU(icon_minX),
(double)icon.getInterpolatedV(icon_minZ)
);
tessellator.addVertexWithUV(minX, maxY, maxZ,
(double)icon.getInterpolatedU(icon_minX),
(double)icon.getInterpolatedV(icon_maxZ)
);
tessellator.addVertexWithUV(maxX, maxY, maxZ,
(double)icon.getInterpolatedU(icon_maxX),
(double)icon.getInterpolatedV(icon_maxZ)
);
//Bottom
tessellator.addVertexWithUV(maxX, minY, maxZ,
(double)icon.getInterpolatedU(icon_maxX),
(double)icon.getInterpolatedV(icon_maxZ)
);
tessellator.addVertexWithUV(minX, minY, maxZ,
(double)icon.getInterpolatedU(icon_minX),
(double)icon.getInterpolatedV(icon_maxZ)
);
tessellator.addVertexWithUV(minX, minY, minZ,
(double)icon.getInterpolatedU(icon_minX),
(double)icon.getInterpolatedV(icon_minZ)
);
tessellator.addVertexWithUV(maxX, minY, minZ,
(double)icon.getInterpolatedU(icon_maxX),
(double)icon.getInterpolatedV(icon_minZ)
);
//North
tessellator.addVertexWithUV(maxX, minY, minZ,
(double)icon.getInterpolatedU(icon_minX),
(double)icon.getInterpolatedV(icon_maxY)
);
tessellator.addVertexWithUV(minX, minY, minZ,
(double)icon.getInterpolatedU(icon_maxX),
(double)icon.getInterpolatedV(icon_maxY)
);
tessellator.addVertexWithUV(minX, maxY, minZ,
(double)icon.getInterpolatedU(icon_maxX),
(double)icon.getInterpolatedV(icon_minY)
);
tessellator.addVertexWithUV(maxX, maxY, minZ,
(double)icon.getInterpolatedU(icon_minX),
(double)icon.getInterpolatedV(icon_minY)
);
//South
tessellator.addVertexWithUV(maxX, maxY, maxZ,
(double)icon.getInterpolatedU(icon_maxX),
(double)icon.getInterpolatedV(icon_minY)
);
tessellator.addVertexWithUV(minX, maxY, maxZ,
(double)icon.getInterpolatedU(icon_minX),
(double)icon.getInterpolatedV(icon_minY)
);
tessellator.addVertexWithUV(minX, minY, maxZ,
(double)icon.getInterpolatedU(icon_minX),
(double)icon.getInterpolatedV(icon_maxY)
);
tessellator.addVertexWithUV(maxX, minY, maxZ,
(double)icon.getInterpolatedU(icon_maxX),
(double)icon.getInterpolatedV(icon_maxY)
);
//West
tessellator.addVertexWithUV(minX, maxY, maxZ,
(double)icon.getInterpolatedU(icon_maxY),
(double)icon.getInterpolatedV(icon_minZ)
);
tessellator.addVertexWithUV(minX, maxY, minZ,
(double)icon.getInterpolatedU(icon_minY),
(double)icon.getInterpolatedV(icon_minZ)
);
tessellator.addVertexWithUV(minX, minY, minZ,
(double)icon.getInterpolatedU(icon_minY),
(double)icon.getInterpolatedV(icon_maxZ)
);
tessellator.addVertexWithUV(minX, minY, maxZ,
(double)icon.getInterpolatedU(icon_maxY),
(double)icon.getInterpolatedV(icon_maxZ)
);
//East
tessellator.addVertexWithUV(maxX, minY, maxZ,
(double)icon.getInterpolatedU(icon_minY),
(double)icon.getInterpolatedV(icon_maxZ)
);
tessellator.addVertexWithUV(maxX, minY, minZ,
(double)icon.getInterpolatedU(icon_maxY),
(double)icon.getInterpolatedV(icon_maxZ)
);
tessellator.addVertexWithUV(maxX, maxY, minZ,
(double)icon.getInterpolatedU(icon_maxY),
(double)icon.getInterpolatedV(icon_minZ)
);
tessellator.addVertexWithUV(maxX, maxY, maxZ,
(double)icon.getInterpolatedU(icon_minY),
(double)icon.getInterpolatedV(icon_minZ)
);
tessellator.draw();
}
//----------------------------------------------------------------------------------------------------
public static void renderAllOnIcon(WavefrontObject obj, IIcon icon, Tessellator tessellator) {
if (obj.groupObjects.size() > 0)
for (GroupObject go : obj.groupObjects) {
renderOnIcon(go, icon, tessellator);
}
}
public static void renderPartOnIcon(WavefrontObject obj, String partName, IIcon icon, Tessellator tessellator) {
if (obj.groupObjects.size() > 0)
for (GroupObject go : obj.groupObjects) {
if (partName.equals(go.name)) {
renderOnIcon(go, icon, tessellator);
break;
} else continue;
}
}
private static void renderOnIcon(GroupObject go, IIcon icon, Tessellator tessellator) {
tessellator.startDrawing(GL11.GL_TRIANGLES);//GL_QUADS - напоминание.
for (Face f : go.faces) {
Vertex vf = f.faceNormal;
tessellator.setNormal(vf.x, vf.y, vf.z);
for (int i = 0; i < f.vertices.length; ++i) {
Vertex v = f.vertices[i];
if (f.textureCoordinates != null && f.textureCoordinates.length > 0) {
TextureCoordinate tc = f.textureCoordinates[i];
tessellator.addVertexWithUV(
(double)v.x, (double)v.y, (double)v.z,
(double)icon.getInterpolatedU((double)(tc.u * 16.0F)),
(double)icon.getInterpolatedV((double)(tc.v * 16.0F))
);
} else {
//Плохо если код доходит до этого.
tessellator.addVertex((double)v.x, (double)v.y, (double)v.z);
}
}
}
tessellator.draw();
}