使用 PV3D 在貼材質時, 最後都是變成點陣物件
如果是想要有相量的 3D 繪圖效果呢?
奶老師找到一位作者開發的類別
可以在PV3D , Five3D, Away3D上使用。
在這兒以PV3D做在範例
1.使用SVN下載該筆者的類別
http://code.google.com/p/swfvector/
2.新增一個fla檔
3D 文字:在場景上放一個動態文字, 選微軟正黑體字型, 並 Embed 所需的文字
3D 繪圖:在元件新增一個類別檔, 筆者取名為 MilkmidiBoxMC
裡面就可以繪製元件, 記得最後一定要整個打散, 不能是Graphic或是MovieClip元件。
3.使用Loader來載入剛剛製作好的swf(需把他當成ByteArray載入)
或是用 Embed 表籤

程式碼:
如果是想要有相量的 3D 繪圖效果呢?
奶老師找到一位作者開發的類別
可以在PV3D , Five3D, Away3D上使用。
在這兒以PV3D做在範例
1.使用SVN下載該筆者的類別
http://code.google.com/p/swfvector/
2.新增一個fla檔
3D 文字:在場景上放一個動態文字, 選微軟正黑體字型, 並 Embed 所需的文字
3D 繪圖:在元件新增一個類別檔, 筆者取名為 MilkmidiBoxMC
裡面就可以繪製元件, 記得最後一定要整個打散, 不能是Graphic或是MovieClip元件。
3.使用Loader來載入剛剛製作好的swf(需把他當成ByteArray載入)
或是用 Embed 表籤
程式碼:
package {
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.utils.ByteArray;
//import milkmidi.display.MilkmidiCopyrightClip;
import org.papervision3d.materials.special.VectorShapeMaterial;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.objects.special.VectorShape3D;
import org.papervision3d.view.BasicView;
import wumedia.vector.VectorShapes;
import wumedia.vector.VectorText;
[SWF(width = "950", height = "500", frameRate = "41", backgroundColor = "#ffffff", pageTitle = "milkmidi.com")]
public class MyFontPV3DTest extends BasicView {
[Embed(source="../assets/FontsAssets.swf", mimeType = 'application/octet-stream')]
public static const FontsAssets:Class;
private var rootNode :DisplayObject3D;
public function MyFontPV3DTest() {
super();
init();
init3DObject();
startRendering();
//new MilkmidiCopyrightClip(false, this,true);
}
private function init():void {
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
var _byte:ByteArray = new FontsAssets() as ByteArray;
VectorText.extractFont(_byte, ["微軟正黑體", "Verdana"], true); //載入字型
VectorShapes.extractFromLibrary(_byte, ["MilkmidiBoxMC"]); //載入MovieClip
}
private function init3DObject():void{
rootNode = new DisplayObject3D();
scene.addChild(rootNode);
//相量文字。
var _text0:VectorShape3D;
_text0 = new VectorShape3D(new VectorShapeMaterial());
_text0.graphics.beginFill(0x00ff00);
VectorText.write(_text0.graphics, "Verdana", 200, 200, 0, "milkmidi", 0, 0, Number.POSITIVE_INFINITY, VectorText.CENTER);
_text0.graphics.endFill();
rootNode.addChild(_text0);
_text0 = new VectorShape3D(new VectorShapeMaterial());
_text0.graphics.beginFill(0xff0000);
VectorText.write(_text0.graphics, "微軟正黑體", 200, 200, 0, "奶綠茶PV3D", 0, 0, Number.POSITIVE_INFINITY, VectorText.CENTER);
_text0.y = 300;
_text0.graphics.endFill();
rootNode.addChild(_text0);
// 相量 3D 繪圖
var shape0:VectorShape3D = new VectorShape3D(new VectorShapeMaterial());
shape0.z = -200;
VectorShapes.draw(shape0.graphics, "MilkmidiBoxMC", 2.0);
rootNode.addChild(shape0);
}
override protected function onRenderTick(e:Event=null):void {
rootNode.rotationY += 2;
rootNode.rotationX += 1;
super.onRenderTick(e);
}
}
}
SourceCodeDownload
留言
為啥我下載下來後
開swf檔 卻不見特效呢
只看到兩排字
"奶綠茶PV3D"
"http:milkmidi.com"
真正的3D效果要用該者作的類別
甚麼是mimeType = 'application/octet-stream?
不知道swfvector有無classes的Documentation? 在code.google上好像找不到! ><
這個跟FIVe3D有甚麼關係呢? 謝謝!
這個是Flex使用的Tag
能把外部的檔案Embed到.swf
就像把圖片匯入到Library裡
因為Flex沒有Library, 所以才要用這個語法, 當Embed不是jpg,swf,等格式時, 就要加入mineType來做辨示
那個當作asset的mc裡為什麼不能有code, 也不能拉timeline? 好像也不能apply濾鏡,blend mode之類的?
是因為它們不是vector的關係?
另外,ByteArray是不是可以變成點陣也可以變成向量?
如果要點陣的話, 直接用FP10的rotationY等屬性就是點陣圖了
ByteArray只是2進位編碼, 跟相量點陣沒關系喔