cache: fix material names colliding/the same one multiple times with different alphas

This commit is contained in:
Adam
2017-03-20 19:23:20 -04:00
parent 046ce8d8f6
commit 081bed8ab7

View File

@@ -26,6 +26,8 @@ package net.runelite.cache.models;
import java.awt.Color;
import java.io.PrintWriter;
import java.util.HashSet;
import java.util.Set;
import net.runelite.cache.definitions.ModelDefinition;
public class ObjExporter
@@ -55,18 +57,32 @@ public class ObjExporter
objWriter.println(" vn " + normal.x + " " + normal.y + " " + normal.z);
}
Set<Integer> usedMaterials = new HashSet<>();
for (int i = 0; i < model.triangleFaceCount; ++i)
{
objWriter.println(" usemtl color" + model.faceColor[i]);
Color color = rs2hsbToColor(model.faceColor[i]);
int alpha = 0;
if (model.faceAlphas != null)
{
alpha = model.faceAlphas[i] & 0xFF;
}
int rgba = color.getRGB() << 8 | alpha;
objWriter.println(" usemtl color" + rgba);
objWriter.println(" f " + (model.trianglePointsX[i] + 1) + " " + (model.trianglePointsY[i] + 1) + " " + (model.trianglePointsZ[i] + 1));
objWriter.println("");
}
for (int i = 0; i < model.faceColor.length; ++i)
{
mtlWriter.println("newmtl color" + model.faceColor[i]);
// Write material
if (usedMaterials.contains(rgba))
continue;
usedMaterials.add(rgba);
Color color = rs2hsbToColor(model.faceColor[i]);
mtlWriter.println("newmtl color" + rgba);
double r = color.getRed() / 255.0;
double g = color.getGreen() / 255.0;
@@ -74,9 +90,9 @@ public class ObjExporter
mtlWriter.println(" Kd " + r + " " + g + " " + b);
if (model.faceAlphas != null && model.faceAlphas[i] != 0)
if (alpha != 0)
{
mtlWriter.println(" d " + (model.faceAlphas[i] & 0xFF) / 255.0);
mtlWriter.println(" d " + (alpha / 255.0));
}
}
}