Exemplo n.º 1
0
        public void DrawSkybox()
        {
            if (SkyboxModel == null)
            {
                SkyboxModel       = new libTechModel();
                SkyboxModel.Scale = new Vector3(5000);

                libTechMesh CubeMesh = new libTechMesh(FishGfx.Formats.Obj.Load("content/models/cube.obj").First().Vertices.ToArray(), Engine.GetMaterial("skybox"));
                CubeMesh.SetLabel("Skybox Cube");

                SkyboxModel.AddMesh(CubeMesh);
            }

            RenderState RS = Gfx.PeekRenderState();

            RS.EnableCullFace  = false;
            RS.EnableDepthMask = false;
            RS.EnableDepthTest = true;
            RS.EnableBlend     = false;
            Gfx.PushRenderState(RS);

            SkyboxModel.Position = Engine.Camera3D.Position;
            SkyboxModel.DrawOpaque();

            Gfx.PopRenderState();
        }
Exemplo n.º 2
0
        public static libTechMap LoadMap(Stream BSPStream)
        {
            Q3BSP Map = Q3BSP.FromStream(BSPStream);

            libTechMap Q3Map = new libTechMap();
            Dictionary <int, List <Vertex3> > TexturedMeshes = new Dictionary <int, List <Vertex3> >();

            foreach (var FaceIdx in GetFaceIndices(Map))
            {
                Q3BSPFace Face = Map.Faces[FaceIdx];

                if (!TexturedMeshes.ContainsKey(Face.Texture))
                {
                    TexturedMeshes.Add(Face.Texture, new List <Vertex3>());
                }

                if (Face.Type == FaceType.Polygon || Face.Type == FaceType.Mesh)
                {
                    Vertex3[] Vertices = new Vertex3[Face.NVerts];
                    for (int VertOffset = 0; VertOffset < Face.NVerts; VertOffset++)
                    {
                        Vertices[VertOffset] = Map.Vertices[Face.Vert + VertOffset].ToVertex3();
                    }

                    for (int MeshVertOffset = 0; MeshVertOffset < Face.NMeshVerts; MeshVertOffset++)
                    {
                        TexturedMeshes[Face.Texture].Add(Vertices[Map.MeshVertices[Face.MeshVert + MeshVertOffset]]);
                    }
                }
            }

            string[] TextureNames = Map.Textures.Select(T => T.GetName()).ToArray();

            libTechModel Model = new libTechModel();

            Q3Map.AddModel(Model);

            foreach (var KV in TexturedMeshes)
            {
                string TexName = TextureNames[KV.Key];

                if (TexName == "textures/lun3dm5/lblusky2")
                {
                    continue;
                }

                Model.AddMesh(new libTechMesh(KV.Value.ToArray().Reverse().ToArray(), Engine.GetMaterial(TexName)));
            }

            return(Q3Map);
        }