Example #1
0
        //============================================================
        // <T>扫描工作路径,获得对象列表。</T>
        //============================================================
        public override void Scan()
        {
            base.Scan();
            // 设置目录
            _exportFileName = _directoryExprot + "\\tx_" + Code + ".swf";
            // 查询图片
            string resourceDirectory = RContent3dManager.TextureConsole.ResourceDirectory;

            foreach (string filename in RDirectory.ListFiles(_directory))
            {
                if (filename.EndsWith(".jpg"))
                {
                    FFileInfo        info   = new FFileInfo(filename);
                    FDrTextureBitmap bitmap = new FDrTextureBitmap();
                    bitmap.TypeCd   = EDrTexture.Diffuse;
                    bitmap.Source   = info.FullName.Substring(resourceDirectory.Length);
                    bitmap.FileName = info.FullName;
                    bitmap.Length   = info.Info.Length;
                    _bitmaps.Push(bitmap);
                }
            }
            // 加载设置文件
            if (RFile.Exists(_configFileName))
            {
                LoadConfigFile(_configFileName);
            }
        }
Example #2
0
 //============================================================
 // <T>加载配置信息。</T>
 //
 // @param xconfig 配置信息
 //============================================================
 public override void LoadConfig(FXmlNode xconfig)
 {
     foreach (FXmlNode xnode in xconfig.Nodes)
     {
         if (xnode.IsName("Bitmap"))
         {
             // 查找图片对象
             string typeName = null;
             if (xnode.Contains("type"))
             {
                 typeName = xnode.Get("type");
             }
             else
             {
                 typeName = xnode.Get("type_name");
             }
             int typeCd = EDrTexture.Parse(typeName);
             FDrTextureBitmap bitmap = FindByTypeCd(typeCd);
             if (null != bitmap)
             {
                 // 加载设置
                 bitmap.LoadConfig(xnode);
             }
             else
             {
                 RMoCore.TrackConsole.Write(this, "LoadConfig", "Texture bitmap is not exists in config. (type_name={0}, file_name={1})", typeName, _configFileName);
             }
         }
     }
 }
Example #3
0
        //============================================================
        // <T>扫描工作路径,获得对象列表。</T>
        //============================================================
        public void LoadPicture(string fileName)
        {
            FFileInfo        info   = new FFileInfo(fileName);
            FDrTextureBitmap bitmap = new FDrTextureBitmap();

            bitmap.Name     = _name;
            bitmap.TypeCd   = EDrTexture.Diffuse;
            bitmap.Source   = _name;
            bitmap.FileName = info.FullName;
            bitmap.Length   = info.Info.Length;
            _bitmaps.Push(bitmap);
        }
