Exemplo n.º 1
0
 void CreatePhong(Fx.ColladaPhong phong, H1.Tags.shader_transparent_chicago_group shader)
 {
     if (shader.Maps.Count > 0 && !shader.Maps[0].Map.Datum.IsNull)
     {
         phong.Diffuse.Color   = null;
         phong.Diffuse.Texture = CreateTexture(shader.Maps[0].Map.Datum, 0);
     }
 }
Exemplo n.º 2
0
 void CreatePhong(Fx.ColladaPhong phong, H1.Tags.shader_transparent_glass_group shader)
 {
     if (shader.DiffuseMap.Datum != DatumIndex.Null)
     {
         phong.Diffuse.Color   = null;
         phong.Diffuse.Texture = CreateTexture(shader.DiffuseMap.Datum, 0);
     }
 }
Exemplo n.º 3
0
        void CreatePhong(Fx.ColladaPhong phong, H1.Tags.shader_model_group shader)
        {
            if (shader.BaseMap.Datum != DatumIndex.Null)
            {
                phong.Diffuse.Color   = null;
                phong.Diffuse.Texture = CreateTexture(shader.BaseMap.Datum, 0);
            }

            phong.Specular.Color.SetColor(shader.PerpendicularTintColor, 1);
        }
        /// <summary>
        /// Creates a phong definition using values from a shader tag
        /// </summary>
        /// <param name="shader_datum">DatumIndex of the shader to create a phong definition from</param>
        /// <returns></returns>
        protected override Fx.ColladaPhong CreatePhong(DatumIndex shader_datum)
        {
            Managers.TagManager shader_man = tagIndex[shader_datum];

            // get the shader tag definition
            H2.Tags.shader_group shader = GetTagDefinition <H2.Tags.shader_group>(
                shader_datum, shader_man.GroupTag, Blam.Halo1.TagGroups.shdr);

            Fx.ColladaPhong phong = CreateDefaultPhong();

            H2.Tags.global_shader_parameter_block block;

            phong.Diffuse.Color.SetColor(1, 1, 1, 1);
            phong.Shininess.Float.Value = 30.0f;

            // set up the effects variables with those from the shader
            if ((block = FindParameter(shader, "emissive_color")) != null)
            {
                phong.Emission       = new Fx.ColladaCommonColorOrTextureType();
                phong.Emission.Color = new Core.ColladaColor(block.ConstColor, 1.0f);
            }

            if ((block = FindParameter(shader, "base_map")) != null && IsDatumValid(block.Bitmap.Datum))
            {
                phong.Diffuse.Color   = null;
                phong.Diffuse.Texture = CreateTexture(block.Bitmap.Datum, 0);
            }
            else if ((block = FindParameter(shader, "diffuse_color")) != null)
            {
                phong.Diffuse.Color.SetColor(block.ConstColor, 1.0f);
            }

            if ((block = FindParameter(shader, "specular_color")) != null)
            {
                phong.Specular.Color.SetColor(block.ConstColor, 1.0f);
            }

            if ((block = FindParameter(shader, "alpha_test_map")) != null && IsDatumValid(block.Bitmap.Datum))
            {
                phong.Transparent.Color   = null;
                phong.Transparent.Texture = CreateTexture(block.Bitmap.Datum, 0);
                phong.Transparent.Opaque  = Enums.ColladaFXOpaqueEnum.A_ONE;
            }

            return(phong);
        }
Exemplo n.º 5
0
        void CreatePhong(Fx.ColladaPhong phong, H1.Tags.shader_transparent_chicago_extended_group shader)
        {
            DatumIndex bitmap_datum = DatumIndex.Null;

            if (shader._4StageMaps.Count > 0)
            {
                bitmap_datum = shader._4StageMaps[0].Map.Datum;
            }
            else if (shader._2StageMaps.Count > 0)
            {
                bitmap_datum = shader._2StageMaps[0].Map.Datum;
            }

            if (bitmap_datum != DatumIndex.Null)
            {
                phong.Diffuse.Color   = null;
                phong.Diffuse.Texture = CreateTexture(bitmap_datum, 0);
            }
        }
