Beispiel #1
0
        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);
        }
Beispiel #2
0
 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);
     }
 }
Beispiel #3
0
        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);
        }
Beispiel #4
0
 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;
 }
Beispiel #5
0
        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();
        }
Beispiel #6
0
        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);
        }