Example #4
0
        //============================================================
        // <T>序列化多层数据。</T>
        //
        // @param output 输出流
        //============================================================
        public void Serialize2(IOutput output)
        {
            base.Serialize(output);
            // 输出位图列表
            output.WriteInt16((short)_bitmaps.Count);
            foreach (FDrTextureBitmap bitmap in _bitmaps)
            {
                bitmap.Serialize(output);
            }
            // 压缩颜色
            int         bitmapCount = 0;
            string      path        = RContent3dManager.TextureConsole.ResourceDirectory;
            FByteStream bytes       = new FByteStream();
            // 合并漫反射和透明纹理
            FDrTextureBitmap bitmapDiffuse = FindByTypeCd(EDrTexture.Diffuse);
            FDrTextureBitmap bitmapAlpha   = FindByTypeCd(EDrTexture.Alpha);

            if ((null != bitmapDiffuse) || (null != bitmapAlpha))
            {
                bitmapCount++;
                bytes.WriteInt8(EDrTexture.PackDiffuse);
                bytes.WriteInt16(0);
                using (FRsBitmapTexture merger = new FRsBitmapTexture()) {
                    if (null != bitmapDiffuse)
                    {
                        merger.LoadFile(path + bitmapDiffuse.Source, EBitmapChannels.RGB);
                    }
                    if (null != bitmapAlpha)
                    {
                        merger.LoadFileChannel(path + bitmapAlpha.Source, EBitmapChannel.R, EBitmapChannels.A);
                    }
                    merger.Serialize(bytes);
                }
            }
            // 合并法线和高光级别纹理
            FDrTextureBitmap bitmapNormal        = FindByTypeCd(EDrTexture.Normal);
            FDrTextureBitmap bitmapSpecularLevel = FindByTypeCd(EDrTexture.SpecularLevel);

            if ((null != bitmapNormal) || (null != bitmapSpecularLevel))
            {
                bitmapCount++;
                bytes.WriteInt8(EDrTexture.PackNormal);
                bytes.WriteInt16(0);
                using (FRsBitmapTexture merger = new FRsBitmapTexture()) {
                    if (null != bitmapNormal)
                    {
                        merger.LoadFile(path + bitmapNormal.Source, EBitmapChannels.RGB);
                    }
                    if (null != bitmapSpecularLevel)
                    {
                        merger.LoadFileChannel(path + bitmapSpecularLevel.Source, EBitmapChannel.R, EBitmapChannels.A);
                    }
                    merger.Serialize(bytes);
                }
            }
            // 合并高光和高度纹理
            FDrTextureBitmap bitmapSpecular = FindByTypeCd(EDrTexture.Specular);
            FDrTextureBitmap bitmapHeight   = FindByTypeCd(EDrTexture.Height);

            if ((null != bitmapSpecular) || (null != bitmapHeight))
            {
                bitmapCount++;
                bytes.WriteInt8(EDrTexture.PackSpecular);
                bytes.WriteInt16(0);
                using (FRsBitmapTexture merger = new FRsBitmapTexture()) {
                    if (null != bitmapSpecular)
                    {
                        merger.LoadFile(path + bitmapSpecular.Source, EBitmapChannels.RGB);
                    }
                    if (null != bitmapHeight)
                    {
                        merger.LoadFileChannel(path + bitmapHeight.Source, EBitmapChannel.R, EBitmapChannels.A);
                    }
                    merger.Serialize(bytes);
                }
            }
            // 合并透射和透射级别纹理
            FDrTextureBitmap bitmapTransmittanceColor = FindByTypeCd(EDrTexture.TransmittanceColor);
            FDrTextureBitmap bitmapTransmittanceLevel = FindByTypeCd(EDrTexture.TransmittanceLevel);

            if ((null != bitmapTransmittanceColor) || (null != bitmapTransmittanceLevel))
            {
                bitmapCount++;
                bytes.WriteInt8(EDrTexture.PackTransmittance);
                bytes.WriteInt16(0);
                using (FRsBitmapTexture merger = new FRsBitmapTexture()) {
                    if (null != bitmapTransmittanceColor)
                    {
                        merger.LoadFile(path + bitmapTransmittanceColor.Source, EBitmapChannels.RGB);
                    }
                    if (null != bitmapTransmittanceLevel)
                    {
                        merger.LoadFileChannel(path + bitmapTransmittanceLevel.Source, EBitmapChannel.R, EBitmapChannels.A);
                    }
                    merger.Serialize(bytes);
                }
            }
            // 合并其他纹理
            FDrTextureBitmap bitmapLight    = FindByTypeCd(EDrTexture.Light);
            FDrTextureBitmap bitmapReflect  = FindByTypeCd(EDrTexture.Reflect);
            FDrTextureBitmap bitmapRefract  = FindByTypeCd(EDrTexture.Refract);
            FDrTextureBitmap bitmapEmissive = FindByTypeCd(EDrTexture.Emissive);

            if ((null != bitmapLight) || (null != bitmapReflect) || (null != bitmapRefract) || (null != bitmapEmissive))
            {
                bitmapCount++;
                bytes.WriteInt8(EDrTexture.PackLight);
                bytes.WriteInt16(0);
                using (FRsBitmapTexture merger = new FRsBitmapTexture()) {
                    if (null != bitmapLight)
                    {
                        merger.LoadFileChannel(path + bitmapLight.Source, EBitmapChannel.R, EBitmapChannels.R);
                    }
                    if (null != bitmapReflect)
                    {
                        merger.LoadFileChannel(path + bitmapReflect.Source, EBitmapChannel.R, EBitmapChannels.G);
                    }
                    if (null != bitmapRefract)
                    {
                        merger.LoadFileChannel(path + bitmapRefract.Source, EBitmapChannel.R, EBitmapChannels.B);
                    }
                    if (null != bitmapEmissive)
                    {
                        merger.LoadFileChannel(path + bitmapEmissive.Source, EBitmapChannel.R, EBitmapChannels.A);
                    }
                    merger.Serialize(bytes);
                }
            }
            // 输出环境纹理
            FDrTextureBitmap bitmapEnvironment = FindByTypeCd(EDrTexture.Environment);

            if (null != bitmapEnvironment)
            {
                bitmapCount++;
                bytes.WriteInt8(EDrTexture.Environment);
                bytes.WriteInt16(0);
                Bitmap bitmap = new Bitmap(path + bitmapEnvironment.Source);
                int    size   = bitmap.Height;
                int    block  = bitmap.Width / bitmap.Height;
                using (Bitmap cubeBitmap = new Bitmap(bitmap.Height, bitmap.Width, PixelFormat.Format32bppArgb)) {
                    cubeBitmap.SetResolution(bitmap.HorizontalResolution, bitmap.VerticalResolution);
                    using (Graphics g = Graphics.FromImage(cubeBitmap)) {
                        for (int n = 0; n < 6; n++)
                        {
                            g.DrawImage(bitmap,
                                        new Rectangle(0, size * n, size, size),
                                        new Rectangle(size * n, 0, size, size),
                                        GraphicsUnit.Pixel);
                        }
                    }
                    using (FRsBitmapTexture merger = new FRsBitmapTexture(cubeBitmap)) {
                        merger.Serialize(bytes);
                    }
                }
            }
            // 输出纹理列表
            output.WriteInt16((sbyte)bitmapCount);
            output.WriteBytes(bytes.Memory, 0, bytes.Length);
        }
