使用 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進位編碼, 跟相量點陣沒關系喔