Esempio n. 1
0
        public static void KCL2OBJ(string fname, KCL kcl)
        {
            int FaceShift = 1;

            using (StreamWriter f = new StreamWriter(fname))
            {
                foreach (KCL.KCLModel mdl in kcl.models)
                {
                    List <Vector3> VerticesN = new List <Vector3>(); //a lot of normals are often shared

                    f.WriteLine($"o {mdl.Text}");
                    foreach (KCL.Vertex vtx in mdl.vertices)
                    {
                        f.WriteLine($"v {vtx.pos.X} {vtx.pos.Y} {vtx.pos.Z}");
                    }
                    foreach (KCL.Vertex vtx in mdl.vertices)
                    {
                        f.WriteLine($"vn {vtx.nrm.X} {vtx.nrm.Y} {vtx.nrm.Z}");
                    }
                    f.WriteLine($"usemtl None");
                    f.WriteLine($"s off");

                    var vert = mdl.CreateDisplayVertices();
                    for (int i = 0; i < mdl.display.Length; i++)
                    {
                        int[] verts = new int[3] {
                            (int)mdl.display[i++], (int)mdl.display[i++], (int)mdl.display[i]
                        };
                        int[] normals = new int[3] {
                            VerticesN.IndexOf(mdl.vertices[verts[0]].nrm),
                            VerticesN.IndexOf(mdl.vertices[verts[1]].nrm),
                            VerticesN.IndexOf(mdl.vertices[verts[2]].nrm)
                        };

                        f.WriteLine($"f {verts[0] + FaceShift}/{verts[0] + FaceShift}/{normals[0] + FaceShift} {verts[1] + FaceShift}/{verts[1] + FaceShift}/{normals[1] + FaceShift} {verts[2] + FaceShift}/{verts[2] + FaceShift}/{normals[2] + FaceShift}");
                    }
                    FaceShift += vert.Count;
                }
            }
        }
Esempio n. 2
0
        public void Render(Camera camera, int depthMap, Matrix4 lightMatrix, Vector2 screenDimensions, bool drawShadow = false)
        {
            if (!Checked)
            {
                return;
            }

            Shader shader;

            // 3DS MBN
            shader = OpenTKSharedResources.shaders["Mbn"];
            shader.UseProgram();
            SetMbnUniforms(camera, shader);

            // Melee DAT
            shader = OpenTKSharedResources.shaders["Dat"];
            shader.UseProgram();
            SetDatUniforms(shader);

            if (BCH != null)
            {
                foreach (BCH_Model mo in BCH.Models.Nodes)
                {
                    mo.Render(camera.MvpMatrix);
                }
            }

            if (DatMelee != null && OpenTKSharedResources.shaders["Dat"].ProgramCreatedSuccessfully)
            {
                DatMelee.Render(camera.MvpMatrix);
            }

            LightColor diffuseColor = Runtime.lightSetParam.characterDiffuse.diffuseColor;
            LightColor ambientColor = Runtime.lightSetParam.characterDiffuse.ambientColor;

            if (KCL != null && OpenTKSharedResources.shaders["KCL"].ProgramCreatedSuccessfully)
            {
                shader = OpenTKSharedResources.shaders["KCL"];
                shader.UseProgram();

                shader.SetVector3("difLightColor", diffuseColor.R, diffuseColor.G, diffuseColor.B);
                shader.SetVector3("ambLightColor", ambientColor.R, ambientColor.G, ambientColor.B);

                KCL.Render(camera.MvpMatrix);
            }

            if (BFRES != null && OpenTKSharedResources.shaders["BFRES"].ProgramCreatedSuccessfully &&
                OpenTKSharedResources.shaders["BFRES_PBR"].ProgramCreatedSuccessfully)
            {
                if (Runtime.renderPhysicallyBasedRendering == true)
                {
                    shader = OpenTKSharedResources.shaders["BFRES_PBR"];
                }
                else
                {
                    shader = OpenTKSharedResources.shaders["BFRES"];
                }

                shader.UseProgram();

                shader.SetVector3("difLightColor", diffuseColor.R, diffuseColor.G, diffuseColor.B);
                shader.SetVector3("ambLightColor", ambientColor.R, ambientColor.G, ambientColor.B);

                Matrix4 invertedCamera = camera.MvpMatrix.Inverted();
                Vector3 lightDirection = new Vector3(0f, 0f, -1f);

                //Todo. Maybe change direction via AAMP file (configs shader data)
                shader.SetVector3("lightDirection", Vector3.TransformNormal(lightDirection, invertedCamera).Normalized());
                shader.SetVector3("specLightDirection", Vector3.TransformNormal(lightDirection, invertedCamera).Normalized());
                shader.SetVector3("difLightDirection", Vector3.TransformNormal(lightDirection, invertedCamera).Normalized());

                shader.SetInt("debugOption", (int)Runtime.uvChannel);

                // This cube map is for a quick test.
                shader.SetTexture("cmap", RenderTools.dummyTextures[NUD.DummyTextures.StageMapHigh].Id, TextureTarget.TextureCubeMap, 2);

                BFRES.Render(camera.MvpMatrix);
            }

            if (NUD != null && OpenTKSharedResources.shaders["Nud"].ProgramCreatedSuccessfully && OpenTKSharedResources.shaders["NudDebug"].ProgramCreatedSuccessfully)
            {
                // Choose the appropriate shader.
                if (drawShadow)
                {
                    shader = OpenTKSharedResources.shaders["Shadow"];
                }
                else if (Runtime.renderType != Runtime.RenderTypes.Shaded)
                {
                    shader = OpenTKSharedResources.shaders["NudDebug"];
                }
                else
                {
                    shader = OpenTKSharedResources.shaders["Nud"];
                }

                shader.UseProgram();

                // Matrices.
                Matrix4 lightMatrixRef = lightMatrix;
                shader.SetMatrix4x4("lightMatrix", ref lightMatrixRef);
                SetCameraMatrixUniforms(camera, shader);

                SetRenderSettingsUniforms(shader);
                SetLightingUniforms(shader, camera);

                shader.SetInt("renderType", (int)Runtime.renderType);
                shader.SetInt("debugOption", (int)Runtime.uvChannel);
                shader.SetBoolToInt("drawShadow", Runtime.drawModelShadow);

                shader.SetTexture("depthMap", depthMap, TextureTarget.Texture2D, 14);

                SetElapsedDirectUvTime(shader);

                NUD.Render(VBN, camera, drawShadow, Runtime.drawNudColorIdPass);
            }
        }