Example #5
0
        //============================================================
        // <T>序列化多层数据。</T>
        //
        // @param output 输出流
        //============================================================
        public override void SerializeIndex(IOutput output)
        {
            base.Serialize(output);
            // 输出位图列表
            output.WriteInt16((short)_bitmaps.Count);
            foreach (FDrTextureBitmap bitmap in _bitmaps)
            {
                bitmap.Serialize(output);
            }
            // 压缩颜色
            int         bitmapCount = 0;
            string      path        = RContent3dManager.TextureConsole.ResourceDirectory;
            FByteStream bytes       = new FByteStream();
            // 合并漫反射和透明纹理
            FDrTextureBitmap bitmapDiffuse = FindByTypeCd(EDrTexture.Diffuse);
            FDrTextureBitmap bitmapAlpha   = FindByTypeCd(EDrTexture.Alpha);

            if ((null != bitmapDiffuse) || (null != bitmapAlpha))
            {
                bitmapCount++;
                bytes.WriteInt8(EDrTexture.PackDiffuse);
                bytes.WriteInt16(0);
                using (FPngMerger merger = new FPngMerger()) {
                    if (null != bitmapDiffuse)
                    {
                        merger.LoadColorFile(path + bitmapDiffuse.Source);
                    }
                    if (null != bitmapAlpha)
                    {
                        merger.LoadAlphaFile(path + bitmapAlpha.Source);
                    }
                    Bitmap bitmap = merger.Merge();
                    using (FIndexBitmap resource = new FIndexBitmap(bitmap)) {
                        resource.OptionAlpha = true;
                        resource.SerializeIndexed(bytes, EDrTexture.SplitColorCount, EDrTexture.SplitPixelCount);
                    }
                }
            }
            // 合并法线和高光级别纹理
            FDrTextureBitmap bitmapNormal        = FindByTypeCd(EDrTexture.Normal);
            FDrTextureBitmap bitmapSpecularLevel = FindByTypeCd(EDrTexture.SpecularLevel);

            if ((null != bitmapNormal) || (null != bitmapSpecularLevel))
            {
                bitmapCount++;
                bytes.WriteInt8(EDrTexture.PackNormal);
                bytes.WriteInt16(0);
                using (FPngMerger merger = new FPngMerger()) {
                    if (null != bitmapNormal)
                    {
                        merger.LoadColorFile(path + bitmapNormal.Source);
                    }
                    if (null != bitmapSpecularLevel)
                    {
                        merger.LoadAlphaFile(path + bitmapSpecularLevel.Source);
                    }
                    Bitmap bitmap = merger.Merge();
                    using (FIndexBitmap resource = new FIndexBitmap(bitmap)) {
                        resource.OptionAlpha = true;
                        resource.SerializeIndexed(bytes, EDrTexture.SplitColorCount, EDrTexture.SplitPixelCount);
                    }
                }
            }
            // 合并高光和高度纹理
            FDrTextureBitmap bitmapSpecular = FindByTypeCd(EDrTexture.Specular);
            FDrTextureBitmap bitmapHeight   = FindByTypeCd(EDrTexture.Height);

            if ((null != bitmapSpecular) || (null != bitmapHeight))
            {
                bitmapCount++;
                bytes.WriteInt8(EDrTexture.PackSpecular);
                bytes.WriteInt16(0);
                using (FPngMerger merger = new FPngMerger()) {
                    if (null != bitmapSpecular)
                    {
                        merger.LoadColorFile(path + bitmapSpecular.Source);
                    }
                    if (null != bitmapHeight)
                    {
                        merger.LoadAlphaFile(path + bitmapHeight.Source);
                    }
                    Bitmap bitmap = merger.Merge();
                    using (FIndexBitmap resource = new FIndexBitmap(bitmap)) {
                        resource.OptionAlpha = true;
                        resource.SerializeIndexed(bytes, EDrTexture.SplitColorCount, EDrTexture.SplitPixelCount);
                    }
                }
            }
            // 合并透射和透射级别纹理
            FDrTextureBitmap bitmapTransmittanceColor = FindByTypeCd(EDrTexture.TransmittanceColor);
            FDrTextureBitmap bitmapTransmittanceLevel = FindByTypeCd(EDrTexture.TransmittanceLevel);

            if ((null != bitmapTransmittanceColor) || (null != bitmapTransmittanceLevel))
            {
                bitmapCount++;
                bytes.WriteInt8(EDrTexture.PackTransmittance);
                bytes.WriteInt16(0);
                using (FPngMerger merger = new FPngMerger()) {
                    if (null != bitmapTransmittanceColor)
                    {
                        merger.LoadColorFile(path + bitmapTransmittanceColor.Source);
                    }
                    if (null != bitmapTransmittanceLevel)
                    {
                        merger.LoadAlphaFile(path + bitmapTransmittanceLevel.Source);
                    }
                    Bitmap bitmap = merger.Merge();
                    using (FIndexBitmap resource = new FIndexBitmap(bitmap)) {
                        resource.OptionAlpha = true;
                        resource.SerializeIndexed(bytes, EDrTexture.SplitColorCount, EDrTexture.SplitPixelCount);
                    }
                }
            }
            // 合并其他纹理
            FDrTextureBitmap bitmapLight    = FindByTypeCd(EDrTexture.Light);
            FDrTextureBitmap bitmapReflect  = FindByTypeCd(EDrTexture.Reflect);
            FDrTextureBitmap bitmapRefract  = FindByTypeCd(EDrTexture.Refract);
            FDrTextureBitmap bitmapEmissive = FindByTypeCd(EDrTexture.Emissive);

            if ((null != bitmapLight) || (null != bitmapReflect) || (null != bitmapRefract) || (null != bitmapEmissive))
            {
                bitmapCount++;
                bytes.WriteInt8(EDrTexture.PackLight);
                bytes.WriteInt16(0);
                using (FPngMerger merger = new FPngMerger()) {
                    if (null != bitmapLight)
                    {
                        merger.LoadRFile(path + bitmapLight.Source);
                    }
                    if (null != bitmapReflect)
                    {
                        merger.LoadGFile(path + bitmapReflect.Source);
                    }
                    if (null != bitmapRefract)
                    {
                        merger.LoadBFile(path + bitmapRefract.Source);
                    }
                    if (null != bitmapEmissive)
                    {
                        merger.LoadAlphaFile(path + bitmapEmissive.Source);
                    }
                    Bitmap bitmap = merger.MergeAll();
                    using (FIndexBitmap resource = new FIndexBitmap(bitmap)) {
                        resource.OptionAlpha = true;
                        resource.SerializeIndexed(bytes, EDrTexture.SplitColorCount, EDrTexture.SplitPixelCount);
                    }
                }
            }
            // 输出环境纹理
            FDrTextureBitmap bitmapEnvironment = FindByTypeCd(EDrTexture.Environment);

            if (null != bitmapEnvironment)
            {
                bitmapCount++;
                bytes.WriteInt8(EDrTexture.Environment);
                bytes.WriteInt16(0);
                Bitmap bitmap     = new Bitmap(path + bitmapEnvironment.Source);
                int    size       = bitmap.Height;
                int    block      = bitmap.Width / bitmap.Height;
                Bitmap cubeBitmap = new Bitmap(bitmap.Height, bitmap.Width, PixelFormat.Format32bppArgb);
                using (Graphics g = Graphics.FromImage(cubeBitmap)) {
                    for (int n = 0; n < 6; n++)
                    {
                        g.DrawImage(bitmap,
                                    new Rectangle(0, size * n, size, size),
                                    new Rectangle(size * n, 0, size, size),
                                    GraphicsUnit.Pixel);
                    }
                }
                using (FIndexBitmap resource = new FIndexBitmap(cubeBitmap)) {
                    resource.OptionAlpha = true;
                    resource.SerializeIndexed(bytes, EDrTexture.SplitColorCount, EDrTexture.SplitPixelCount);
                }
                cubeBitmap.Dispose();
            }
            // 输出纹理列表
            output.WriteInt16((sbyte)bitmapCount);
            output.WriteBytes(bytes.Memory, 0, bytes.Length);
        }
