Atf 的使用方法(一)-转换和加载

本文介绍了一种在A3D中批量转换ATF纹理的方法,并提供了Flex6图形界面转换器的代码示例。同时,详细讲解了如何在A3D源代码中使用这些转换后的ATF纹理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经过对A3d的源代码的阅读后 ,一直搞不定的aft有了结果,特拿出分享,希望对大家有用。

首先呢 要有atf图片   这个是要经历两个转换过程   首先在photoshop中转换成dds . 如果是多张需要做批处理脚本
1.jpg

然后制作动作
2.jpg
这个地方如果不清楚可以查阅ps的使用说明。

然后是使用dds2atf进行批量atf转换

核心的语句是在cmd 窗中 有如下语法。


3.jpg

我采用的是比较高的压缩

举例代码   
D:\dds2atf\dds2atf.exe -4 -q 180 -f 15 -i  D:\dds2atf\ma01.dds -o  D:\dds2atf\map01.atf'

atf的批量转换需要写一个图形界面转换器,这样比较方便。

在flex6中新建air工程,代码如下。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
  3.                                            xmlns:s="library://ns.adobe.com/flex/spark"
  4.                                            xmlns:mx="library://ns.adobe.com/flex/mx"
  5.                                            width="800" height="600" creationComplete="init()">
  6.        
  7.         <fx:Script>
  8.                 <![CDATA[
  9.                         import flash.desktop.Clipboard;
  10.                         import flash.desktop.ClipboardFormats;
  11.                         import flash.desktop.NativeProcess;
  12.                         import flash.desktop.NativeProcessStartupInfo;
  13.                         import flash.display.Bitmap;
  14.                         import flash.display.BitmapData;
  15.                         import flash.events.Event;
  16.                         import flash.events.EventDispatcher;
  17.                         import flash.events.MouseEvent;
  18.                         import flash.events.NativeProcessExitEvent;
  19.                         import flash.filesystem.File;
  20.                        
  21.                         import spark.components.Image;
  22.                         import mx.core.UIComponent
  23.                                 import mx.controls.Alert;
  24.                         var _shotComplete:Event;
  25.                         var _file:File;
  26.                         var _nativeProcessStartupInfo:NativeProcessStartupInfo;
  27.                         var _process:NativeProcess;
  28.                         var _bitmapData:BitmapData;
  29.                         var _bitmap:Bitmap;
  30.                        
  31.                         protected var args:Vector.<String> = new Vector.<String>;
  32.                         protected function init():void{
  33.                        
  34.                                 for (var i:int=1;i<523;i++)
  35.                                 {
  36.                                         //  trace(        '[Embed(source="../src/pngout/map'+i+'.png")] static private const map'+i+':Class; ') ;
  37.                                        
  38.                                         //trace ('mapi'+i+',');
  39.                                        
  40.                                 }
  41.                          
  42.                                
  43.                                 _file = File.applicationDirectory.resolvePath("C:\\Windows\\System32\\cmd.exe");
  44.                                 trace(_file.nativePath);
  45.                                 _nativeProcessStartupInfo = new NativeProcessStartupInfo();
  46.                                 _nativeProcessStartupInfo.executable = _file;
  47.                                
  48.                        
  49.                                 _nativeProcessStartupInfo.arguments = args;

  50.                                
  51.                                 _process = new NativeProcess();
  52.                         _process.start(_nativeProcessStartupInfo);
  53.                         //        _process.standardInput.writeUTFBytes(args + "\n");
  54.                                
  55.                                
  56.                                
  57.        
  58.                                
  59.                                
  60.                 _process.addEventListener(NativeProcessExitEvent.EXIT,onExit);
  61.                        
  62.                 _process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA,onStandardOutputData);
  63.                 _process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, onError);
  64.                        
  65.                         }
  66.                        
  67.                         private function onError(event:ProgressEvent):void {
  68.                                
  69.                                 var process:NativeProcess = event.target as NativeProcess;
  70.                                 var data:String = process.standardError.readUTFBytes(process.standardError.bytesAvailable);
  71.                                 lbl.text += data;
  72.                                
  73.                         }
  74.                        
  75.                         private function onStandardOutputData(event:ProgressEvent):void
  76.                         {
  77.                                 var process:NativeProcess = event.target as NativeProcess;
  78.                                 var data:String = process.standardOutput.readUTFBytes(process.standardOutput.bytesAvailable);
  79.                                 lbl.text += data
  80.                         }


  81.                        
  82.                         function onExit(e:NativeProcessExitEvent):void
  83.                         {
  84.                                
  85.                                 Alert.show("Execution Complete");
  86.                                
  87.                                
  88.                                
  89.                                
  90.                                 /* if (Clipboard.generalClipboard.hasFormat(ClipboardFormats.BITMAP_FORMAT))
  91.                                 {
  92.                                         _bitmapData = Clipboard.generalClipboard.getData(ClipboardFormats.BITMAP_FORMAT) as BitmapData;
  93.                                         _bitmap = new Bitmap(_bitmapData);
  94.                                        
  95.                                        
  96.                                         var dd:MovieClip=new MovieClip();
  97.                                        
  98.                                         dd.addChild(_bitmap);
  99.                                        
  100.                        
  101.                                        
  102.                                

  103.                                         var myMC:UIComponent=new UIComponent();
  104.                                        
  105.                                         myMC.addChild(dd)
  106.                        
  107.                                    this.addElement(myMC);
  108.                                 } */
  109.                                  
  110.                         }
  111.                        
  112.                        
  113.                        
  114.                         protected function button1_clickHandler(event:MouseEvent):void
  115.                         {
  116.                                 for (var i:int=0;i<77;i++)
  117.                                 {
  118.                                        
  119.                                        
  120.                                 //        args.push(' D:\\dds2atf\\dds2atf.exe  -4 -q 180 -f 15 -i  D:\\dds2atf\\'+i+'.dds -o  D:\\dds2atf\\'+i+'.atf');
  121.                                        
  122.                                         args.push(' D:\\dds2atf\\dds2atf.exe -4 -q 180 -f 15 -i  D:\\dds2atf\\map'+i.toString()+'.dds -o  D:\\dds2atf\\map'+i.toString()+'.atf' );
  123.                                         _process.standardInput.writeUTFBytes(args + "\n" );
  124.                                         args.pop();
  125.                                 }
  126.                                
  127.                                
  128.                         }
  129.                 ]]>
  130.         </fx:Script>
  131.        
  132.         <fx:Declarations>
  133.                 <!-- 将非可视元素(例如服务、值对象)放在此处 -->
  134.         </fx:Declarations>
  135.         <s:Button x="126" y="516" label="按钮" click="button1_clickHandler(event)"/>
  136.         <s:TextArea id="lbl" x="296" y="169" width="494" height="387"/>
  137. </s:WindowedApplication>