Exemplo n.º 6
0
        void CreatePhong(Fx.ColladaPhong phong, H1.Tags.shader_environment_group shader)
        {
            if (shader.BaseMap.Datum == DatumIndex.Null)
            {
                phong.Diffuse.Color.SetColor(shader.MaterialColor, 1);
            }
            else
            {
                phong.Diffuse.Color   = null;
                phong.Diffuse.Texture = CreateTexture(shader.BaseMap.Datum, 0);
            }

            if (shader.Flags.Test(1) && (shader.BumpMap.Datum != DatumIndex.Null))
            {
                phong.Transparent.Color   = null;
                phong.Transparent.Texture = CreateTexture(shader.BumpMap.Datum, 0);
                phong.Transparent.Opaque  = Enums.ColladaFXOpaqueEnum.A_ONE;
            }

            phong.Specular.Color.SetColor(shader.PerpendicularColor, 1);
        }
Exemplo n.º 7
0
        /// <summary>
        /// Creates a phong definition using values from a shader tag
        /// </summary>
        /// <param name="shader_datum">DatumIndex of the shader to create a phong definition from</param>
        /// <returns></returns>
        protected override Fx.ColladaPhong CreatePhong(DatumIndex shader_datum)
        {
            Managers.TagManager shader_man = tagIndex[shader_datum];

            H1.Tags.shader_group shader_base = GetTagDefinition <H1.Tags.shader_group>(
                shader_datum, shader_man.GroupTag, Blam.Halo1.TagGroups.shdr);

            Fx.ColladaPhong phong = CreateDefaultPhong();

            phong.Emission       = new Fx.ColladaCommonColorOrTextureType();
            phong.Emission.Color = new Core.ColladaColor(shader_base.RadiosityEmittedLightColor, 1.0f);
            phong.Diffuse.Color.SetColor(1, 1, 1, 1);
            phong.Shininess.Float.Value = 30.0f;

            shader_base = null;

            if (shader_man.GroupTag == Blam.Halo1.TagGroups.senv)
            {
                var shader_senv = GetTagDefinition <H1.Tags.shader_environment_group>(
                    shader_datum, shader_man.GroupTag, Blam.Halo1.TagGroups.senv);

                CreatePhong(phong, shader_senv);
            }
            else if (shader_man.GroupTag == Blam.Halo1.TagGroups.soso)
            {
                var shader_soso = GetTagDefinition <H1.Tags.shader_model_group>(
                    shader_datum, shader_man.GroupTag, Blam.Halo1.TagGroups.soso);

                CreatePhong(phong, shader_soso);
            }
            else if (shader_man.GroupTag == Blam.Halo1.TagGroups.schi)
            {
                var shader_schi = GetTagDefinition <H1.Tags.shader_transparent_chicago_group>(
                    shader_datum, shader_man.GroupTag, Blam.Halo1.TagGroups.schi);

                CreatePhong(phong, shader_schi);
            }
            else if (shader_man.GroupTag == Blam.Halo1.TagGroups.scex)
            {
                var shader_scex = GetTagDefinition <H1.Tags.shader_transparent_chicago_extended_group>(
                    shader_datum, shader_man.GroupTag, Blam.Halo1.TagGroups.scex);

                CreatePhong(phong, shader_scex);
            }
            else if (shader_man.GroupTag == Blam.Halo1.TagGroups.sotr)
            {
                var shader_sotr = GetTagDefinition <H1.Tags.shader_transparent_generic_group>(
                    shader_datum, shader_man.GroupTag, Blam.Halo1.TagGroups.sotr);

                CreatePhong(phong, shader_sotr);
            }
            else if (shader_man.GroupTag == Blam.Halo1.TagGroups.sgla)
            {
                var shader_sgla = GetTagDefinition <H1.Tags.shader_transparent_glass_group>(
                    shader_datum, shader_man.GroupTag, Blam.Halo1.TagGroups.sgla);

                CreatePhong(phong, shader_sgla);
            }

            return(phong);
        }