Example #6
0
        //============================================================
        // <T>扫描工作路径,获得对象列表。</T>
        //============================================================
        public override void Scan()
        {
            base.Scan();
            // 设置目录
            _exportFileName = _directoryExprot + "\\tx_" + Code + ".swf";
            // 查询图片
            string resourceDirectory = RContent3dManager.TextureConsole.ResourceDirectory;

            foreach (string filename in RDirectory.ListFiles(_directory))
            {
                if (filename.EndsWith("layer.merge.jpg"))
                {
                    // 加入和冰层
                    FFileInfo        info   = new FFileInfo(filename);
                    FDrTextureBitmap bitmap = new FDrTextureBitmap();
                    bitmap.TypeCd   = EDrTexture.LayerMerge;
                    bitmap.Source   = info.FullName.Substring(resourceDirectory.Length);
                    bitmap.FileName = info.FullName;
                    bitmap.Length   = info.Info.Length;
                    _bitmaps.Push(bitmap);
                }
            }
            foreach (string filename in RDirectory.ListFiles(_directory))
            {
                if (filename.EndsWith("layer.merge.jpg"))
                {
                    continue;
                }
                else if (filename.EndsWith(".jpg") && !filename.EndsWith(".m.jpg"))
                {
                    // 加入纹理层
                    FFileInfo        info   = new FFileInfo(filename);
                    FDrTextureBitmap bitmap = new FDrTextureBitmap();
                    if (filename.EndsWith("layer.1.jpg"))
                    {
                        bitmap.TypeCd = EDrTexture.Layer1;
                    }
                    else if (filename.EndsWith("layer.2.jpg"))
                    {
                        bitmap.TypeCd = EDrTexture.Layer2;
                    }
                    else if (filename.EndsWith("layer.3.jpg"))
                    {
                        bitmap.TypeCd = EDrTexture.Layer3;
                    }
                    else if (filename.EndsWith("layer.4.jpg"))
                    {
                        bitmap.TypeCd = EDrTexture.Layer4;
                    }
                    bitmap.Source   = info.FullName.Substring(resourceDirectory.Length);
                    bitmap.FileName = info.FullName;
                    bitmap.Length   = info.Info.Length;
                    _bitmaps.Push(bitmap);
                }
            }
            // 加载设置文件
            if (RFile.Exists(_configFileName))
            {
                LoadConfigFile(_configFileName);
            }
        }