复制代码
这样就能方便的完成atf的批量转换。

下面就是在a3d中使用atf了。喝口水继续。

首先是嵌入资源
[Embed ("map50.atf", mimeType = "application/octet-stream") ] private static const map50:Class;
建立ATFTextureResource
var  levelResourceatf:ATFTextureResource=new ATFTextureResource(new map50() as ByteArray);
修改a3d源代码
ATFTextureResource.as
57行

private function uploadInternal(context3D:Context3D, async:Boolean = false, callback:Function = null):void {
   if (_texture != null) _texture.dispose();
   if (data != null) {
   
    data.position = 6;
    trace(type);
    var type:uint = data.readByte();
    var format:String;
   switch (type & 0x7F) {
     case 0:
      format = Context3DTextureFormat.BGRA;
      break;
     case 1:
      format = Context3DTextureFormat.BGRA;
      break;
     case 2:
      format = Context3DTextureFormat.COMPRESSED;
      break;
          case 3:   /////主要是增加了这个分支
        format = Context3DTextureFormat.COMPRESSED;
      break;
     
    }
   
调用代码为
var  levelResourceatf:ATFTextureResource=new ATFTextureResource(new map50() as ByteArray);
       levelResourceatf.upload(stage3D.context3D);

  var levelMaterial:TextureMaterial = new TextureMaterial(levelResourceatf);
然后使用这个levelMaterial 赋予物体。
level.setMaterialToAllSurfaces(levelMaterial);

atf可用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值