void AddTriangles(TriangleCollection s, WMOInstance wi) { float dx = wi.pos.x; float dy = wi.pos.y; float dz = wi.pos.z; float dir_x = wi.dir.z; float dir_y = wi.dir.y - 90; float dir_z = -wi.dir.x; Console.WriteLine("modeli: " + dir_x + " " + dir_y + " " + dir_z); WMO wmo = wi.wmo; foreach (WMOGroup g in wmo.groups) { int[] vertices = new int[g.nVertices]; for (int i = 0; i < g.nVertices; i++) { int off = i * 3; float x = g.vertices[off]; float y = g.vertices[off + 2]; float z = g.vertices[off + 1]; rotate(z, y, dir_x, out z, out y); rotate(x, y, dir_z, out x, out y); rotate(x, z, dir_y, out x, out z); float xx = x + dx; float yy = y + dy; float zz = -z + dz; float finalx = ChunkReader.ZEROPOINT - zz; float finaly = ChunkReader.ZEROPOINT - xx; float finalz = yy; vertices[i] = s.AddVertex(finalx, finaly, finalz); } // Console.WriteLine("nTriangles: " + g.nTriangles); for (int i = 0; i < g.nTriangles; i++) { //if ((g.materials[i] & 0x1000) != 0) { int off = i * 3; int i0 = vertices[g.triangles[off]]; int i1 = vertices[g.triangles[off + 1]]; int i2 = vertices[g.triangles[off + 2]]; int t = s.AddTriangle(i0, i1, i2, ChunkedTriangleCollection.TriangleFlagObject); //if(t != -1) s.SetTriangleExtra(t, g.materials[0], 0, 0); } } } int doodadset = wi.doodadset; if (doodadset < wmo.nDoodadSets) { uint firstDoodad = wmo.doodads[doodadset].firstInstance; uint nDoodads = wmo.doodads[doodadset].nInstances; for (uint i = 0; i < nDoodads; i++) { uint d = firstDoodad + i; ModelInstance mi = wmo.doodadInstances[d]; if (mi != null) { //Console.WriteLine("I got model " + mi.model.fileName + " at " + mi.pos); //AddTrianglesGroupDoodads(s, mi, wi.dir, wi.pos, 0.0f); // DOes not work :( } } } }
private void AddTriangles(TriangleCollection s, WMOInstance wi) { float dx = wi.pos.x; float dy = wi.pos.y; float dz = wi.pos.z; float dir_x = wi.dir.z; float dir_y = wi.dir.y - 90; float dir_z = -wi.dir.x; logger.WriteLine("modeli: " + dir_x + " " + dir_y + " " + dir_z); WMO wmo = wi.wmo; foreach (WMOGroup g in wmo.groups) { sequence++; int[] vertices = new int[g.nVertices]; float minx = float.MaxValue; float miny = float.MaxValue; float minz = float.MaxValue; float maxx = float.MinValue; float maxy = float.MinValue; float maxz = float.MinValue; for (int i = 0; i < g.nVertices; i++) { int off = i * 3; float x = g.vertices[off]; float y = g.vertices[off + 2]; float z = g.vertices[off + 1]; rotate(z, y, dir_x, out z, out y); rotate(x, y, dir_z, out x, out y); rotate(x, z, dir_y, out x, out z); float xx = x + dx; float yy = y + dy; float zz = -z + dz; float finalx = ChunkReader.ZEROPOINT - zz; float finaly = ChunkReader.ZEROPOINT - xx; float finalz = yy; vertices[i] = s.AddVertex(finalx, finaly, finalz); if (finalx < minx) { minx = finalx; } if (finaly < miny) { miny = finalx; } if (finalz < minz) { minz = finalx; } if (finalx > maxx) { maxx = finalx; } if (finaly > maxy) { maxy = finalx; } if (finalz > maxz) { maxz = finalx; } } logger.WriteLine("AddTriangles: x(" + minx + " - " + maxx + ") y(" + miny + " - " + maxy + ") z(" + minz + " - " + maxz + ")"); for (int i = 0; i < g.nTriangles; i++) { //if ((g.materials[i] & 0x1000) != 0) { int off = i * 3; int i0 = vertices[g.triangles[off]]; int i1 = vertices[g.triangles[off + 1]]; int i2 = vertices[g.triangles[off + 2]]; int t = s.AddTriangle(i0, i1, i2, ChunkedTriangleCollection.TriangleFlagObject, sequence); //if(t != -1) s.SetTriangleExtra(t, g.materials[0], 0, 0); } } } int doodadset = wi.doodadset; if (doodadset < wmo.nDoodadSets) { uint firstDoodad = wmo.doodads[doodadset].firstInstance; uint nDoodads = wmo.doodads[doodadset].nInstances; for (uint i = 0; i < nDoodads; i++) { uint d = firstDoodad + i; ModelInstance mi = wmo.doodadInstances[d]; if (mi != null) { //logger.WriteLine("I got model " + mi.model.fileName + " at " + mi.pos); //AddTrianglesGroupDoodads(s, mi, wi.dir, wi.pos, 0.0f); // DOes not work :( } } } }
void AddTriangles(TriangleCollection s, WMOInstance wi) { float dx = wi.pos.x; float dy = wi.pos.y; float dz = wi.pos.z; float dir_x = wi.dir.x; float dir_y = wi.dir.y; float dir_z = wi.dir.z; WMO wmo = wi.wmo; foreach (WMOGroup g in wmo.groups) { int[] vertices = new int[g.nVertices]; for (int i = 0; i < g.nVertices; i++) { int off = i * 3; float x = g.vertices[off]; float y = g.vertices[off + 2]; float z = g.vertices[off + 1]; rotate(x, z, (dir_y - 90), out x, out z); rotate(x, y, dir_z, out x, out y); rotate(y, z, -dir_x, out y, out z); float xx = x + dx; float yy = y + dy; float zz = -z + dz; float finalx = ChunkReader.ZEROPOINT - zz; float finaly = ChunkReader.ZEROPOINT - xx; float finalz = yy; vertices[i] = s.AddVertex(finalx, finaly, finalz); } // Console.WriteLine("nTriangles: " + g.nTriangles); for (int i = 0; i < g.nTriangles; i++) { //if ((g.materials[i] & 0x1000) != 0) { int off = i * 3; int i0 = vertices[g.triangles[off]]; int i1 = vertices[g.triangles[off + 1]]; int i2 = vertices[g.triangles[off + 2]]; int t = s.AddTriangle(i0, i1, i2, ChunkedTriangleCollection.TriangleFlagObject); //if(t != -1) s.SetTriangleExtra(t, g.materials[0], 0, 0); } } } int doodadset = wi.doodadset; if (doodadset < wmo.nDoodadSets) { uint firstDoodad = wmo.doodads[doodadset].firstInstance; uint nDoodads = wmo.doodads[doodadset].nInstances; for (uint i = 0; i < nDoodads; i++) { uint d = firstDoodad + i; ModelInstance mi = wmo.doodadInstances[d]; if (mi != null) { //Console.WriteLine("I got model " + mi.model.fileName + " at " + mi.pos); //AddTrianglesGroupDoodads(s, mi, wi.dir, wi.pos, 0.0f); } } } }