经过对A3d的源代码的阅读后 ,一直搞不定的aft有了结果,特拿出分享,希望对大家有用。
首先呢 要有atf图片 这个是要经历两个转换过程 首先在photoshop中转换成dds . 如果是多张需要做批处理脚本

然后制作动作

这个地方如果不清楚可以查阅ps的使用说明。
然后是使用dds2atf进行批量atf转换
核心的语句是在cmd 窗中 有如下语法。

我采用的是比较高的压缩
举例代码
D:\dds2atf\dds2atf.exe -4 -q 180 -f 15 -i D:\dds2atf\ma01.dds -o D:\dds2atf\map01.atf'
atf的批量转换需要写一个图形界面转换器,这样比较方便。
在flex6中新建air工程,代码如下。
复制代码
这样就能方便的完成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可用。
首先呢 要有atf图片 这个是要经历两个转换过程 首先在photoshop中转换成dds . 如果是多张需要做批处理脚本
然后制作动作
这个地方如果不清楚可以查阅ps的使用说明。
然后是使用dds2atf进行批量atf转换
核心的语句是在cmd 窗中 有如下语法。
我采用的是比较高的压缩
举例代码
D:\dds2atf\dds2atf.exe -4 -q 180 -f 15 -i D:\dds2atf\ma01.dds -o D:\dds2atf\map01.atf'
atf的批量转换需要写一个图形界面转换器,这样比较方便。
在flex6中新建air工程,代码如下。
- <?xml version="1.0" encoding="utf-8"?>
- <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
- xmlns:s="library://ns.adobe.com/flex/spark"
- xmlns:mx="library://ns.adobe.com/flex/mx"
- width="800" height="600" creationComplete="init()">
-
- <fx:Script>
- <![CDATA[
- import flash.desktop.Clipboard;
- import flash.desktop.ClipboardFormats;
- import flash.desktop.NativeProcess;
- import flash.desktop.NativeProcessStartupInfo;
- import flash.display.Bitmap;
- import flash.display.BitmapData;
- import flash.events.Event;
- import flash.events.EventDispatcher;
- import flash.events.MouseEvent;
- import flash.events.NativeProcessExitEvent;
- import flash.filesystem.File;
-
- import spark.components.Image;
- import mx.core.UIComponent
- import mx.controls.Alert;
- var _shotComplete:Event;
- var _file:File;
- var _nativeProcessStartupInfo:NativeProcessStartupInfo;
- var _process:NativeProcess;
- var _bitmapData:BitmapData;
- var _bitmap:Bitmap;
-
- protected var args:Vector.<String> = new Vector.<String>;
- protected function init():void{
-
- for (var i:int=1;i<523;i++)
- {
- // trace( '[Embed(source="../src/pngout/map'+i+'.png")] static private const map'+i+':Class; ') ;
-
- //trace ('mapi'+i+',');
-
- }
-
-
- _file = File.applicationDirectory.resolvePath("C:\\Windows\\System32\\cmd.exe");
- trace(_file.nativePath);
- _nativeProcessStartupInfo = new NativeProcessStartupInfo();
- _nativeProcessStartupInfo.executable = _file;
-
-
- _nativeProcessStartupInfo.arguments = args;
-
- _process = new NativeProcess();
- _process.start(_nativeProcessStartupInfo);
- // _process.standardInput.writeUTFBytes(args + "\n");
-
-
-
-
-
-
- _process.addEventListener(NativeProcessExitEvent.EXIT,onExit);
-
- _process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA,onStandardOutputData);
- _process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, onError);
-
- }
-
- private function onError(event:ProgressEvent):void {
-
- var process:NativeProcess = event.target as NativeProcess;
- var data:String = process.standardError.readUTFBytes(process.standardError.bytesAvailable);
- lbl.text += data;
-
- }
-
- private function onStandardOutputData(event:ProgressEvent):void
- {
- var process:NativeProcess = event.target as NativeProcess;
- var data:String = process.standardOutput.readUTFBytes(process.standardOutput.bytesAvailable);
- lbl.text += data
- }
-
- function onExit(e:NativeProcessExitEvent):void
- {
-
- Alert.show("Execution Complete");
-
-
-
-
- /* if (Clipboard.generalClipboard.hasFormat(ClipboardFormats.BITMAP_FORMAT))
- {
- _bitmapData = Clipboard.generalClipboard.getData(ClipboardFormats.BITMAP_FORMAT) as BitmapData;
- _bitmap = new Bitmap(_bitmapData);
-
-
- var dd:MovieClip=new MovieClip();
-
- dd.addChild(_bitmap);
-
-
-
-
- var myMC:UIComponent=new UIComponent();
-
- myMC.addChild(dd)
-
- this.addElement(myMC);
- } */
-
- }
-
-
-
- protected function button1_clickHandler(event:MouseEvent):void
- {
- for (var i:int=0;i<77;i++)
- {
-
-
- // args.push(' D:\\dds2atf\\dds2atf.exe -4 -q 180 -f 15 -i D:\\dds2atf\\'+i+'.dds -o D:\\dds2atf\\'+i+'.atf');
-
- 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' );
- _process.standardInput.writeUTFBytes(args + "\n" );
- args.pop();
- }
-
-
- }
- ]]>
- </fx:Script>
-
- <fx:Declarations>
- <!-- 将非可视元素(例如服务、值对象)放在此处 -->
- </fx:Declarations>
- <s:Button x="126" y="516" label="按钮" click="button1_clickHandler(event)"/>
- <s:TextArea id="lbl" x="296" y="169" width="494" height="387"/>
- </s:WindowedApplication>
下面就是在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可用。