diff options
Diffstat (limited to '')
-rw-r--r-- | NW4RTools/Models/Material.cs | 13 | ||||
-rw-r--r-- | NW4RTools/Models/OpenGL/GLModel.cs | 2 | ||||
-rw-r--r-- | NW4RTools/Models/VertexData.cs | 52 |
3 files changed, 66 insertions, 1 deletions
diff --git a/NW4RTools/Models/Material.cs b/NW4RTools/Models/Material.cs index 0bf0acc..519790c 100644 --- a/NW4RTools/Models/Material.cs +++ b/NW4RTools/Models/Material.cs @@ -18,6 +18,17 @@ namespace NW4RTools.Models { public byte MapType; public byte Flags; public Matrix TexMatrix; + + public SRTSettingInfo() { + ScaleX = 1.0f; + ScaleY = 1.0f; + + CameraID = 0xFF; + LightID = 0xFf; + Flags = 1; + + TexMatrix.Identity(); + } } @@ -62,6 +73,8 @@ namespace NW4RTools.Models { IndirectTexMtxCalcMethod2 = new byte[4]; TexObj = new byte[8][]; // todo + SRTSettings = new SRTSettingInfo[8]; + ChanCtrls = new ChanCtrl[2]; TextureInfos = new List<TextureInfo>(); } } diff --git a/NW4RTools/Models/OpenGL/GLModel.cs b/NW4RTools/Models/OpenGL/GLModel.cs index 8ca3f31..072ea00 100644 --- a/NW4RTools/Models/OpenGL/GLModel.cs +++ b/NW4RTools/Models/OpenGL/GLModel.cs @@ -257,7 +257,7 @@ namespace NW4RTools.Models.OpenGL { break; if ((cmd & (int)GXCommand.DrawPrimitiveMask) != 0) { - PrimitiveType prim = (PrimitiveType)((cmd >> 3) & 7); + PrimitiveType prim = (PrimitiveType)((cmd >> (byte)GXCommand.PrimitiveShiftAmount) & 7); int vtxCount = dl.ReadUInt16(); if ((cmd & 7) != 0) diff --git a/NW4RTools/Models/VertexData.cs b/NW4RTools/Models/VertexData.cs index 187b9aa..feb8eb6 100644 --- a/NW4RTools/Models/VertexData.cs +++ b/NW4RTools/Models/VertexData.cs @@ -60,6 +60,54 @@ namespace NW4RTools.Models { } } + public virtual void Save() { + int elementCount = Data[0].Length; + float scale = 1.0f / (1 << Fraction); + var output = new OutputStream(); + + switch (ComponentType) { + case VertexSettings.CompType.UInt8: + foreach (var array in Data) { + for (int i = 0; i < elementCount; i++) { + output.WriteByte((byte)(array[i] / scale)); + } + } + break; + case VertexSettings.CompType.Int8: + foreach (var array in Data) { + for (int i = 0; i < elementCount; i++) { + output.WriteSByte((sbyte)(array[i] / scale)); + } + } + break; + case VertexSettings.CompType.UInt16: + foreach (var array in Data) { + for (int i = 0; i < elementCount; i++) { + output.WriteUInt16((ushort)(array[i] / scale)); + } + } + break; + case VertexSettings.CompType.Int16: + foreach (var array in Data) { + for (int i = 0; i < elementCount; i++) { + output.WriteInt16((short)(array[i] / scale)); + } + } + break; + case VertexSettings.CompType.Float32: + foreach (var array in Data) { + for (int i = 0; i < elementCount; i++) { + output.WriteFloat(array[i]); + } + } + break; + default: + throw new NotImplementedException(String.Format("unimplemented type {0}", (int)ComponentType)); + } + + RawData = output.GetBuffer(); + } + public abstract int GetRealCount(); } @@ -186,6 +234,10 @@ namespace NW4RTools.Models { return ret; } + + public override void Save() { + throw new NotImplementedException(); + } } |