summaryrefslogtreecommitdiff
path: root/NW4RTools/ObjImporter.cs
diff options
context:
space:
mode:
Diffstat (limited to 'NW4RTools/ObjImporter.cs')
-rwxr-xr-xNW4RTools/ObjImporter.cs36
1 files changed, 26 insertions, 10 deletions
diff --git a/NW4RTools/ObjImporter.cs b/NW4RTools/ObjImporter.cs
index 78294bd..a1f04b7 100755
--- a/NW4RTools/ObjImporter.cs
+++ b/NW4RTools/ObjImporter.cs
@@ -35,9 +35,6 @@ namespace NW4RTools {
List<float[]> Normals;
List<float[]> TexCoords;
- Vec3 CurrentMinimum;
- Vec3 CurrentMaximum;
-
private ObjImporter(string basePath, ResFile file, TextReader tr) {
BasePath = basePath;
CurrentFile = file;
@@ -79,7 +76,7 @@ namespace NW4RTools {
// Set current material (usemtl):
// -- A different material will be assigned for the current shape.
- if (Lightmap != LightmapType.None) {
+ if (Lightmap != LightmapType.None && !texGroup.ContainsKey(LightmapName1)) {
var lm01 = new Texture();
var lm02 = new Texture();
@@ -93,8 +90,8 @@ namespace NW4RTools {
lm02.Format = TextureFormat.I8;
- CurrentFile.GetTextureGroup().Add(LightmapName1, lm01);
- CurrentFile.GetTextureGroup().Add(LightmapName2, lm02);
+ texGroup.Add(LightmapName1, lm01);
+ texGroup.Add(LightmapName2, lm02);
}
@@ -110,8 +107,8 @@ namespace NW4RTools {
// Todo: vertex count, triangle count
// Minimum, Maximum will be calc'd later
- CurrentMinimum = new Vec3(0, 0, 0);
- CurrentMaximum = new Vec3(0, 0, 0);
+ var minimum = new Vec3(0, 0, 0);
+ var maximum = new Vec3(0, 0, 0);
// Create one node
// Default settings from test_lift.brres
@@ -183,14 +180,30 @@ namespace NW4RTools {
if (line.Length == 0 || line[0] == '#')
continue;
- var parsed = line.Split(new char[] { ' '}, StringSplitOptions.RemoveEmptyEntries);
+ var parsed = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
switch (parsed[0]) {
case "mtllib":
LoadMaterialLibrary(string.Join(" ", parsed, 1, parsed.Length - 1));
break;
case "v":
- Positions.Add(ParseFloatArray(parsed, 1, 3));
+ var vEntry = ParseFloatArray(parsed, 1, 3);
+ Positions.Add(vEntry);
+
+ if (vEntry[0] < minimum.x)
+ minimum.x = vEntry[0];
+ if (vEntry[1] < minimum.y)
+ minimum.y = vEntry[1];
+ if (vEntry[2] < minimum.z)
+ minimum.z = vEntry[2];
+
+ if (vEntry[0] > maximum.x)
+ maximum.x = vEntry[0];
+ if (vEntry[1] > maximum.y)
+ maximum.y = vEntry[1];
+ if (vEntry[2] > maximum.z)
+ maximum.z = vEntry[2];
+
break;
case "vn":
Normals.Add(ParseFloatArray(parsed, 1, 3));
@@ -221,6 +234,9 @@ namespace NW4RTools {
// Parsing is finished. Let's finish up DrawOpa
drawOpa.Instructions.Add(new ByteCode.DoneInstruction());
+
+ CurrentModel.Minimum = minimum;
+ CurrentModel.Maximum = maximum;
}