public List <RenderObject> ConvertForEngine(Engine3D engine) { List <RenderObject> result = new List <RenderObject>(); foreach (Helper.BF2CollisionMeshGeometry geom in geometry) { foreach (Helper.BF2CollisionMeshSubGeometry subgeo in geom.subGeom) { foreach (Helper.BF2CollisionMeshColData col in subgeo.colData) { RenderObject o = new RenderObject(engine.device, RenderObject.RenderType.TriListWired, engine.defaultTexture, engine); List <RenderObject.VertexWired> list = new List <RenderObject.VertexWired>(); for (int i = 0; i < col.numFaces; i++) { ushort[] face = col.faces[i]; list.Add(new RenderObject.VertexWired(col.vertices[face[0]].ToRawVec3(), Color4.Black)); list.Add(new RenderObject.VertexWired(col.vertices[face[1]].ToRawVec3(), Color4.Black)); list.Add(new RenderObject.VertexWired(col.vertices[face[2]].ToRawVec3(), Color4.Black)); } o.verticesWired = list.ToArray(); if (list.Count != 0) { o.InitGeometry(); result.Add(o); } } } } return(result); }
public RenderObject(Device d, RenderType t, Texture2D tex, Engine3D e) { device = d; type = t; engine = e; texture = tex; if (tex != null) { textureView = new ShaderResourceView(device, tex); } }
public List <RenderObject> ConvertForEngine(Engine3D engine, bool loadTextures, int geoMatIdx) { List <RenderObject> result = new List <RenderObject>(); if (geoMatIdx >= geomat.Count) { geoMatIdx = geomat.Count() - 1; } Helper.BF2MeshSTMGeometryMaterial lod0 = geomat[geoMatIdx]; for (int i = 0; i < lod0.numMaterials; i++) { Helper.BF2MeshSTMMaterial mat = lod0.materials[i]; List <RenderObject.VertexTextured> list = new List <RenderObject.VertexTextured>(); List <RenderObject.VertexWired> list2 = new List <RenderObject.VertexWired>(); Texture2D texture = null; if (loadTextures) { foreach (string path in mat.textureMapFiles) { texture = engine.textureManager.FindTextureByPath(path); if (texture != null) { break; } } } if (texture == null) { texture = engine.defaultTexture; } int m = geometry.vertices.Count / (int)geometry.numVertices; for (int j = 0; j < mat.numIndicies; j++) { int pos = (geometry.indices[(int)mat.indiciesStartIndex + j] + (int)mat.vertexStartIndex) * m; list.Add(GetVertex(pos)); list2.Add(GetVector(pos)); } if (mat.numIndicies != 0) { RenderObject o = new RenderObject(engine.device, RenderObject.RenderType.TriListTextured, texture, engine); o.verticesTextured = list.ToArray(); o.InitGeometry(); result.Add(o); RenderObject o2 = new RenderObject(engine.device, RenderObject.RenderType.TriListWired, texture, engine); o2.verticesWired = list2.ToArray(); o2.InitGeometry(); result.Add(o2); } } return(result); }
private void MainForm_Activated(object sender, EventArgs e) { if (init) { return; } BF2FileSystem.Load(); BF2HUDLoader.Init(); Log.WriteLine("Done. Loaded " + (BF2FileSystem.clientFS.Count() + BF2FileSystem.serverFS.Count()) + " files"); RefreshTrees(); engineMeshExplorer = new Engine3D(pic2); engineLevelExplorer = new Engine3D(pic3); BF2Level.engine = engineLevelExplorer; engineLevelExplorer.renderLevel = true; renderTimerMeshes.Enabled = true; renderTimerLevel.Enabled = true; toolStripComboBox1.SelectedIndex = 0; init = true; }
public void ConvertForEngine(Engine3D engine) { ro = new RenderObject(engine.device, RenderObject.RenderType.TriListTextured, engine.defaultTexture, engine); List <RenderObject.VertexTextured> result = new List <RenderObject.VertexTextured>(); uint size = patchSize; foreach (BF2TerrainQuadPatch quad in quads) { List <RenderObject.VertexTextured> list = new List <RenderObject.VertexTextured>(); Vector3 p = quad.position - new Vector3(patchSize, 0, patchSize); p.Y = -1f; uint tdx = 0; // (uint)(quad.y + numPatches / 2) * patchSize; uint tdy = 0; // (uint)(quad.x + numPatches / 2) * patchSize; float tx, tz, dx = primaryWorldScale.X, dz = primaryWorldScale.Z; for (uint j = 0; j < patchSize; j++) { for (uint i = 0; i < patchSize; i++) { tx = i * dx; tz = j * dz; list.Add(new RenderObject.VertexTextured(Helper.ToV4(p + new Vector3(tx, quad.GetHeight(i, j), tz)), Color4.Black, new Vector2((tdx + j) / (float)size, (tdy + i) / (float)size))); list.Add(new RenderObject.VertexTextured(Helper.ToV4(p + new Vector3(tx + dx, quad.GetHeight(i + 1, j), tz)), Color4.Black, new Vector2((tdx + j) / (float)size, (tdy + i + 1) / (float)size))); list.Add(new RenderObject.VertexTextured(Helper.ToV4(p + new Vector3(tx, quad.GetHeight(i, j + 1), tz + dz)), Color4.Black, new Vector2((tdx + j + 1) / (float)size, (tdy + i) / (float)size))); list.Add(new RenderObject.VertexTextured(Helper.ToV4(p + new Vector3(tx, quad.GetHeight(i, j + 1), tz + dz)), Color4.Black, new Vector2((tdx + j + 1) / (float)size, (tdy + i) / (float)size))); list.Add(new RenderObject.VertexTextured(Helper.ToV4(p + new Vector3(tx + dx, quad.GetHeight(i + 1, j), tz)), Color4.Black, new Vector2((tdx + j) / (float)size, (tdy + i + 1) / (float)size))); list.Add(new RenderObject.VertexTextured(Helper.ToV4(p + new Vector3(tx + dx, quad.GetHeight(i + 1, j + 1), tz + dz)), Color4.Black, new Vector2((tdx + j + 1) / (float)size, (tdy + i + 1) / (float)size))); } } for (int i = 0; i < list.Count; i++) { RenderObject.VertexTextured v = list[i]; v.Position.Y *= primaryWorldScale.Y; list[i] = v; } result.AddRange(list); } ro.verticesTextured = result.ToArray(); GC.Collect(); ro.InitGeometry(); }
public List <RenderObject> ConvertForEngine(Engine3D engine, Texture2D texture) { List <RenderObject> result = new List <RenderObject>(); List <RenderObject.VertexTextured> list = new List <RenderObject.VertexTextured>(); List <RenderObject.VertexWired> list2 = new List <RenderObject.VertexWired>(); for (int i = 0; i < numIndicies; i++) { list.Add(vertices[indicies[i]].ToTextured()); list2.Add(vertices[indicies[i]].ToWired()); } RenderObject textured = new RenderObject(engine.device, RenderObject.RenderType.TriListTextured, texture, engine); RenderObject wired = new RenderObject(engine.device, RenderObject.RenderType.TriListWired, null, engine); textured.verticesTextured = list.ToArray(); wired.verticesWired = list2.ToArray(); textured.InitGeometry(); wired.InitGeometry(); result.Add(textured); result.Add(wired); return(result); }