<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2200661281887379041</id><updated>2012-02-06T06:25:06.896-08:00</updated><category term='Director'/><category term='Flash'/><category term='VC++'/><category term='3DMax'/><category term='Android'/><category term='PV3D'/><category term='Flash 3D'/><title type='text'>Max の 3D Studio</title><subtitle type='html'>知之者不如好之者,好之者不如樂之者</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>89</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-2697972146286139100</id><published>2011-03-11T10:49:00.001-08:00</published><updated>2011-05-05T07:28:38.199-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash 3D'/><title type='text'>【測試】Flash3D API(Molehill)Jiglib物理引擎範例</title><content type='html'>此範例是參考Jiglib物理引擎改寫，&lt;br /&gt;方向鍵可以控制車輛移動，&lt;br /&gt;空白鍵停止。&lt;br /&gt;車輛的材質還有反光效果。&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-jZRf7OMO9Rk/TXpu3tPiibI/AAAAAAAAAbk/atOM-dxFjB8/s1600/demo_pic1.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 312px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5582896591395785138" border="0" alt="" src="http://1.bp.blogspot.com/-jZRf7OMO9Rk/TXpu3tPiibI/AAAAAAAAAbk/atOM-dxFjB8/s400/demo_pic1.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://igmax.myweb.hinet.net/demo_flash3d_jiglib_car/Away3D_Jiglib_Demo.html" target="_blank"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-2697972146286139100?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/2697972146286139100/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2011/03/flash3d-apimolehilljiglib.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/2697972146286139100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/2697972146286139100'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2011/03/flash3d-apimolehilljiglib.html' title='【測試】Flash3D API(Molehill)Jiglib物理引擎範例'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-jZRf7OMO9Rk/TXpu3tPiibI/AAAAAAAAAbk/atOM-dxFjB8/s72-c/demo_pic1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-459384885414252012</id><published>2011-03-10T03:50:00.000-08:00</published><updated>2011-05-05T07:29:02.500-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash 3D'/><title type='text'>【測試】Flash3D API(Molehill) MD2模型範例</title><content type='html'>寫了一個簡單範例demo，&lt;br /&gt;現在Flash 3D API(Molehill)提供硬體支援，&lt;br /&gt;跑起來順暢多了，&lt;br /&gt;點擊滑鼠可以改變角色狀態。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-rGFYX_PgzZ4/TXi7TS_I1II/AAAAAAAAAbc/oTp7bzq6SiI/s1600/demo_pic.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 279px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5582417678314296450" border="0" alt="" src="http://4.bp.blogspot.com/-rGFYX_PgzZ4/TXi7TS_I1II/AAAAAAAAAbc/oTp7bzq6SiI/s400/demo_pic.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://igmax.myweb.hinet.net/demo_flash3d_md2_ani/Away3D_LoadMD2.html" target="_blank"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-459384885414252012?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/459384885414252012/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2011/03/flash3d-apimolehill-md2.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/459384885414252012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/459384885414252012'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2011/03/flash3d-apimolehill-md2.html' title='【測試】Flash3D API(Molehill) MD2模型範例'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-rGFYX_PgzZ4/TXi7TS_I1II/AAAAAAAAAbc/oTp7bzq6SiI/s72-c/demo_pic.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-8291045885823829638</id><published>2011-03-09T04:05:00.000-08:00</published><updated>2011-05-05T07:29:36.965-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash 3D'/><title type='text'>【教學】Flash 3D API(Molehill) Texture</title><content type='html'>Flash 3D API(Molehill)目前一些知名的3D引擎已有支援，&lt;br /&gt;像Alternativa3D、Away3D、Flare 3D 等，&lt;br /&gt;透過這些現有引擎建立3D專案非常方便。&lt;br /&gt;不過為了瞭解Flash 3D API的基本運作模式，&lt;br /&gt;還是研究了一下，此範例就是延續DrawMesh範例，&lt;br /&gt;Mesh由頂點著色改為貼上貼圖，&lt;br /&gt;原本頂點緩衝內的顏色rgb值改為UV貼圖座標。&lt;br /&gt;&lt;br /&gt;程式碼如下：&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;    import com.adobe.utils.AGALMiniAssembler;&lt;br /&gt;    import com.adobe.utils.PerspectiveMatrix3D;&lt;br /&gt;&lt;br /&gt;    import flash.display.Sprite;&lt;br /&gt;    import flash.display.Stage3D;&lt;br /&gt;    import flash.display.StageAlign;&lt;br /&gt;    import flash.display.StageScaleMode;&lt;br /&gt;    import flash.display3D.Context3D;&lt;br /&gt;    import flash.display3D.Context3DRenderMode;&lt;br /&gt;    import flash.events.Event;&lt;br /&gt;    import flash.geom.Rectangle;&lt;br /&gt;    import flash.display3D.VertexBuffer3D;&lt;br /&gt;    import flash.display3D.Context3DVertexBufferFormat;&lt;br /&gt;    import flash.display3D.IndexBuffer3D;&lt;br /&gt;    import flash.display3D.Program3D;&lt;br /&gt;    import flash.geom.Matrix3D;&lt;br /&gt;    import flash.geom.Vector3D;&lt;br /&gt;    import flash.display3D.Context3DProgramType;&lt;br /&gt;    import flash.display3D.Context3DTextureFormat;&lt;br /&gt;    import flash.display3D.textures.Texture;&lt;br /&gt;    import flash.display.Bitmap;&lt;br /&gt;    import flash.display.BitmapData;&lt;br /&gt;    import flash.net.URLRequest;&lt;br /&gt;    import flash.display.Loader;&lt;br /&gt;&lt;br /&gt;    import MonitorKit;&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * ...Flash 3D API(Molehill) 貼圖範例&lt;br /&gt;     * @author Max&lt;br /&gt;     */&lt;br /&gt;    public class Flash3D_Texture extends Sprite&lt;br /&gt;    {&lt;br /&gt;        private var sta3D:Stage3D;&lt;br /&gt;        private var con3D:Context3D;&lt;br /&gt;        private var vertexBuffer:VertexBuffer3D;&lt;br /&gt;        private var indexBuffer:IndexBuffer3D;&lt;br /&gt;&lt;br /&gt;        private var perspection:PerspectiveMatrix3D;&lt;br /&gt;        private var modelProjection:Matrix3D;&lt;br /&gt;        private var modelView:Matrix3D;&lt;br /&gt;&lt;br /&gt;        private var texture:Texture;&lt;br /&gt;        private var loaderObj:Loader;&lt;br /&gt;        private var shaderpg3d:Program3D;&lt;br /&gt;&lt;br /&gt;        public function Flash3D_Texture()&lt;br /&gt;        {&lt;br /&gt;            addEventListener(Event.ADDED_TO_STAGE, onAddtoStage);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private function onAddtoStage(event:Event):void&lt;br /&gt;        {&lt;br /&gt;            stage.align = StageAlign.TOP_LEFT;&lt;br /&gt;            stage.scaleMode = StageScaleMode.NO_SCALE;&lt;br /&gt; &lt;br /&gt;            sta3D = stage.stage3Ds[0];&lt;br /&gt;            sta3D.addEventListener(Event.CONTEXT3D_CREATE, onCreateContext3D);&lt;br /&gt;            sta3D.requestContext3D(Context3DRenderMode.AUTO);&lt;br /&gt; &lt;br /&gt;            var FPS:MonitorKit = new MonitorKit(MonitorKit.MKMODE_TL);&lt;br /&gt;            addChild(FPS);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private function onCreateContext3D(event:Event):void&lt;br /&gt;        {&lt;br /&gt;            con3D = sta3D.context3D;&lt;br /&gt;            con3D.enableErrorChecking = true;&lt;br /&gt;            initTexture();  &lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private function initTexture():void&lt;br /&gt;        {&lt;br /&gt;            loaderObj = new Loader();&lt;br /&gt;            loaderObj.contentLoaderInfo.addEventListener(Event.COMPLETE,&lt;br /&gt;                                                         onLoaderBmpComple);&lt;br /&gt;            loaderObj.load(new URLRequest("pic.jpg"));&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private function onLoaderBmpComple(event:Event):void&lt;br /&gt;        {&lt;br /&gt;            var tmploaderBmp:Bitmap = event.target.content as Bitmap;&lt;br /&gt;            texture = con3D.createTexture( 256, 256,&lt;br /&gt;                                           Context3DTextureFormat.BGRA, false);&lt;br /&gt;            texture.uploadFromBitmapData(tmploaderBmp.bitmapData,0);&lt;br /&gt;            initMesh();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private function initMesh():void&lt;br /&gt;        {&lt;br /&gt;            var vertexShader:Array =["dp4 op.x, va0, vc0",&lt;br /&gt;                                     "dp4 op.y, va0, vc1",&lt;br /&gt;                                     "dp4 op.z, va0, vc2",&lt;br /&gt;                                     "dp4 op.w, va0, vc3",&lt;br /&gt;                                     "mov v0, va1.xyzw"];&lt;br /&gt;            var vertexAssembler:AGALMiniAssembler = new AGALMiniAssembler();&lt;br /&gt;            vertexAssembler.assemble(flash.display3D.Context3DProgramType.VERTEX,&lt;br /&gt;                                     vertexShader.join("\n"));&lt;br /&gt; &lt;br /&gt;            var fragmentShader:Array =["mov ft0, v0\n",&lt;br /&gt;                                       "tex ft1, ft0, fs1 &lt;2d,clamp,linear&gt;\n",&lt;br /&gt;                                       "mov oc, ft1\n"];&lt;br /&gt;            var fragmentAssembler:AGALMiniAssembler = new AGALMiniAssembler();&lt;br /&gt;            fragmentAssembler.assemble(flash.display3D.Context3DProgramType.FRAGMENT,&lt;br /&gt;                                       fragmentShader.join("\n"));&lt;br /&gt; &lt;br /&gt;            shaderpg3d = con3D.createProgram();&lt;br /&gt;            shaderpg3d.upload(vertexAssembler.agalcode, fragmentAssembler.agalcode);&lt;br /&gt; &lt;br /&gt;            indexBuffer = con3D.createIndexBuffer(6);&lt;br /&gt;            indexBuffer.uploadFromVector(Vector.&lt;uint&gt;([0, 1, 2, 0, 2, 3]), 0, 6);&lt;br /&gt;  &lt;br /&gt;            vertexBuffer = con3D.createVertexBuffer(4, 4);&lt;br /&gt;            vertexBuffer.uploadFromVector(Vector.&lt;number&gt;([-1.0, 1.0,0.0,1.0,&lt;br /&gt;                                                           -1.0,-1.0,0.0,0.0,&lt;br /&gt;                                                            1.0,-1.0,1.0,0.0,&lt;br /&gt;                                                            1.0, 1.0,1.0,1.0]),0,4);&lt;br /&gt; &lt;br /&gt;            con3D.setVertexBufferAt( 0, vertexBuffer, 0,&lt;br /&gt;                                     Context3DVertexBufferFormat.FLOAT_2);&lt;br /&gt;            con3D.setVertexBufferAt( 1, vertexBuffer, 2,&lt;br /&gt;                                     Context3DVertexBufferFormat.FLOAT_2);&lt;br /&gt;            con3D.setTextureAt(1, texture);&lt;br /&gt; &lt;br /&gt;            addEventListener(Event.ENTER_FRAME, on3DRender);&lt;br /&gt;            stage.addEventListener(Event.RESIZE, onResizeStage);&lt;br /&gt;            onResizeStage();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private function drawMesh():void&lt;br /&gt;        {&lt;br /&gt;            con3D.setProgram(shaderpg3d);&lt;br /&gt; &lt;br /&gt;            modelView = new Matrix3D();&lt;br /&gt;            modelView.identity();&lt;br /&gt;            modelView.position = new Vector3D(0, 0, 2, 1);&lt;br /&gt;            modelView.appendScale(1, -1, 1);&lt;br /&gt; &lt;br /&gt;            perspection = new PerspectiveMatrix3D();&lt;br /&gt;            perspection.identity();&lt;br /&gt;            perspection.perspectiveLH(5.5, 4, 1, 100);&lt;br /&gt; &lt;br /&gt;            modelProjection = new Matrix3D();&lt;br /&gt;            modelProjection.identity();&lt;br /&gt;            modelProjection.position = new Vector3D(0, 0, 0, 1);&lt;br /&gt;            modelProjection.appendRotation(stage.mouseX/4,&lt;br /&gt;                                           new Vector3D(0, 1, 0, 1),null);&lt;br /&gt;            modelProjection.append(modelView);&lt;br /&gt;            modelProjection.append(perspection);&lt;br /&gt; &lt;br /&gt;            con3D.setCulling("none");&lt;br /&gt;            con3D.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX,&lt;br /&gt;                                                0,modelProjection,true);&lt;br /&gt;            con3D.drawTriangles(indexBuffer, 0, 2);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private function onResizeStage(event:Event=null):void&lt;br /&gt;        {&lt;br /&gt;            con3D.configureBackBuffer(stage.stageWidth, stage.stageHeight,2,true);&lt;br /&gt;            sta3D.viewPort = new Rectangle(0,0,stage.stageWidth,stage.stageHeight);&lt;br /&gt;            on3DRender();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private function on3DRender(event:Event=null):void&lt;br /&gt;        {&lt;br /&gt;            con3D.clear(0.0, 0.0, 0.5, 1.0);&lt;br /&gt;            drawMesh();&lt;br /&gt;            con3D.present();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;執行結果：&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-mayksWTh_fI/TXd1LeOiKAI/AAAAAAAAAbU/11k3JePxy5Y/s1600/demo_pic.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 327px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5582059103102052354" border="0" alt="" src="http://1.bp.blogspot.com/-mayksWTh_fI/TXd1LeOiKAI/AAAAAAAAAbU/11k3JePxy5Y/s400/demo_pic.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://igmax.myweb.hinet.net/demo_flash3d_texture/Flash3D_Texture.html" target="_blank"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-8291045885823829638?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/8291045885823829638/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2011/03/flash-3d-apimolehill-texture.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/8291045885823829638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/8291045885823829638'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2011/03/flash-3d-apimolehill-texture.html' title='【教學】Flash 3D API(Molehill) Texture'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-mayksWTh_fI/TXd1LeOiKAI/AAAAAAAAAbU/11k3JePxy5Y/s72-c/demo_pic.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-6392213656829824092</id><published>2011-03-08T05:19:00.000-08:00</published><updated>2011-05-05T07:30:00.505-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash 3D'/><title type='text'>【教學】Flash 3D API(Molehill) DrawSquareMesh</title><content type='html'>這是DrawTriangleMesh範例的延伸，&lt;br /&gt;也就是再增加一個頂點，&lt;br /&gt;四個頂點組成兩個三角面，&lt;br /&gt;其繪製的方式一樣。&lt;br /&gt;&lt;br /&gt;程式碼如下：&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;package &lt;br /&gt;{&lt;br /&gt;    import com.adobe.utils.AGALMiniAssembler;&lt;br /&gt;    import com.adobe.utils.PerspectiveMatrix3D; &lt;br /&gt;&lt;br /&gt;    import flash.display.Sprite;&lt;br /&gt;    import flash.display.Stage3D;&lt;br /&gt;    import flash.display.StageAlign;&lt;br /&gt;    import flash.display.StageScaleMode;&lt;br /&gt;    import flash.display3D.Context3D;&lt;br /&gt;    import flash.display3D.Context3DProgramType;&lt;br /&gt;    import flash.display3D.Context3DRenderMode;&lt;br /&gt;    import flash.display3D.Context3DTextureFormat;&lt;br /&gt;    import flash.display3D.Context3DVertexBufferFormat;&lt;br /&gt;    import flash.display3D.IndexBuffer3D;&lt;br /&gt;    import flash.display3D.Program3D;&lt;br /&gt;    import flash.display3D.VertexBuffer3D;&lt;br /&gt;    import flash.events.Event;&lt;br /&gt;    import flash.geom.Matrix3D;&lt;br /&gt;    import flash.geom.PerspectiveProjection;&lt;br /&gt;    import flash.geom.Rectangle;&lt;br /&gt;    import flash.geom.Vector3D;&lt;br /&gt;&lt;br /&gt;    public class Flash3D_DrawMesh extends Sprite&lt;br /&gt;    {&lt;br /&gt;        private var sta3D:Stage3D;&lt;br /&gt;        private var con3D:Context3D;&lt;br /&gt; &lt;br /&gt;        private var indexBuffer:IndexBuffer3D; &lt;br /&gt;        private var perspection:PerspectiveMatrix3D;&lt;br /&gt;        private var modelProjection:Matrix3D;&lt;br /&gt;        private var modelView:Matrix3D;&lt;br /&gt;  &lt;br /&gt;        private var ro:Number = 5;&lt;br /&gt;  &lt;br /&gt;        public function Flash3D_DrawMesh()&lt;br /&gt;        {&lt;br /&gt;            addEventListener(Event.ADDED_TO_STAGE, onAddtoStage);&lt;br /&gt;        }&lt;br /&gt;  &lt;br /&gt;        public function onAddtoStage(event:Event):void&lt;br /&gt;        {&lt;br /&gt;            stage.align = StageAlign.TOP_LEFT;&lt;br /&gt;            stage.scaleMode = StageScaleMode.NO_SCALE;&lt;br /&gt;            stage.frameRate = 30;&lt;br /&gt;    &lt;br /&gt;            sta3D = stage.stage3Ds[0];&lt;br /&gt;            sta3D.addEventListener(Event.CONTEXT3D_CREATE,onCreateContext3D);&lt;br /&gt;            sta3D.requestContext3D(Context3DRenderMode.AUTO); &lt;br /&gt;   &lt;br /&gt;            var FPS:MonitorKit = new MonitorKit(MonitorKit.MKMODE_TL);&lt;br /&gt;            addChild(FPS);&lt;br /&gt;        }&lt;br /&gt;  &lt;br /&gt;        public function onCreateContext3D(event:Event):void&lt;br /&gt;        {&lt;br /&gt;            con3D = sta3D.context3D;&lt;br /&gt;            con3D.enableErrorChecking = true;&lt;br /&gt;     &lt;br /&gt;            initMesh();&lt;br /&gt;   &lt;br /&gt;            addEventListener(Event.ENTER_FRAME,on3DRender);&lt;br /&gt;            stage.addEventListener(Event.RESIZE,onResizeStage);&lt;br /&gt;            onResizeStage();  &lt;br /&gt;        }&lt;br /&gt;  &lt;br /&gt;        public function onResizeStage(event:Event = null):void&lt;br /&gt;        { &lt;br /&gt;            con3D.configureBackBuffer(stage.stageWidth,stage.stageHeight,2,true);&lt;br /&gt;            sta3D.viewPort = new Rectangle(0,0,stage.stageWidth,stage.stageHeight); &lt;br /&gt;            on3DRender();&lt;br /&gt;        }&lt;br /&gt;  &lt;br /&gt;        public function initMesh():void&lt;br /&gt;        {  &lt;br /&gt;            var vertexAssembler:AGALMiniAssembler = new AGALMiniAssembler();&lt;br /&gt;            vertexAssembler.assemble(Context3DProgramType.VERTEX,"m44 op,va0,vc \n"+&lt;br /&gt;                                                                 "mov v0,va1");&lt;br /&gt;   &lt;br /&gt;            var fragmentAssembler:AGALMiniAssembler = new AGALMiniAssembler();&lt;br /&gt;            fragmentAssembler.assemble(Context3DProgramType.FRAGMENT,"mov oc,v0");&lt;br /&gt;                &lt;br /&gt;            var vertexBuffer:VertexBuffer3D = con3D.createVertexBuffer(4,6);&lt;br /&gt;            vertexBuffer.uploadFromVector(Vector.&lt;Number&gt;([-1, 1,0,1,0,0,&lt;br /&gt;                                                           -1,-1,0,1,1,0,&lt;br /&gt;                                                            1,-1,0,1,0,1,&lt;br /&gt;                                                            1, 1,0,1,0,0]),0,4);&lt;br /&gt;&lt;br /&gt;            con3D.setVertexBufferAt(0,vertexBuffer,0,&lt;br /&gt;                                    Context3DVertexBufferFormat.FLOAT_3);&lt;br /&gt;            con3D.setVertexBufferAt(1,vertexBuffer,3,&lt;br /&gt;                                    Context3DVertexBufferFormat.FLOAT_3);&lt;br /&gt;   &lt;br /&gt;            indexBuffer= con3D.createIndexBuffer(6);&lt;br /&gt;            indexBuffer.uploadFromVector(Vector.&lt;uint&gt;([0,1,2,0,2,3]),0,6);&lt;br /&gt;   &lt;br /&gt;            var program:Program3D = con3D.createProgram();&lt;br /&gt;            program.upload(vertexAssembler.agalcode,fragmentAssembler.agalcode);&lt;br /&gt;            con3D.setProgram(program);&lt;br /&gt;   &lt;br /&gt;            modelView = new Matrix3D();&lt;br /&gt;            modelView.identity();&lt;br /&gt;     &lt;br /&gt;            perspection = new PerspectiveMatrix3D();&lt;br /&gt;            perspection.identity();&lt;br /&gt;            perspection.perspectiveLH(5.5, 4, 1, 10000); &lt;br /&gt;   &lt;br /&gt;            modelProjection = new Matrix3D(); &lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        private function drawMesh():void&lt;br /&gt;        {&lt;br /&gt;            modelView.position = new Vector3D(0,0,1.5,1); &lt;br /&gt;            modelView.appendRotation(ro,Vector3D.Z_AXIS, null); &lt;br /&gt;   &lt;br /&gt;            modelProjection.identity();&lt;br /&gt;            modelProjection.append(modelView);&lt;br /&gt;            modelProjection.append(perspection); &lt;br /&gt;     &lt;br /&gt;            con3D.setCulling("front");&lt;br /&gt;            con3D.setProgramConstantsFromMatrix( Context3DProgramType.VERTEX,&lt;br /&gt;                                                 0,modelProjection,true);&lt;br /&gt;            con3D.drawTriangles(indexBuffer,0,2);&lt;br /&gt;        }&lt;br /&gt;  &lt;br /&gt;        private function on3DRender(event:Event=null):void&lt;br /&gt;        {&lt;br /&gt;            con3D.clear(0.0, 0.0, 0.5, 1.0); &lt;br /&gt;            drawMesh();&lt;br /&gt;            con3D.present();&lt;br /&gt;        } &lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-QqUFOcwoSQ0/TXYtG4wrAzI/AAAAAAAAAbM/Y1subtnx3t8/s1600/demo_pic2.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 313px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5581698384511304498" border="0" alt="" src="http://3.bp.blogspot.com/-QqUFOcwoSQ0/TXYtG4wrAzI/AAAAAAAAAbM/Y1subtnx3t8/s400/demo_pic2.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://igmax.myweb.hinet.net/demo_flash3d_drawsquare/Flash3D_DrawMesh.html" target="_blank"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-6392213656829824092?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/6392213656829824092/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2011/03/flash-3d-molehill-drawsquaremesh.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/6392213656829824092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/6392213656829824092'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2011/03/flash-3d-molehill-drawsquaremesh.html' title='【教學】Flash 3D API(Molehill) DrawSquareMesh'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-QqUFOcwoSQ0/TXYtG4wrAzI/AAAAAAAAAbM/Y1subtnx3t8/s72-c/demo_pic2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-8406841747402496054</id><published>2011-03-07T05:31:00.001-08:00</published><updated>2011-05-05T07:30:43.927-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash 3D'/><title type='text'>【教學】Flash 3D API(Molehill) DrawTriangleMesh</title><content type='html'>利用先前範例所建立的基本框架，&lt;br /&gt;新增initMesh()函式，運用頂點緩衝與索引緩衝建立三角面，&lt;br /&gt;再透過AGALMiniAssembler來填上顏色，&lt;br /&gt;最後DrawMesh()把結果畫上。&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-_ZeQcnBBpPg/TXTe2lHot_I/AAAAAAAAAbE/ax3_5F_MGSs/s1600/demo_pic1.jpg"&gt;&lt;img style="WIDTH: 344px; HEIGHT: 361px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5581330867477329906" border="0" alt="" src="http://1.bp.blogspot.com/-_ZeQcnBBpPg/TXTe2lHot_I/AAAAAAAAAbE/ax3_5F_MGSs/s400/demo_pic1.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;程式碼如下：&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;    import com.adobe.utils.AGALMiniAssembler;&lt;br /&gt;    import com.adobe.utils.PerspectiveMatrix3D;&lt;br /&gt; &lt;br /&gt;    import flash.display.Sprite;&lt;br /&gt;    import flash.display.Stage3D;&lt;br /&gt;    import flash.display.StageAlign;&lt;br /&gt;    import flash.display.StageScaleMode;&lt;br /&gt;    import flash.display3D.Context3D;&lt;br /&gt;    import flash.display3D.Context3DProgramType;&lt;br /&gt;    import flash.display3D.Context3DRenderMode;&lt;br /&gt;    import flash.display3D.Context3DTextureFormat;&lt;br /&gt;    import flash.display3D.Context3DVertexBufferFormat;&lt;br /&gt;    import flash.display3D.IndexBuffer3D;&lt;br /&gt;    import flash.display3D.Program3D;&lt;br /&gt;    import flash.display3D.VertexBuffer3D;&lt;br /&gt;    import flash.events.Event;&lt;br /&gt;    import flash.geom.Matrix3D;&lt;br /&gt;    import flash.geom.PerspectiveProjection;&lt;br /&gt;    import flash.geom.Rectangle;&lt;br /&gt;    import flash.geom.Vector3D;&lt;br /&gt; &lt;br /&gt;    public class Flash3D_DrawTriangle extends Sprite&lt;br /&gt;    {&lt;br /&gt;        private var sta3D:Stage3D;&lt;br /&gt;        private var con3D:Context3D;&lt;br /&gt;  &lt;br /&gt;        private var vertexBuffer:VertexBuffer3D;&lt;br /&gt;        private var indexBuffer:IndexBuffer3D; &lt;br /&gt;  &lt;br /&gt;        private var modelView:Matrix3D;&lt;br /&gt;        private var modelProjection:Matrix3D;&lt;br /&gt;        private var perspection:PerspectiveMatrix3D;&lt;br /&gt;  &lt;br /&gt;        private var ro:Number = 5;&lt;br /&gt;        private var pos:Vector3D;&lt;br /&gt;  &lt;br /&gt;        public function Flash3D_DrawTriangle()&lt;br /&gt;        {&lt;br /&gt;            addEventListener(Event.ADDED_TO_STAGE, onAddtoStage);&lt;br /&gt;        }&lt;br /&gt;  &lt;br /&gt;        public function onAddtoStage(event:Event):void&lt;br /&gt;        {&lt;br /&gt;            stage.align = StageAlign.TOP_LEFT;&lt;br /&gt;            stage.scaleMode = StageScaleMode.NO_SCALE;&lt;br /&gt;            stage.frameRate = 30;&lt;br /&gt;   &lt;br /&gt;            sta3D = stage.stage3Ds[0];&lt;br /&gt;            sta3D.addEventListener(Event.CONTEXT3D_CREATE, onCreateContext3D);&lt;br /&gt;            sta3D.requestContext3D(Context3DRenderMode.AUTO);&lt;br /&gt;   &lt;br /&gt;            var FPS:MonitorKit = new MonitorKit(MonitorKit.MKMODE_TL);&lt;br /&gt;            addChild(FPS);&lt;br /&gt;        }&lt;br /&gt;  &lt;br /&gt;        public function onCreateContext3D(event:Event):void&lt;br /&gt;        {&lt;br /&gt;            con3D = sta3D.context3D;&lt;br /&gt;            con3D.enableErrorChecking = true;&lt;br /&gt;      &lt;br /&gt;            initMesh();&lt;br /&gt;   &lt;br /&gt;            addEventListener(Event.ENTER_FRAME, on3DRender);&lt;br /&gt;            stage.addEventListener(Event.RESIZE, onResizeStage);&lt;br /&gt;            onResizeStage();  &lt;br /&gt;        }&lt;br /&gt;  &lt;br /&gt;        public function onResizeStage(event:Event = null):void&lt;br /&gt;        { &lt;br /&gt;            con3D.configureBackBuffer(stage.stageWidth, stage.stageHeight, 2, true);&lt;br /&gt;            sta3D.viewPort = new Rectangle(0,0,stage.stageWidth, stage.stageHeight);&lt;br /&gt;            on3DRender();&lt;br /&gt;        }&lt;br /&gt;  &lt;br /&gt;        public function initMesh():void&lt;br /&gt;        {&lt;br /&gt;            var vertexAssembler:AGALMiniAssembler = new AGALMiniAssembler();&lt;br /&gt;            vertexAssembler.assemble(Context3DProgramType.VERTEX,"m44 op,va0,vc0 \n"+&lt;br /&gt;                                                                 "mov v0,va1");&lt;br /&gt;   &lt;br /&gt;            var fragmentAssembler:AGALMiniAssembler = new AGALMiniAssembler();&lt;br /&gt;            fragmentAssembler.assemble(Context3DProgramType.FRAGMENT,"mov oc,v0");&lt;br /&gt;    &lt;br /&gt;            vertexBuffer = con3D.createVertexBuffer(3,6);&lt;br /&gt;            vertexBuffer.uploadFromVector(Vector.&lt;number&gt;([ 0, 1,0,1,0,0,&lt;br /&gt;                                                           -1,-1,0,0,1,0,&lt;br /&gt;                                                            1,-1,0,0,0,1,]),0, 3);&lt;br /&gt;                &lt;br /&gt;           con3D.setVertexBufferAt(0,vertexBuffer,0,&lt;br /&gt;                                   Context3DVertexBufferFormat.FLOAT_3);&lt;br /&gt;           con3D.setVertexBufferAt(1,vertexBuffer,3,&lt;br /&gt;                                   Context3DVertexBufferFormat.FLOAT_3);&lt;br /&gt;   &lt;br /&gt;           indexBuffer = con3D.createIndexBuffer(3);&lt;br /&gt;           indexBuffer.uploadFromVector(Vector.&lt;uint&gt;([0,1,2]),0,3);&lt;br /&gt;   &lt;br /&gt;           var program:Program3D = con3D.createProgram();&lt;br /&gt;           program.upload(vertexAssembler.agalcode,fragmentAssembler.agalcode);&lt;br /&gt;           con3D.setProgram(program);&lt;br /&gt;   &lt;br /&gt;           modelView = new Matrix3D();&lt;br /&gt;           modelView.identity();&lt;br /&gt;           pos = new Vector3D(0,0,2,1);&lt;br /&gt;   &lt;br /&gt;           perspection = new PerspectiveMatrix3D();&lt;br /&gt;           perspection.identity();&lt;br /&gt;           perspection.perspectiveLH(2.8,2,1,10000);  &lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public function DrawMesh():void&lt;br /&gt;        {&lt;br /&gt;            modelView.position = pos;&lt;br /&gt;            modelView.appendRotation(ro,Vector3D.Y_AXIS, null);&lt;br /&gt;   &lt;br /&gt;            modelProjection = new Matrix3D();&lt;br /&gt;            modelProjection.identity();&lt;br /&gt;            modelProjection.append(modelView);&lt;br /&gt;            modelProjection.append(perspection);&lt;br /&gt;   &lt;br /&gt;            con3D.setCulling("none");&lt;br /&gt;            con3D.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX,&lt;br /&gt;                                                0,modelProjection,true);&lt;br /&gt;            con3D.drawTriangles(indexBuffer,0,-1);&lt;br /&gt;        }&lt;br /&gt;  &lt;br /&gt;        public function on3DRender(event:Event):void&lt;br /&gt;        {&lt;br /&gt;            con3D.clear(0.0, 0.0, 0.5, 1.0);&lt;br /&gt;            DrawMesh(); &lt;br /&gt;            con3D.present();&lt;br /&gt;        } &lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;執行結果：&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-zwWPeqcrnS4/TXTeyYgyNXI/AAAAAAAAAa8/y4sdClzp1E4/s1600/demo_pic2.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 314px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5581330795373671794" border="0" alt="" src="http://2.bp.blogspot.com/-zwWPeqcrnS4/TXTeyYgyNXI/AAAAAAAAAa8/y4sdClzp1E4/s400/demo_pic2.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://igmax.myweb.hinet.net/demo_flash3d_drawtriangle/Flash3D_DrawTriangle.html" target="_blank"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-8406841747402496054?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/8406841747402496054/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2011/03/flash-3d-molehill-drawtrianglemesh.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/8406841747402496054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/8406841747402496054'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2011/03/flash-3d-molehill-drawtrianglemesh.html' title='【教學】Flash 3D API(Molehill) DrawTriangleMesh'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-_ZeQcnBBpPg/TXTe2lHot_I/AAAAAAAAAbE/ax3_5F_MGSs/s72-c/demo_pic1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-4709248149514902202</id><published>2011-03-06T06:27:00.000-08:00</published><updated>2011-03-09T04:07:24.095-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash 3D'/><title type='text'>【教學】Flash 3D API(Molehill) 基本框架建立</title><content type='html'>Molehill 3D前陣子很多人在討論，&lt;br /&gt;最近也研究了一下，發現3D環境都是大同小異，&lt;br /&gt;所以寫了一個3D的基本框架測試範例，&lt;br /&gt;使用到 Flex SDK Hero(版本19784)，&lt;br /&gt;Flash Player 11.0.0.58 Incubator，&lt;br /&gt;本範例開發工具使用FlashDevelop，&lt;br /&gt;也可以使用Adobe Flash Builder 4或Flash CS5。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-tpTxrRj5FKs/TXObctuZ-0I/AAAAAAAAAas/GzwRBFmKWiM/s1600/demo_pic1.jpg"&gt;&lt;img style="WIDTH: 303px; HEIGHT: 226px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5580975280855055170" border="0" alt="" src="http://1.bp.blogspot.com/-tpTxrRj5FKs/TXObctuZ-0I/AAAAAAAAAas/GzwRBFmKWiM/s400/demo_pic1.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;程式碼如下：&lt;br /&gt;&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;    import flash.display.Sprite;&lt;br /&gt;    import flash.display.Stage3D;&lt;br /&gt;    import flash.display.StageAlign;&lt;br /&gt;    import flash.display.StageScaleMode;&lt;br /&gt;    import flash.display3D.Context3D;&lt;br /&gt;    import flash.display3D.Context3DRenderMode;&lt;br /&gt;    import flash.events.Event;&lt;br /&gt;    import flash.geom.Matrix3D;&lt;br /&gt;    import flash.geom.Rectangle;&lt;br /&gt; &lt;br /&gt;    import MonitorKit;&lt;br /&gt; &lt;br /&gt;    /**&lt;br /&gt;    * ...Flash 3D Framework&lt;br /&gt;    * @author Max&lt;br /&gt;    */&lt;br /&gt;    public class Flash3D_Framework extends Sprite&lt;br /&gt;    {&lt;br /&gt;        private var sta3D:Stage3D;&lt;br /&gt;        private var con3D:Context3D;&lt;br /&gt;  &lt;br /&gt;    public function Flash3D_Framework():void&lt;br /&gt;    {&lt;br /&gt;       addEventListener(Event.ADDED_TO_STAGE, onAddtoStage); &lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    public function onAddtoStage(event:Event):void&lt;br /&gt;    {&lt;br /&gt;       stage.align = StageAlign.TOP_LEFT;&lt;br /&gt;       stage.scaleMode = StageScaleMode.NO_SCALE;&lt;br /&gt;  &lt;br /&gt;       sta3D = stage.stage3Ds[0];&lt;br /&gt;       sta3D.addEventListener(Event.CONTEXT3D_CREATE, onCreateContext3D);&lt;br /&gt;       sta3D.requestContext3D(Context3DRenderMode.AUTO);&lt;br /&gt;       // 設定FPS&lt;br /&gt;       var FPS:MonitorKit = new MonitorKit(MonitorKit.MKMODE_TL);&lt;br /&gt;       addChild(FPS);&lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    public function onCreateContext3D(event:Event):void&lt;br /&gt;    {&lt;br /&gt;       con3D = sta3D.context3D;&lt;br /&gt;       con3D.enableErrorChecking = true;&lt;br /&gt;   &lt;br /&gt;       addEventListener(Event.ENTER_FRAME, on3DRender);&lt;br /&gt;       stage.addEventListener(Event.RESIZE, onResizeStage);&lt;br /&gt;       onResizeStage();  &lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    public function onResizeStage(event:Event = null):void&lt;br /&gt;    {&lt;br /&gt;       // 設定背景緩衝&lt;br /&gt;        con3D.configureBackBuffer(stage.stageWidth, stage.stageHeight, 2, true);&lt;br /&gt;       // 讓成像大小等於stage的大小&lt;br /&gt;        sta3D.viewPort = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight);&lt;br /&gt;       on3DRender();&lt;br /&gt;    }&lt;br /&gt;    // 3D渲染 &lt;br /&gt;    public function on3DRender(event:Event = null):void&lt;br /&gt;    {&lt;br /&gt;       // 設定3D背景色(rgba)&lt;br /&gt;       con3D.clear(0.0, 0.0, 0.5, 1.0);&lt;br /&gt;       // ...&lt;br /&gt;       // 要繪製3D的處理可以加在這...&lt;br /&gt;       // ...   &lt;br /&gt;       con3D.present();&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;執行結果：&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-S8GLWNd1wAs/TXObW4gEd8I/AAAAAAAAAak/eHXYIivbho0/s1600/demo_pic2.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 323px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5580975180668499906" border="0" alt="" src="http://1.bp.blogspot.com/-S8GLWNd1wAs/TXObW4gEd8I/AAAAAAAAAak/eHXYIivbho0/s400/demo_pic2.jpg" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-4709248149514902202?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/4709248149514902202/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2011/03/flash-3d.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/4709248149514902202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/4709248149514902202'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2011/03/flash-3d.html' title='【教學】Flash 3D API(Molehill) 基本框架建立'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-tpTxrRj5FKs/TXObctuZ-0I/AAAAAAAAAas/GzwRBFmKWiM/s72-c/demo_pic1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-256614893791032885</id><published>2010-11-17T10:17:00.001-08:00</published><updated>2011-05-05T07:31:21.537-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Director'/><title type='text'>【教學】Director 3D與PhysX 物理引擎</title><content type='html'>CasetMember視窗:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/TOQcamCJmMI/AAAAAAAAAaE/ZJMJZ9FoDR8/s1600/pic1.jpg"&gt;&lt;img style="WIDTH: 329px; HEIGHT: 297px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5540584684784294082" border="0" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/TOQcamCJmMI/AAAAAAAAAaE/ZJMJZ9FoDR8/s400/pic1.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lingo程式代碼:&lt;br /&gt;----------Movie Script:"main"&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;global pDirPhyz  -- 物理引擎&lt;br /&gt;global pTimeStep -- 影響時間&lt;br /&gt;global pSubSteps -- 計算動力係數&lt;br /&gt;global resSphere -- 球的模型資源&lt;br /&gt;global modSphere -- 球的模型&lt;br /&gt;global resBox    -- 方塊的模型資源&lt;br /&gt;global modBox    -- 方塊模型&lt;br /&gt;global resFloor  -- 地板模型資源&lt;br /&gt;global modFloor  -- 地板模型&lt;br /&gt;&lt;br /&gt;on startmovie&lt;br /&gt; &lt;br /&gt;  --W3D&lt;br /&gt;  member("Scene3D").resetworld()&lt;br /&gt; &lt;br /&gt;  -------------------------------------&lt;br /&gt;  --建立球體模型&lt;br /&gt;  resSphere = member("Scene3D").newModelResource("SphereRes",#sphere,#front)&lt;br /&gt;  resSphere.radius = 10&lt;br /&gt;  resSphere.resolution = 6&lt;br /&gt; &lt;br /&gt;  modSphere = member("Scene3D").newModel("SphereRes")&lt;br /&gt;  modSphere.resource = resSphere&lt;br /&gt;  modSphere.transform.position = vector(50,100,-20)&lt;br /&gt;  modSphere.addmodifier(#meshdeform)&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;  -------------------------------------&lt;br /&gt;  --建立方塊模型&lt;br /&gt;  resBox = member("Scene3D").newModelResource("BoxRes",#Box,#front)&lt;br /&gt;  resBox.height = 5&lt;br /&gt;  resBox.width = 100&lt;br /&gt;  resBox.length = 100&lt;br /&gt;  resBox.lengthVertices = 5&lt;br /&gt;  resBox.widthVertices = 5&lt;br /&gt;  resBox.heightVertices = 2&lt;br /&gt; &lt;br /&gt;  modBox = member("Scene3D").newModel("BoxRes")&lt;br /&gt;  modBox.resource = resBox&lt;br /&gt;  modBox.transform.position = vector(20,0,-20)&lt;br /&gt;  modBox.transform.rotation = vector(10,10,20)&lt;br /&gt;  modBox.addmodifier(#meshdeform)&lt;br /&gt; &lt;br /&gt;  -----------------------------------------&lt;br /&gt;  --建立地板模型&lt;br /&gt;  resFloor = member("Scene3D").newModelResource("FloorRes",#Box,#front)&lt;br /&gt;  resFloor.height = 5&lt;br /&gt;  resFloor.width = 200&lt;br /&gt;  resFloor.length = 200&lt;br /&gt;  resFloor.lengthVertices = 5&lt;br /&gt;  resFloor.widthVertices = 5&lt;br /&gt;  resFloor.heightVertices = 2&lt;br /&gt; &lt;br /&gt;  modFloor = member("Scene3D").newModel("FloorRes")&lt;br /&gt;  modFloor.resource = resFloor&lt;br /&gt;  modFloor.transform.position = vector(0,-70,0)&lt;br /&gt;  modFloor.transform.rotation = vector(0,0,0)&lt;br /&gt;  modFloor.addmodifier(#meshdeform)&lt;br /&gt; &lt;br /&gt;  ------------------------------------------&lt;br /&gt;  --物理引擎&lt;br /&gt;  pDirPhyz = member("physX")&lt;br /&gt;  pTimeStep = 0.2&lt;br /&gt;  pSubSteps = 10&lt;br /&gt; &lt;br /&gt;  --初始引擎&lt;br /&gt;  pDirPhyz.Init(member("Scene3D"), vector(1,1,1),#equal, pTimeStep, pSubSteps )&lt;br /&gt;  pDirPhyz.gravity = vector(0,-9.8,0)&lt;br /&gt;  pDirPhyz.contacttolerance = 0.2&lt;br /&gt;  pDirPhyz.friction = 0.2&lt;br /&gt;  pDirPhyz.lineardamping = 0.4&lt;br /&gt;  pDirPhyz.angulardamping = 0.4&lt;br /&gt;  pDirPhyz.restitution = 0.9&lt;br /&gt; &lt;br /&gt;  --引擎套用到球模型&lt;br /&gt;  rb_ball=pDirPhyz.createRigidBody(modSphere.name,modSphere.name,#sphere,#dynamic)&lt;br /&gt;  rb_ball.mass = 100&lt;br /&gt; &lt;br /&gt;  --引擎套用到方塊模型&lt;br /&gt;  rb_box=pDirPhyz.createRigidBody(modBox.name,modBox.name,#Box,#static )&lt;br /&gt;  rb_box.mass = 100&lt;br /&gt; &lt;br /&gt;  --引擎套用到地板模型&lt;br /&gt;  rb_floor=pDirPhyz.createRigidBody(modFloor.name,modFloor.name,#Box,#static )&lt;br /&gt;  rb_floor.mass = 100&lt;br /&gt; &lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;on endSprite me&lt;br /&gt;  if (pDirPhyz.isInitialized = 1) then&lt;br /&gt;    pDirPhyz.destroy()&lt;br /&gt;  end if&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;----------Frame Script:"loop"&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;global pDirPhyz  -- 物理引擎&lt;br /&gt;global pTimeStep -- 影響時間&lt;br /&gt;global pSubSteps -- 計算動力係數&lt;br /&gt;&lt;br /&gt;on exitFrame&lt;br /&gt;  pDirPhyz.simulate()&lt;br /&gt; &lt;br /&gt;  go to the frame&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Score視窗:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/TOQce9lS2fI/AAAAAAAAAaM/HaRaq4aGPPI/s1600/pic2.jpg"&gt;&lt;img style="WIDTH: 383px; HEIGHT: 329px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5540584759825193458" border="0" alt="" src="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/TOQce9lS2fI/AAAAAAAAAaM/HaRaq4aGPPI/s400/pic2.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;執行結果:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/TOQci6he5-I/AAAAAAAAAaU/9l_A5CXo3g8/s1600/pic3.jpg"&gt;&lt;img style="WIDTH: 319px; HEIGHT: 241px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5540584827723376610" border="0" alt="" src="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/TOQci6he5-I/AAAAAAAAAaU/9l_A5CXo3g8/s400/pic3.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://igmax.myweb.hinet.net/demo_lingo_physx/PhysX_demo_3.htm" target="_blank"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-256614893791032885?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/256614893791032885/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2010/11/director-3dphysx.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/256614893791032885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/256614893791032885'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2010/11/director-3dphysx.html' title='【教學】Director 3D與PhysX 物理引擎'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_a8EDl0Lwf_Q/TOQcamCJmMI/AAAAAAAAAaE/ZJMJZ9FoDR8/s72-c/pic1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-3856319437433094603</id><published>2010-11-15T05:55:00.000-08:00</published><updated>2010-11-15T06:41:59.426-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>【教學】Android OpenGL ES LoadTexture</title><content type='html'>本範例是利用先前建立好的3D的基本框架，&lt;br /&gt;於A3DRender類別內增加一個建立平面的方法，&lt;br /&gt;並於該平面上貼上一張512*512的pic.png貼圖，&lt;br /&gt;貼圖置於專案res/drawable/內，&lt;br /&gt;專案為A3DLoadTexture，其A3DMain內容不變，&lt;br /&gt;如下圖：&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/TOFBDOmC8wI/AAAAAAAAAZ0/QKFfKMIXH4A/s1600/android_texture_project.jpg"&gt;&lt;img style="WIDTH: 247px; HEIGHT: 400px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5539780540355506946" border="0" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/TOFBDOmC8wI/AAAAAAAAAZ0/QKFfKMIXH4A/s400/android_texture_project.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A3DView類別內部分修正，&lt;br /&gt;於A3DRender()內增加context參數:&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;package com.max;&lt;br /&gt;&lt;br /&gt;import android.content.Context;&lt;br /&gt;import android.opengl.GLSurfaceView;&lt;br /&gt;import com.max.A3DRender;&lt;br /&gt;&lt;br /&gt;public class A3DView extends GLSurfaceView{&lt;br /&gt;  private A3DRender mA3DRender;&lt;br /&gt;  public A3DView(Context cont){&lt;br /&gt;    super(cont);&lt;br /&gt;    mA3DRender = new A3DRender(cont);&lt;br /&gt;    setRenderer(mA3DRender);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;A3DRender類別程式碼:&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;package com.max;&lt;br /&gt;&lt;br /&gt;import android.opengl.GLSurfaceView;&lt;br /&gt;import javax.microedition.khronos.egl.EGLConfig;&lt;br /&gt;import javax.microedition.khronos.opengles.GL10;&lt;br /&gt;import android.opengl.GLU;&lt;br /&gt;import android.opengl.GLUtils;&lt;br /&gt;import java.nio.ByteBuffer;&lt;br /&gt;import java.nio.ByteOrder;&lt;br /&gt;import java.nio.FloatBuffer;&lt;br /&gt;import java.nio.ShortBuffer;&lt;br /&gt;import java.io.InputStream;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import android.content.Context;&lt;br /&gt;import android.graphics.Bitmap;&lt;br /&gt;import android.graphics.BitmapFactory;&lt;br /&gt;&lt;br /&gt;public class A3DRender implements GLSurfaceView.Renderer{&lt;br /&gt;&lt;br /&gt;  private Context context;&lt;br /&gt;  private final static int VERTS = 4;&lt;br /&gt;  //頂點座標&lt;br /&gt;  float squVtx[] = { -1.0f,  1.0f,  0.0f,  //v0&lt;br /&gt;                     -1.0f, -1.0f,  0.0f,  //v1&lt;br /&gt;                      1.0f, -1.0f,  0.0f,  //v2&lt;br /&gt;                      1.0f,  1.0f,  0.0f };//v3&lt;br /&gt;  //頂點索引&lt;br /&gt;  short squInx[] = { 0, 1, 2,   //Face1&lt;br /&gt;                     0, 2, 3 }; //Face2&lt;br /&gt;  //UV貼圖座標&lt;br /&gt;  float squTex[] ={ 0.0f, 0.0f,  //v0&lt;br /&gt;                    0.0f, 1.0f,  //v1&lt;br /&gt;                    1.0f, 1.0f,  //v2&lt;br /&gt;                    1.0f, 0.0f };//v3&lt;br /&gt;&lt;br /&gt;  private int[] textureID = new int[1];&lt;br /&gt; &lt;br /&gt;  public A3DRender(Context context){&lt;br /&gt;    this.context = context;&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  @Override&lt;br /&gt;  public void onSurfaceCreated(GL10 gl, EGLConfig config){&lt;br /&gt;    gl.glClearColor(0.2f, 0.2f, 0.2f, 1.0f);&lt;br /&gt;    gl.glClearDepthf(1.0f);&lt;br /&gt;    gl.glEnable(GL10.GL_DEPTH_TEST);&lt;br /&gt;    gl.glDepthFunc(GL10.GL_LEQUAL);&lt;br /&gt;    gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);&lt;br /&gt;    gl.glShadeModel(GL10.GL_SMOOTH);&lt;br /&gt;    gl.glDisable(GL10.GL_DITHER);&lt;br /&gt;    //載入貼圖  &lt;br /&gt;    LoadTexture(gl,context);&lt;br /&gt;    gl.glEnable(GL10.GL_TEXTURE_2D);&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  @Override&lt;br /&gt;  public void onSurfaceChanged(GL10 gl, int w, int h){&lt;br /&gt;    if(h==0)h=1;&lt;br /&gt;    float aspect = (float)w/h; &lt;br /&gt;    gl.glViewport(0, 0, w, h);&lt;br /&gt;    gl.glMatrixMode(GL10.GL_PROJECTION);&lt;br /&gt;    gl.glLoadIdentity(); &lt;br /&gt;    GLU.gluPerspective(gl, 45, aspect, 0.1f, 100.0f);&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  @Override&lt;br /&gt;  public void onDrawFrame(GL10 gl){&lt;br /&gt;    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);  &lt;br /&gt;    gl.glMatrixMode(GL10.GL_MODELVIEW);&lt;br /&gt;    gl.glLoadIdentity();&lt;br /&gt;    GLU.gluLookAt(gl, 0, 0, 4, 0, 0, 0, 0, 1, 0);&lt;br /&gt;    gl.glFrontFace(GL10.GL_CCW);&lt;br /&gt;    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);&lt;br /&gt;    gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);&lt;br /&gt;    //建立平面 &lt;br /&gt;    initPlane(gl, squVtx , squInx, squTex);&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  private void initPlane(GL10 gl,float[] vtx, short[] inx , float[] tx){ &lt;br /&gt;    gl.glVertexPointer( 3, GL10.GL_FLOAT, 0, getFloatBuffer(vtx));&lt;br /&gt;    gl.glTexCoordPointer( 2, GL10.GL_FLOAT, 0, getFloatBuffer(tx));&lt;br /&gt;    gl.glDrawElements(GL10.GL_TRIANGLES,&lt;br /&gt;                      inx.length, &lt;br /&gt;                      GL10.GL_UNSIGNED_SHORT, &lt;br /&gt;                      getShortBuffer(inx));&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  private void LoadTexture(GL10 gl, Context cont){&lt;br /&gt;    gl.glGenTextures(1, textureID, 0); &lt;br /&gt;    gl.glBindTexture(GL10.GL_TEXTURE_2D, textureID[0]);&lt;br /&gt;    gl.glTexParameterf(GL10.GL_TEXTURE_2D, &lt;br /&gt;                       GL10.GL_TEXTURE_MAG_FILTER, &lt;br /&gt;                       GL10.GL_LINEAR);&lt;br /&gt;    gl.glTexParameterf(GL10.GL_TEXTURE_2D,&lt;br /&gt;                       GL10.GL_TEXTURE_MIN_FILTER,&lt;br /&gt;                       GL10.GL_LINEAR);&lt;br /&gt;  &lt;br /&gt;    InputStream istream = cont.getResources().openRawResource(R.drawable.pic);&lt;br /&gt;    Bitmap bitmap;&lt;br /&gt;    try{&lt;br /&gt;      bitmap = BitmapFactory.decodeStream(istream);&lt;br /&gt;    }finally{&lt;br /&gt;      try{&lt;br /&gt;        istream.close();&lt;br /&gt;      }catch(IOException e){&lt;br /&gt;      }&lt;br /&gt;    } &lt;br /&gt;    GLUtils.texImage2D( GL10.GL_TEXTURE_2D, 0, bitmap, 0 ); &lt;br /&gt;    bitmap.recycle();&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  private FloatBuffer getFloatBuffer(float[] table ){&lt;br /&gt;    ByteBuffer bb = ByteBuffer.allocateDirect(table.length * 4);&lt;br /&gt;    bb.order(ByteOrder.nativeOrder());&lt;br /&gt;    FloatBuffer fb = bb.asFloatBuffer();&lt;br /&gt;    fb.put(table);&lt;br /&gt;    fb.position(0);&lt;br /&gt;    return fb;&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  private ShortBuffer getShortBuffer(short[] array ){&lt;br /&gt;    ByteBuffer ib = ByteBuffer.allocateDirect(array.length * 2);&lt;br /&gt;    ib.order(ByteOrder.nativeOrder());&lt;br /&gt;    ShortBuffer sb = ib.asShortBuffer();&lt;br /&gt;    sb.put(array);&lt;br /&gt;    sb.position(0);&lt;br /&gt;    return sb;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;執行結果：&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/TOFBIKyywxI/AAAAAAAAAZ8/YSzECUd22Fw/s1600/android_texture_result.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 283px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5539780625234576146" border="0" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/TOFBIKyywxI/AAAAAAAAAZ8/YSzECUd22Fw/s400/android_texture_result.jpg" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-3856319437433094603?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/3856319437433094603/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2010/11/android-opengl-es-loadtexture.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/3856319437433094603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/3856319437433094603'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2010/11/android-opengl-es-loadtexture.html' title='【教學】Android OpenGL ES LoadTexture'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_a8EDl0Lwf_Q/TOFBDOmC8wI/AAAAAAAAAZ0/QKFfKMIXH4A/s72-c/android_texture_project.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-8391389901644813729</id><published>2010-11-11T20:27:00.000-08:00</published><updated>2010-11-11T20:39:56.404-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>【教學】Android OpenGL ES Primitive_Cube</title><content type='html'>本範例是利用先前建立好的3D的基本框架，&lt;br /&gt;於A3DRender類別內增加畫方體的方法，&lt;br /&gt;先前畫Mesh範例用到頂點緩衝，&lt;br /&gt;此次增加索引緩衝，&lt;br /&gt;先定義出八個頂點的位置資訊，&lt;br /&gt;再用索引依序定義出各個三角面，&lt;br /&gt;專案為A3DCube，其A3DMain與A3DView內容不變，&lt;br /&gt;如下圖：&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/TNzDhQ1JE7I/AAAAAAAAAZU/iment-X6VQ4/s1600/android_cube_project.jpg"&gt;&lt;img style="WIDTH: 316px; HEIGHT: 400px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5538516617979827122" border="0" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/TNzDhQ1JE7I/AAAAAAAAAZU/iment-X6VQ4/s400/android_cube_project.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A3DRender內新增drawCube方法，&lt;br /&gt;此方法只用簡單的頂點緩衝VertexBuffer與索引緩衝IndexBuffer，&lt;br /&gt;透過OpenGL函式glDrawElements來畫出方體。&lt;br /&gt;程式碼如下：&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;package com.max;&lt;br /&gt;&lt;br /&gt;import android.opengl.GLSurfaceView;&lt;br /&gt;import android.opengl.GLU;&lt;br /&gt;import android.os.SystemClock;&lt;br /&gt;import javax.microedition.khronos.egl.EGLConfig;&lt;br /&gt;import javax.microedition.khronos.opengles.GL10;&lt;br /&gt;import java.nio.ByteBuffer;&lt;br /&gt;import java.nio.ByteOrder;&lt;br /&gt;import java.nio.FloatBuffer;&lt;br /&gt;import java.nio.ShortBuffer;&lt;br /&gt;&lt;br /&gt;public class A3DRender implements GLSurfaceView.Renderer{&lt;br /&gt;&lt;br /&gt;  private final static int VERTS = 8;&lt;br /&gt;  //頂點座標&lt;br /&gt;  float cubeVtx[] = { -1.0f,  1.0f, -1.0f,   //v0&lt;br /&gt;                      -1.0f,  1.0f,  1.0f,   //v1&lt;br /&gt;                       1.0f,  1.0f,  1.0f,   //v2&lt;br /&gt;                       1.0f,  1.0f, -1.0f,   //v3&lt;br /&gt;                      -1.0f, -1.0f, -1.0f,   //v4&lt;br /&gt;                      -1.0f, -1.0f,  1.0f,   //v5&lt;br /&gt;                       1.0f, -1.0f,  1.0f,   //v6&lt;br /&gt;                       1.0f, -1.0f, -1.0f }; //v7&lt;br /&gt;  //頂點索引&lt;br /&gt;  short cubeInx[] = { 0, 1, 2,   //Top_Face1&lt;br /&gt;                      0, 2, 3,   //Top_Face2&lt;br /&gt;                      4, 6, 5,   //Bottom_Face1&lt;br /&gt;                      4, 7, 6,   //Bottom_Face2&lt;br /&gt;                      2, 6, 7,   //Left_face1&lt;br /&gt;                      2, 7, 3,   //Left_Face2&lt;br /&gt;                      0, 4, 1,   //Right_Face1&lt;br /&gt;                      1, 4, 5,   //Right_Face2&lt;br /&gt;                      1, 5, 6,   //Front_Face1&lt;br /&gt;                      1, 6, 2,   //Front_Face2&lt;br /&gt;                      0, 3, 4,   //Back_Face1&lt;br /&gt;                      3, 7, 4 }; //Back_Face2&lt;br /&gt; &lt;br /&gt;  @Override&lt;br /&gt;  public void onSurfaceCreated(GL10 gl,EGLConfig config){&lt;br /&gt;    gl.glClearColor(0.2f, 0.2f, 0.2f, 1.0f); &lt;br /&gt;    gl.glShadeModel(GL10.GL_SMOOTH);&lt;br /&gt;    gl.glHint(GL10.GL_POINT_SMOOTH_HINT, GL10.GL_FASTEST); &lt;br /&gt;    gl.glClearDepthf(1.0f);&lt;br /&gt;    gl.glDepthFunc(GL10.GL_LEQUAL);&lt;br /&gt;    gl.glEnable(GL10.GL_DEPTH_TEST);  &lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  @Override&lt;br /&gt;  public void onSurfaceChanged(GL10 gl,int w,int h){&lt;br /&gt;    gl.glViewport(0, 0, w, h);&lt;br /&gt;    float ratio;&lt;br /&gt;    ratio = (float)w/h;&lt;br /&gt;    gl.glMatrixMode(GL10.GL_PROJECTION);&lt;br /&gt;    gl.glLoadIdentity(); &lt;br /&gt;    gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);  &lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  @Override&lt;br /&gt;  public void onDrawFrame(GL10 gl){ &lt;br /&gt;    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); &lt;br /&gt;    gl.glMatrixMode(GL10.GL_MODELVIEW);&lt;br /&gt;    gl.glLoadIdentity(); &lt;br /&gt;    GLU.gluLookAt(gl, 0, 0, 4, 0, 0, 0, 0, 1, 0);&lt;br /&gt;    gl.glFrontFace(GL10.GL_CCW);  &lt;br /&gt;    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);&lt;br /&gt;    //設置光源 &lt;br /&gt;    gl.glEnable(GL10.GL_LIGHT1);&lt;br /&gt;    FloatBuffer lightAmbient = FloatBuffer.wrap(new float[]{0.2f,0.0f,0.0f,1.0f});&lt;br /&gt;    FloatBuffer lightDiffuse = FloatBuffer.wrap(new float[]{0.8f,0.0f,0.0f,1.0f});&lt;br /&gt;    FloatBuffer lightSpecular =  FloatBuffer.wrap(new float[]{1.0f,0.0f,0.0f,1.0f});&lt;br /&gt;    FloatBuffer lightPosition = FloatBuffer.wrap(new float[]{3.0f,4.0f,10.0f,1.0f});&lt;br /&gt;    gl.glLightfv(GL10.GL_LIGHT1, GL10.GL_AMBIENT, lightAmbient);&lt;br /&gt;    gl.glLightfv(GL10.GL_LIGHT1, GL10.GL_DIFFUSE, lightDiffuse);&lt;br /&gt;    gl.glLightfv(GL10.GL_LIGHT1, GL10.GL_SPECULAR, lightSpecular);&lt;br /&gt;    gl.glLightfv(GL10.GL_LIGHT1, GL10.GL_POSITION, lightPosition);&lt;br /&gt;    gl.glEnable(GL10.GL_LIGHTING);&lt;br /&gt;    //動態旋轉  &lt;br /&gt;    long time = SystemClock.uptimeMillis()% 4000L;&lt;br /&gt;    float angle = 0.090f * ((int)time);&lt;br /&gt;    gl.glRotatef(angle, 1.0f, 0.0f, 0.0f);&lt;br /&gt;    gl.glRotatef(angle, 0.0f, 1.0f, 0.0f);&lt;br /&gt;    gl.glRotatef(angle, 0.0f, 0.0f, 1.0f);&lt;br /&gt;    //畫出方體  &lt;br /&gt;    drawCube( gl, cubeVtx , cubeInx );   &lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  private void drawCube(GL10 gl,float[] vtx, short[] inx){ &lt;br /&gt;    gl.glVertexPointer( 3, GL10.GL_FLOAT, 0, getFloatBuffer(vtx));&lt;br /&gt;    //透過索引緩衝來畫三角面&lt;br /&gt;    gl.glDrawElements(GL10.GL_TRIANGLES,&lt;br /&gt;                      inx.length,&lt;br /&gt;                      GL10.GL_UNSIGNED_SHORT,&lt;br /&gt;                      getShortBuffer(inx));&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  //頂點緩衝  &lt;br /&gt;  private FloatBuffer getFloatBuffer(float[] array ){&lt;br /&gt;    ByteBuffer bb = ByteBuffer.allocateDirect(array.length * 4);&lt;br /&gt;    bb.order(ByteOrder.nativeOrder());&lt;br /&gt;    FloatBuffer fb = bb.asFloatBuffer();&lt;br /&gt;    fb.put(array);&lt;br /&gt;    fb.position(0);&lt;br /&gt;    return fb;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  //索引緩衝&lt;br /&gt;  private ShortBuffer getShortBuffer(short[] array ){&lt;br /&gt;    ByteBuffer ib = ByteBuffer.allocateDirect(array.length * 2);&lt;br /&gt;    ib.order(ByteOrder.nativeOrder());&lt;br /&gt;    ShortBuffer sb = ib.asShortBuffer();&lt;br /&gt;    sb.put(array);&lt;br /&gt;    sb.position(0);&lt;br /&gt;    return sb;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;執行結果：&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/TNzDnmhl84I/AAAAAAAAAZc/yU7K4y74EZ0/s1600/android_cube_result.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 283px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5538516726882628482" border="0" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/TNzDnmhl84I/AAAAAAAAAZc/yU7K4y74EZ0/s400/android_cube_result.jpg" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-8391389901644813729?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/8391389901644813729/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2010/11/android-opengl-es-primitivecube.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/8391389901644813729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/8391389901644813729'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2010/11/android-opengl-es-primitivecube.html' title='【教學】Android OpenGL ES Primitive_Cube'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_a8EDl0Lwf_Q/TNzDhQ1JE7I/AAAAAAAAAZU/iment-X6VQ4/s72-c/android_cube_project.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-7152694567586574022</id><published>2010-11-05T06:57:00.000-07:00</published><updated>2010-11-05T07:29:05.508-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>【教學】Android OpenGL ES Primitive_Sphere</title><content type='html'>本範例是利用先前建立好的3D的基本框架，&lt;br /&gt;於A3DRender類別內增加畫球體的方法，&lt;br /&gt;於場景中增加一個光源，&lt;br /&gt;專案為A3DSphere，其A3DMain與A3DView內容不變，&lt;br /&gt;如下圖：&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/TNQQSrHukDI/AAAAAAAAAZE/NrDC2q5rwBs/s1600/android_sphere_project.jpg"&gt;&lt;img style="WIDTH: 263px; HEIGHT: 390px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5536067754944008242" border="0" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/TNQQSrHukDI/AAAAAAAAAZE/NrDC2q5rwBs/s400/android_sphere_project.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;程式碼如下:&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;package com.max;&lt;br /&gt;&lt;br /&gt;import android.opengl.GLSurfaceView;&lt;br /&gt;import android.opengl.GLU;&lt;br /&gt;import javax.microedition.khronos.egl.EGLConfig;&lt;br /&gt;import javax.microedition.khronos.opengles.GL10;&lt;br /&gt;import java.nio.ByteBuffer;&lt;br /&gt;import java.nio.ByteOrder;&lt;br /&gt;import java.nio.FloatBuffer;&lt;br /&gt;&lt;br /&gt;public class A3DRender implements GLSurfaceView.Renderer{&lt;br /&gt; &lt;br /&gt;  @Override&lt;br /&gt;  public void onSurfaceCreated(GL10 gl,EGLConfig config){&lt;br /&gt;    gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); &lt;br /&gt;    gl.glShadeModel(GL10.GL_SMOOTH);&lt;br /&gt;    gl.glHint(GL10.GL_POINT_SMOOTH_HINT, GL10.GL_FASTEST); &lt;br /&gt;    gl.glClearDepthf(1.0f);&lt;br /&gt;    gl.glDepthFunc(GL10.GL_LEQUAL);&lt;br /&gt;    gl.glEnable(GL10.GL_DEPTH_TEST);&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  @Override&lt;br /&gt;  public void onSurfaceChanged(GL10 gl,int w,int h){&lt;br /&gt;    gl.glViewport(0, 0, w, h);&lt;br /&gt;    float ratio;&lt;br /&gt;    ratio = (float)w/h;&lt;br /&gt;    gl.glMatrixMode(GL10.GL_PROJECTION);&lt;br /&gt;    gl.glLoadIdentity(); &lt;br /&gt;    gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);  &lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  @Override&lt;br /&gt;  public void onDrawFrame(GL10 gl){ &lt;br /&gt;    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); &lt;br /&gt;    gl.glMatrixMode(GL10.GL_MODELVIEW);&lt;br /&gt;    gl.glLoadIdentity(); &lt;br /&gt;    GLU.gluLookAt(gl, 0, 0, 6, 0, 0, 0, 0, 1, 0);&lt;br /&gt;    gl.glFrontFace(GL10.GL_CCW);&lt;br /&gt;    gl.glEnable(GL10.GL_LIGHT1);&lt;br /&gt;    //設置光源&lt;br /&gt;    FloatBuffer lightAmbient = FloatBuffer.wrap(new float[]{0.2f,0.0f,0.0f,1.0f});&lt;br /&gt;    FloatBuffer lightDiffuse = FloatBuffer.wrap(new float[]{0.8f,0.0f,0.0f,1.0f});&lt;br /&gt;    FloatBuffer lightSpecular = FloatBuffer.wrap(new float[]{1.0f,0.0f,0.0f,1.0f});&lt;br /&gt;    FloatBuffer lightPosition = FloatBuffer.wrap(new float[]{3.0f,4.0f,10.0f,1.0f});&lt;br /&gt;    gl.glLightfv(GL10.GL_LIGHT1, GL10.GL_AMBIENT, lightAmbient);&lt;br /&gt;    gl.glLightfv(GL10.GL_LIGHT1, GL10.GL_DIFFUSE, lightDiffuse);&lt;br /&gt;    gl.glLightfv(GL10.GL_LIGHT1, GL10.GL_SPECULAR, lightSpecular);&lt;br /&gt;    gl.glLightfv(GL10.GL_LIGHT1, GL10.GL_POSITION, lightPosition);&lt;br /&gt;    gl.glEnable(GL10.GL_LIGHTING);&lt;br /&gt;    //畫球體&lt;br /&gt;    drawSphere( gl, 2.0f, 32, 24 );&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  private void drawSphere(GL10 gl, float radius, int stacks, int slices){&lt;br /&gt;    FloatBuffer vertex = allocateFloatBuffer(4*6*stacks*(slices+1));&lt;br /&gt;    FloatBuffer normal = allocateFloatBuffer(4*6*stacks*(slices+1));&lt;br /&gt;    int triangles;&lt;br /&gt;    float stackstemp;&lt;br /&gt;    float slicestemp;&lt;br /&gt;    stackstemp = (float)Math.PI / stacks;&lt;br /&gt;    slicestemp = 2.0f*(float)Math.PI/ slices;&lt;br /&gt;    int i;&lt;br /&gt;    for(i=0; i &lt; stacks; ++i ){&lt;br /&gt;      float a = i*stackstemp;&lt;br /&gt;      float b = a+stackstemp;&lt;br /&gt;      float s0 = (float)Math.sin(a);&lt;br /&gt;      float s1 = (float)Math.sin(b);&lt;br /&gt;      float c0 = (float)Math.cos(a);&lt;br /&gt;      float c1 = (float)Math.cos(b); &lt;br /&gt;      float nv;&lt;br /&gt;      for(int j=0; j&lt;= slices;++j){&lt;br /&gt;        float c = j*slicestemp;&lt;br /&gt;        float x = (float)Math.cos(c);&lt;br /&gt;        float y = (float)Math.sin(c);&lt;br /&gt;        nv = x * s0;&lt;br /&gt;        normal.put(nv);&lt;br /&gt;        vertex.put(nv*radius); &lt;br /&gt;        nv = y * s0;&lt;br /&gt;        normal.put(nv);&lt;br /&gt;        vertex.put(nv*radius); &lt;br /&gt;        nv = c0;&lt;br /&gt;        normal.put(nv);&lt;br /&gt;        vertex.put(nv*radius); &lt;br /&gt;        nv = x * s1;&lt;br /&gt;        normal.put(nv);&lt;br /&gt;        vertex.put(nv*radius); &lt;br /&gt;        nv = y * s1;&lt;br /&gt;        normal.put(nv);&lt;br /&gt;        vertex.put(nv*radius); &lt;br /&gt;        nv = c1;&lt;br /&gt;        normal.put(nv);&lt;br /&gt;        vertex.put(nv*radius);&lt;br /&gt;      } &lt;br /&gt;    }&lt;br /&gt;    normal.position(0);&lt;br /&gt;    vertex.position(0);&lt;br /&gt;  &lt;br /&gt;    gl.glVertexPointer( 3, GL10.GL_FLOAT, 0, vertex);&lt;br /&gt;    gl.glNormalPointer(GL10.GL_FLOAT, 0, normal); &lt;br /&gt;    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);&lt;br /&gt;    gl.glEnableClientState(GL10.GL_NORMAL_ARRAY); &lt;br /&gt;    triangles = (slices+1)*2;&lt;br /&gt;    int k;&lt;br /&gt;    for( k=0; k &lt; stacks; k++ ){&lt;br /&gt;      gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, k*triangles, triangles);  &lt;br /&gt;    }  &lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  private FloatBuffer allocateFloatBuffer(int capacity){&lt;br /&gt;    ByteBuffer vbb = ByteBuffer.allocateDirect(capacity);&lt;br /&gt;    vbb.order(ByteOrder.nativeOrder());&lt;br /&gt;    return vbb.asFloatBuffer();&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;執行結果:&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/TNQQd-mFJBI/AAAAAAAAAZM/I_Zhn8iPpHk/s1600/android_sphere_result.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 282px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5536067949150151698" border="0" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/TNQQd-mFJBI/AAAAAAAAAZM/I_Zhn8iPpHk/s400/android_sphere_result.jpg" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-7152694567586574022?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/7152694567586574022/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2010/11/android-opengl-es-primitivesphere.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/7152694567586574022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/7152694567586574022'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2010/11/android-opengl-es-primitivesphere.html' title='【教學】Android OpenGL ES Primitive_Sphere'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/TNQQSrHukDI/AAAAAAAAAZE/NrDC2q5rwBs/s72-c/android_sphere_project.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-3279367944693387452</id><published>2010-11-04T07:38:00.000-07:00</published><updated>2010-11-05T07:30:44.434-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>【教學】Android OpenGL ES DrawEllipse</title><content type='html'>本範例是利用先前建立好的3D的基本框架，&lt;br /&gt;於A3DRender類別內增加畫橢圓形的方法，&lt;br /&gt;圓形基本上也是由三角面形成，&lt;br /&gt;所以範例內橢圓及圓形是用GL_TRIANGLE_FAN，&lt;br /&gt;定義出各個頂點的位置資訊(不含顏色資訊)，&lt;br /&gt;再用glDrawArrays畫出三角面，&lt;br /&gt;專案為A3DEllipse，其A3DMain與A3DView內容不變，&lt;br /&gt;如下圖：&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/TNLF-hHEACI/AAAAAAAAAY8/vJPMnDgL6c8/s1600/android_ellipse_project.jpg"&gt;&lt;img style="WIDTH: 268px; HEIGHT: 396px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5535704569822314530" border="0" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/TNLF-hHEACI/AAAAAAAAAY8/vJPMnDgL6c8/s400/android_ellipse_project.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A3DRender內新增drawEllipse方法，&lt;br /&gt;可分別給予長及寬的參數來決定形狀，&lt;br /&gt;程式碼如下：&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;package com.max;&lt;br /&gt;&lt;br /&gt;import android.opengl.GLSurfaceView;&lt;br /&gt;import android.opengl.GLU;&lt;br /&gt;import javax.microedition.khronos.egl.EGLConfig;&lt;br /&gt;import javax.microedition.khronos.opengles.GL10;&lt;br /&gt;import java.nio.ByteBuffer;&lt;br /&gt;import java.nio.ByteOrder;&lt;br /&gt;import java.nio.FloatBuffer;&lt;br /&gt;&lt;br /&gt;public class A3DRender implements GLSurfaceView.Renderer{&lt;br /&gt; &lt;br /&gt;  @Override&lt;br /&gt;  public void onSurfaceCreated(GL10 gl,EGLConfig config){&lt;br /&gt;    gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); &lt;br /&gt;    gl.glShadeModel(GL10.GL_SMOOTH);&lt;br /&gt;    gl.glHint(GL10.GL_POINT_SMOOTH_HINT, GL10.GL_FASTEST); &lt;br /&gt;    gl.glClearDepthf(1.0f);&lt;br /&gt;    gl.glDepthFunc(GL10.GL_LEQUAL);&lt;br /&gt;    gl.glEnable(GL10.GL_DEPTH_TEST);   &lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  @Override&lt;br /&gt;  public void onSurfaceChanged(GL10 gl,int w,int h){&lt;br /&gt;    gl.glViewport(0, 0, w, h);&lt;br /&gt;    float ratio;&lt;br /&gt;    ratio = (float)w/h;&lt;br /&gt;    gl.glMatrixMode(GL10.GL_PROJECTION);&lt;br /&gt;    gl.glLoadIdentity();&lt;br /&gt;    gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);  &lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  @Override&lt;br /&gt;  public void onDrawFrame(GL10 gl){  &lt;br /&gt;    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); &lt;br /&gt;    gl.glMatrixMode(GL10.GL_MODELVIEW);&lt;br /&gt;    gl.glLoadIdentity();  &lt;br /&gt;    GLU.gluLookAt(gl, 0, 0, 5, 0, 0, 0, 0, 1, 0);&lt;br /&gt;    gl.glFrontFace(GL10.GL_CCW);&lt;br /&gt;    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);&lt;br /&gt;    //橢圓形&lt;br /&gt;    drawEllipse( gl, 32, 3.0f, 1.0f, 0.0f, -4.0f, 0.0f,true );&lt;br /&gt;    //圓形&lt;br /&gt;    drawEllipse( gl, 24, 1.5f, 1.5f, 0.0f, 3.0f, 0.0f,false );&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  private void drawEllipse(GL10 gl,int seg,float w,float h,float px,float py,float&lt;br /&gt;pz,boolean filled){&lt;br /&gt;    gl.glTranslatef(px, py, pz);&lt;br /&gt;    float vertices[];&lt;br /&gt;    vertices = new float[seg*2];&lt;br /&gt;    int count=0;&lt;br /&gt;    for(float i=0; i&lt;360.0f; i+=(360.0f/seg)){&lt;br /&gt;      vertices[count++] = (float)Math.cos( degressToRadian(i) )*w;&lt;br /&gt;      vertices[count++] = (float)Math.sin( degressToRadian(i) )*h; &lt;br /&gt;    }&lt;br /&gt;    gl.glVertexPointer( 2, GL10.GL_FLOAT, 0, getFloatBuffer(vertices));&lt;br /&gt;    gl.glDrawArrays((filled)?GL10.GL_TRIANGLE_FAN:GL10.GL_LINE_LOOP, 0, seg);&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  private double degressToRadian(float deg){&lt;br /&gt;    double rad = 0;&lt;br /&gt;    rad = (deg * Math.PI)/180.0f;&lt;br /&gt;    return rad;&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  private FloatBuffer getFloatBuffer(float[] table ){&lt;br /&gt;    ByteBuffer bb = ByteBuffer.allocateDirect(table.length * 4);&lt;br /&gt;    bb.order(ByteOrder.nativeOrder());&lt;br /&gt;    FloatBuffer fb = bb.asFloatBuffer();&lt;br /&gt;    fb.put(table);&lt;br /&gt;    fb.position(0);&lt;br /&gt;    return fb;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;執行結果：&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/TNLF6N-craI/AAAAAAAAAY0/Bptg6g6PQgg/s1600/android_ellipse_result.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 284px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5535704495966432674" border="0" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/TNLF6N-craI/AAAAAAAAAY0/Bptg6g6PQgg/s400/android_ellipse_result.jpg" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-3279367944693387452?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/3279367944693387452/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2010/11/android-opengl-es-drawellipse.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/3279367944693387452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/3279367944693387452'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2010/11/android-opengl-es-drawellipse.html' title='【教學】Android OpenGL ES DrawEllipse'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/TNLF-hHEACI/AAAAAAAAAY8/vJPMnDgL6c8/s72-c/android_ellipse_project.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-6452962565666781543</id><published>2010-11-03T09:35:00.000-07:00</published><updated>2010-11-03T09:49:37.458-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>【教學】Android OpenGL ES DrawMesh</title><content type='html'>本範例是利用先前建立好的3D的基本框架，&lt;br /&gt;於A3DRender類別內增加畫三角面的方法，&lt;br /&gt;在OpenGL裡畫三角面可用GL_TRIANGLES，&lt;br /&gt;而三角面是幾何模型的最基本的單位，&lt;br /&gt;任何複雜的模型都是由三角面形成，&lt;br /&gt;所以範例內四方形面是用GL_TRIANGLE_STRIP，&lt;br /&gt;定義出四個頂點的位置資訊，不含顏色資訊，&lt;br /&gt;再用glDrawArrays畫出兩個三角面，&lt;br /&gt;專案為A3DMesh，其A3DMain與A3DView內容不變，&lt;br /&gt;如下圖：&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/TNGPoc3DNmI/AAAAAAAAAYk/nnEPvfVqhoc/s1600/android_mesh_project.jpg"&gt;&lt;img style="WIDTH: 258px; HEIGHT: 400px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5535363342119679586" border="0" alt="" src="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/TNGPoc3DNmI/AAAAAAAAAYk/nnEPvfVqhoc/s400/android_mesh_project.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A3DRender內新增drawTriMesh，drawSquMesh方法，&lt;br /&gt;此方法只用簡單的頂點緩衝VertexBuffer，&lt;br /&gt;往後範例再介紹索引緩衝IndexBuffer，&lt;br /&gt;程式碼如下：&lt;br /&gt;&lt;pre class="javascript" name="code" &gt;&lt;br /&gt;package com.max;&lt;br /&gt;&lt;br /&gt;import android.opengl.GLSurfaceView;&lt;br /&gt;import android.opengl.GLU;&lt;br /&gt;import javax.microedition.khronos.egl.EGLConfig;&lt;br /&gt;import javax.microedition.khronos.opengles.GL10;&lt;br /&gt;import java.nio.ByteBuffer;&lt;br /&gt;import java.nio.ByteOrder;&lt;br /&gt;import java.nio.IntBuffer;&lt;br /&gt;import java.nio.FloatBuffer;&lt;br /&gt;&lt;br /&gt;public class A3DRender implements GLSurfaceView.Renderer{&lt;br /&gt;&lt;br /&gt;  float triVtx[] = { -1.0f, -1.0f, 0, &lt;br /&gt;                      1.0f, -1.0f, 0,&lt;br /&gt;                      0.0f,  1.0f, 0 };&lt;br /&gt; &lt;br /&gt;  float squVtx[] = { -1.0f, 1.0f, 0,   &lt;br /&gt;                     -1.0f,-1.0f, 0,&lt;br /&gt;                      1.0f, 1.0f, 0,&lt;br /&gt;                      1.0f,-1.0f, 0 };&lt;br /&gt;               &lt;br /&gt;  @Override&lt;br /&gt;  public void onSurfaceCreated(GL10 gl,EGLConfig config){&lt;br /&gt;    gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); &lt;br /&gt;    gl.glShadeModel(GL10.GL_SMOOTH);&lt;br /&gt;    gl.glHint(GL10.GL_POINT_SMOOTH_HINT, GL10.GL_FASTEST);&lt;br /&gt;    gl.glClearDepthf(1.0f);&lt;br /&gt;    gl.glDepthFunc(GL10.GL_LEQUAL);&lt;br /&gt;    gl.glEnable(GL10.GL_DEPTH_TEST);  &lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  @Override&lt;br /&gt;  public void onSurfaceChanged(GL10 gl,int w,int h){&lt;br /&gt;    gl.glViewport(0, 0, w, h);&lt;br /&gt;    float ratio;&lt;br /&gt;    ratio = (float)w/h;&lt;br /&gt;    gl.glMatrixMode(GL10.GL_PROJECTION);&lt;br /&gt;    gl.glLoadIdentity();&lt;br /&gt;    gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);&lt;br /&gt;    //GLU.gluOrtho2D(gl, 0.0f, w, h, 0.0f);  &lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  @Override&lt;br /&gt;  public void onDrawFrame(GL10 gl){ &lt;br /&gt;    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); &lt;br /&gt;    gl.glMatrixMode(GL10.GL_MODELVIEW);&lt;br /&gt;    gl.glLoadIdentity(); &lt;br /&gt;    GLU.gluLookAt(gl, 0, 0, 5, 0, 0, 0, 0, 1, 0);&lt;br /&gt;    gl.glFrontFace(GL10.GL_CCW); //逆時針&lt;br /&gt;     gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);&lt;br /&gt;    drawTriMesh(gl, triVtx ); // 畫三角面 &lt;br /&gt;    drawSquMesh(gl, squVtx ); // 畫四角面  &lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  private void drawTriMesh(GL10 gl,float[] vtx){ &lt;br /&gt;    gl.glVertexPointer( 3, GL10.GL_FLOAT, 0, getFloatBuffer(vtx));&lt;br /&gt;    gl.glTranslatef(-2.0f, 0, 0);&lt;br /&gt;    gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  private void drawSquMesh(GL10 gl,float[] vtx){ &lt;br /&gt;    gl.glVertexPointer( 3, GL10.GL_FLOAT, 0, getFloatBuffer(vtx));&lt;br /&gt;    gl.glTranslatef( 4.0f, 0, 0);&lt;br /&gt;    gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  private FloatBuffer getFloatBuffer(float[] table ){&lt;br /&gt;    ByteBuffer bb = ByteBuffer.allocateDirect(table.length * 4);&lt;br /&gt;    bb.order(ByteOrder.nativeOrder());&lt;br /&gt;    FloatBuffer fb = bb.asFloatBuffer();&lt;br /&gt;    fb.put(table);&lt;br /&gt;    fb.position(0);&lt;br /&gt;    return fb;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;執行結果：&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/TNGPtALqowI/AAAAAAAAAYs/hVUZ_U-3e5g/s1600/android_mesh_result.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 285px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5535363420320867074" border="0" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/TNGPtALqowI/AAAAAAAAAYs/hVUZ_U-3e5g/s400/android_mesh_result.jpg" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-6452962565666781543?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/6452962565666781543/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2010/11/android-opengl-es-drawmesh.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/6452962565666781543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/6452962565666781543'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2010/11/android-opengl-es-drawmesh.html' title='【教學】Android OpenGL ES DrawMesh'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_a8EDl0Lwf_Q/TNGPoc3DNmI/AAAAAAAAAYk/nnEPvfVqhoc/s72-c/android_mesh_project.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-7908034742730945547</id><published>2010-11-03T04:29:00.000-07:00</published><updated>2010-11-03T09:41:11.699-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>【教學】Android OpenGL ES DrawLine</title><content type='html'>本範例是利用先前建立好的3D的基本框架，&lt;br /&gt;於A3DRender類別內增加畫線段的方法，&lt;br /&gt;總共畫出兩種線，一種是線段，另一種是封閉線，&lt;br /&gt;線段可用GL_LINES，封閉線用GL_LINE_LOOP，&lt;br /&gt;畫線主要是定義出頂點的位置與顏色還有大小，&lt;br /&gt;有了頂點資訊再用glDrawArrays將其畫出，&lt;br /&gt;專案為A3DLine，其A3DMain與A3DView內容不變，&lt;br /&gt;如下圖：&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/TNFH0Ws-bzI/AAAAAAAAAYU/tWAJ_fMKPSQ/s1600/android_line_project.jpg"&gt;&lt;img style="WIDTH: 276px; HEIGHT: 400px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5535284381788041010" border="0" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/TNFH0Ws-bzI/AAAAAAAAAYU/tWAJ_fMKPSQ/s400/android_line_project.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A3DRender內新增drawLines，drawLineLoop與getIntBuffer方法，&lt;br /&gt;成像方面由透視改成正交模式，程式碼如下：&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;package com.max&lt;br /&gt;&lt;br /&gt;import android.opengl.GLSurfaceView;&lt;br /&gt;import android.opengl.GLU;&lt;br /&gt;import javax.microedition.khronos.egl.EGLConfig;&lt;br /&gt;import javax.microedition.khronos.opengles.GL10;&lt;br /&gt;import java.nio.ByteBuffer;&lt;br /&gt;import java.nio.ByteOrder;&lt;br /&gt;import java.nio.IntBuffer;&lt;br /&gt;&lt;br /&gt;public class A3DRender implements GLSurfaceView.Renderer{&lt;br /&gt;  &lt;br /&gt;  int one = 0x10000;&lt;br /&gt;  int lineVtPos1[] = { one*300, one*100, 0,&lt;br /&gt;                       one*100, one*400, 0 };&lt;br /&gt;  int lineColor1[] = { one, one, one, one,&lt;br /&gt;                       one, one, one, one };&lt;br /&gt;  int lineVtPos2[] = { one*300, one*100, 0, &lt;br /&gt;                       one*300, one*400, 0,&lt;br /&gt;                       one*100, one*400, 0,&lt;br /&gt;                       one*100, one*100, 0 };&lt;br /&gt;  int lineColor2[] = { one,   0,   0, one, &lt;br /&gt;                       one,   0, one, one,&lt;br /&gt;                         0, one, one, one,&lt;br /&gt;                         0, one,   0, one },&lt;br /&gt;                      &lt;br /&gt;  @Override&lt;br /&gt;  public void onSurfaceCreated(GL10 gl,EGLConfig config){&lt;br /&gt;    gl.glClearColor(0.0f,0.0f,0.0f,1.0f);//背景黑色&lt;br /&gt;    //gl.glShadeModel(GL10.GL_FLAT);      //原本單一色註解&lt;br /&gt;    gl.glShadeModel(GL10.GL_SMOOTH);      //平滑漸變色      &lt;br /&gt;    gl.glHint(GL10.GL_POINT_SMOOTH_HINT,GL10.GL_FASTEST);&lt;br /&gt;    gl.glEnable(GL10.GL_LINE_SMOOTH);&lt;br /&gt;    gl.EnableClientState(GL10.GL_VERTEX_ARRAY);&lt;br /&gt;    gl.EnableClientState(GL10.GL_COLOR_ARRAY);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public void onSurfaceChanged(GL10 gl,int w,int h){&lt;br /&gt;    gl.glViewport( 0, 0, w, h );&lt;br /&gt;    //float ratio;&lt;br /&gt;    //ratio = (float)w/h;&lt;br /&gt;    gl.glMatrixMode(GL10.GL_PROJECTION);&lt;br /&gt;    gl.glLoadIndentity();&lt;br /&gt;    //gl.glFrustumf(-ratio,ratio,-1,1,1,500);&lt;br /&gt;    GLU.gluOrtho2D(gl, 0.0f, w, h, 0.0f);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public void onDrawFrame(GL10 gl){&lt;br /&gt;    //gl.glClear(GL10.GL_COLOR_BUFFER_BIT);&lt;br /&gt;    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);&lt;br /&gt;    gl.glMatrixMode(GL10.GL_MODEVIEW);&lt;br /&gt;    gl.glLoadIndentity();&lt;br /&gt;    // 畫線段&lt;br /&gt;    drawLines( gl, lineVtPos1, lineColor1, 3.0f );&lt;br /&gt;    // 畫封閉線&lt;br /&gt;    drawLineLoop( gl, lineVtPos2, lineColor2, 4.0f );&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  private void drawLines(GL10 gl, int[] vtx, int[] col, float siz){&lt;br /&gt;    gl.glLineWidth(siz);&lt;br /&gt;    gl.glVertexPointer( 3, GL10.GL_FIXED, 0, getIntBuffer(vtx) );&lt;br /&gt;    gl.glColorPointer( 4, GL10.GL_FIXED, 0, getIntBuffer(col) );&lt;br /&gt;    gl.glDrawArrays(GL10.GL_LINES, 0, 2);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  private void drawLineLoop(GL10 gl, int[] vtx, int[] col, float siz){&lt;br /&gt;    gl.glLineWidth(siz);&lt;br /&gt;    gl.glVertexPointer( 3, GL10.GL_FIXED, 0, getIntBuffer(vtx) );&lt;br /&gt;    gl.glColorPointer( 4, GL10.GL_FIXED, 0, getIntBuffer(col) );&lt;br /&gt;    gl.glDrawArrays(GL10.GL_LINE_LOOP, 0, 4);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  private IntBuffer getIntBuffer(int[] table){&lt;br /&gt;    ByteBuffer bb = ByteBuffer.allocateDirect( table.length*4);&lt;br /&gt;    bb.order(ByteOrder.nativeOrder());&lt;br /&gt;    IntBuffer ib = bb.asIntBuffer();&lt;br /&gt;    ib.put(table);&lt;br /&gt;    ib.position(0);&lt;br /&gt;    return ib;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;執行結果：&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/TNFH6Ha9rZI/AAAAAAAAAYc/9DU90MM3Wfo/s1600/android_line_result.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 284px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5535284480765177234" border="0" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/TNFH6Ha9rZI/AAAAAAAAAYc/9DU90MM3Wfo/s400/android_line_result.jpg" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-7908034742730945547?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/7908034742730945547/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2010/11/android-opengl-es-drawline.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/7908034742730945547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/7908034742730945547'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2010/11/android-opengl-es-drawline.html' title='【教學】Android OpenGL ES DrawLine'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/TNFH0Ws-bzI/AAAAAAAAAYU/tWAJ_fMKPSQ/s72-c/android_line_project.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-7496519011006864199</id><published>2010-11-02T05:16:00.000-07:00</published><updated>2010-11-03T04:37:33.982-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>【教學】Android OpenGL ES DrawPoint</title><content type='html'>本範例是利用先前建立好的3D的基本框架，&lt;br /&gt;於A3DRender類別內增加畫頂點的方法，&lt;br /&gt;在OpenGL裡畫點是用GL_POINTS，&lt;br /&gt;定義出頂點的位置與顏色還有大小，&lt;br /&gt;有了頂點資訊再用glDrawArrays將其畫出，&lt;br /&gt;專案為A3DPoint，其A3DMain與A3DView內容不變，&lt;br /&gt;如下圖：&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/TNABa9YYe3I/AAAAAAAAAYE/PIl9Qu31RL8/s1600/project.jpg"&gt;&lt;img style="WIDTH: 261px; HEIGHT: 371px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5534925504703396722" border="0" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/TNABa9YYe3I/AAAAAAAAAYE/PIl9Qu31RL8/s400/project.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A3DRender內新增drawPoint與getIntBuffer方法，&lt;br /&gt;成像方面由透視改成正交模式，程式碼如下：&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;package com.max&lt;br /&gt;&lt;br /&gt;import android.opengl.GLSurfaceView;&lt;br /&gt;import android.opengl.GLU;&lt;br /&gt;import javax.microedition.khronos.egl.EGLConfig;&lt;br /&gt;import javax.microedition.khronos.opengles.GL10;&lt;br /&gt;import java.nio.ByteBuffer;&lt;br /&gt;import java.nio.ByteOrder;&lt;br /&gt;import java.nio.IntBuffer;&lt;br /&gt;&lt;br /&gt;public class A3DRender implements GLSurfaceView.Renderer{&lt;br /&gt;  int one = 0x10000;&lt;br /&gt;  // 頂點座標X,Y,Z&lt;br /&gt;  int vertexArray[][] = { {one*120,one*200,0},&lt;br /&gt;                          {one*150,one*250,0},&lt;br /&gt;                          {one*200,one*150,0},&lt;br /&gt;                          {one*50,one*100,0},&lt;br /&gt;                          {one*250,one*50,0},&lt;br /&gt;                          {one*250,one*300,0} };&lt;br /&gt;  // 頂點顏色RGBA&lt;br /&gt;  int colorArray[][] = { {one,0,0,one}, &lt;br /&gt;                         {one,one,0,one},&lt;br /&gt;                         {one,0,one,one},&lt;br /&gt;                         {one,one,one,one},&lt;br /&gt;                         {0,one,one,one},&lt;br /&gt;                         {0,0,one,one} };&lt;br /&gt;  // 頂點大小&lt;br /&gt;  int sizeArray[] = {4,8,16,24,32,64};&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public void onSurfaceCreated(GL10 gl,EGLConfig config){&lt;br /&gt;    gl.glClearColor( 0.0f, 1.0f, 0.0f, 1.0f);&lt;br /&gt;    gl.glShadeModel(GL10.GL_FLAT);&lt;br /&gt;    gl.glHint(GL10.GL_POINT_SMOOTH_HINT, GL10.GL_FASTEST);&lt;br /&gt;    gl.EnableClientState(GL10.GL_VERTEX_ARRAY);&lt;br /&gt;    gl.EnableClientState(GL10.GL_COLOR_ARRAY);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public void onSurfaceChanged(GL10 gl,int w,int h){&lt;br /&gt;    gl.glViewport( 0, 0, w, h );&lt;br /&gt;    gl.glMatrixMode(GL10.GL_PROJECTION);&lt;br /&gt;    gl.glLoadIndentity();&lt;br /&gt;    //float ratio;&lt;br /&gt;    //ratio = (float)w/h;&lt;br /&gt;    //gl.glFrustumf(-ratio,ratio,-1,1,1,500);&lt;br /&gt;    GLU.gluOrtho2D(gl, 0.0f, w, h, 0.0f);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public void onDrawFrame(GL10 gl){&lt;br /&gt;    //gl.glClear(GL10.GL_COLOR_BUFFER_BIT);&lt;br /&gt;    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);&lt;br /&gt;    gl.glMatrixMode(GL10.GL_MODEVIEW);&lt;br /&gt;    gl.glLoadIndentity();&lt;br /&gt;    int vtCount = vertexArray.length;&lt;br /&gt;    for(int i=0; i&lt;;vtCount i++){&lt;br /&gt;      drawPoint( gl, vertexArray[i], colorArray[i], sizeArray[i] );&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  private void drawPoint(GL10 gl, int[] vtx, int[] col, int siz){&lt;br /&gt;    gl.glPointSize(siz);&lt;br /&gt;    gl.glVertexPointer( 3, GL10.GL_FIXED, 0, getIntBuffer(vtx) );&lt;br /&gt;    gl.glColorPointer( 4, GL10.GL_FIXED, 0, getIntBuffer(col) );&lt;br /&gt;    gl.glDrawArrays(GL10.GL_POINTS, 0, 1);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  private IntBuffer getIntBuffer(int[] table){&lt;br /&gt;    ByteBuffer bb = ByteBuffer.allocateDirect( table.length*4);&lt;br /&gt;    bb.order(ByteOrder.nativeOrder());&lt;br /&gt;    IntBuffer ib = bb.asIntBuffer();&lt;br /&gt;    ib.put(table);&lt;br /&gt;    ib.position(0);&lt;br /&gt;    return ib;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;執行結果：&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/TNABi5oyyWI/AAAAAAAAAYM/kUTV8RGIkOw/s1600/result1.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 285px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5534925641137441122" border="0" alt="" src="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/TNABi5oyyWI/AAAAAAAAAYM/kUTV8RGIkOw/s400/result1.jpg" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-7496519011006864199?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/7496519011006864199/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2010/11/android-opengl-es-drawpoint.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/7496519011006864199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/7496519011006864199'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2010/11/android-opengl-es-drawpoint.html' title='【教學】Android OpenGL ES DrawPoint'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_a8EDl0Lwf_Q/TNABa9YYe3I/AAAAAAAAAYE/PIl9Qu31RL8/s72-c/project.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-4641244498204408295</id><published>2010-11-01T06:16:00.000-07:00</published><updated>2010-11-02T01:27:01.475-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>【教學】Android OpenGL ES 3D基本框架建立</title><content type='html'>本範例是在Android構建一個3D的基本框架，&lt;br /&gt;於src內自行新增兩個類別，如下圖：&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/TM6_z6pEfBI/AAAAAAAAAXc/X6iSRMlUdPo/s1600/A3DFramework_project.jpg"&gt;&lt;img style="WIDTH: 303px; HEIGHT: 400px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5534571890720668690" border="0" alt="" src="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/TM6_z6pEfBI/AAAAAAAAAXc/X6iSRMlUdPo/s400/A3DFramework_project.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;建立流程：&lt;br /&gt;(1) 於Android Project中先建立一個渲染類別"A3DRender"&lt;br /&gt;程式碼如下：&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;package com.max&lt;br /&gt;&lt;br /&gt;import android.opengl.GLSurfaceView;&lt;br /&gt;import javax.microedition.khronos.egl.EGLConfig;&lt;br /&gt;import javax.microedition.khronos.opengles.GL10;&lt;br /&gt;&lt;br /&gt;public class A3DRender implements GLSurfaceView.Renderer{&lt;br /&gt;  &lt;br /&gt;  @Override&lt;br /&gt;  public void onSurfaceCreated(GL10 gl,EGLConfig config){&lt;br /&gt;    gl.glClearColor( 0.0f, 1.0f, 0.0f, 1.0f);// 3D背景色rgba&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public void onSurfaceChanged(GL10 gl,int w,int h){&lt;br /&gt;    gl.glViewport( 0, 0, w, h );&lt;br /&gt;    gl.glMatrixMode( GL10.GL_PROJECTION);&lt;br /&gt;    gl.glLoadIndntity();&lt;br /&gt;    float ratio;&lt;br /&gt;    ratio = (float)w/h;&lt;br /&gt;    gl.glFrustumf(-ratio,ratio,-1,1,1,500);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public void onDrawFrame(GL10 gl){&lt;br /&gt;    gl.glClear(GL10.GL_COLOR_BUFFER_BIT);&lt;br /&gt;    gl.glMatrixMode(GL10.GL_MODEVIEW);&lt;br /&gt;    gl.glLoadIndentity();&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;(2) 接下來是建立一個 A3DView類別，用來顯示OpenGL視圖&lt;br /&gt;程式碼如下：&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;package com.max&lt;br /&gt;&lt;br /&gt;import android.content.Context;&lt;br /&gt;import android.opengl.GLSurfaceView;&lt;br /&gt;import com.max.A3DRender;&lt;br /&gt;&lt;br /&gt;public class A3DView extends GLSurfaceView{&lt;br /&gt;&lt;br /&gt;  private A3DRender mA3DRender; &lt;br /&gt;&lt;br /&gt;  public A3DView(Context context){&lt;br /&gt;    super(context);&lt;br /&gt;    &lt;br /&gt;    mA3DRender = new A3DRender();&lt;br /&gt;    setRenderer(mA3DRender);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;(3) 於主程式將A3DView加入其中，之後執行。&lt;br /&gt;程式碼如下：&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;package com.max&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import com.max.A3DView;&lt;br /&gt;&lt;br /&gt;public class A3DMain extends Activity{&lt;br /&gt;  &lt;br /&gt;  private A3DView mA3DView;&lt;br /&gt;&lt;br /&gt;  public void onCreate(Bundle savedInstanceState){&lt;br /&gt;    super.onCreate(savedInstanceState);&lt;br /&gt;    // setContentView(R.layout.main);&lt;br /&gt;    &lt;br /&gt;    mA3DView = new A3DView(this);&lt;br /&gt;    setContentView(mA3DView);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;執行結果：&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/TM7AEaDtn_I/AAAAAAAAAXk/GgRSJtAh3qg/s1600/A3DFramework_result.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 285px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5534572174031822834" border="0" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/TM7AEaDtn_I/AAAAAAAAAXk/GgRSJtAh3qg/s400/A3DFramework_result.jpg" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-4641244498204408295?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/4641244498204408295/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2010/11/android-opengl-es-3d.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/4641244498204408295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/4641244498204408295'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2010/11/android-opengl-es-3d.html' title='【教學】Android OpenGL ES 3D基本框架建立'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_a8EDl0Lwf_Q/TM6_z6pEfBI/AAAAAAAAAXc/X6iSRMlUdPo/s72-c/A3DFramework_project.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-1503332545849999674</id><published>2010-10-26T07:02:00.001-07:00</published><updated>2011-05-05T07:31:48.296-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>【教學】拖曳3D模型物件</title><content type='html'>&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;  import flash.events.Event;&lt;br /&gt;  import flash.events.MouseEvent;&lt;br /&gt;&lt;br /&gt;  import org.papervision3d.core.math.Number3D;&lt;br /&gt;  import org.papervision3d.core.math.Plane3D;&lt;br /&gt;  import org.papervision3d.core.geom.renderables.Vertex3D;&lt;br /&gt;  import org.papervision3d.objects.DisplayObject3D;&lt;br /&gt;  import org.papervision3d.view.BasicView;&lt;br /&gt;  import org.papervision3d.materials.WireframeMaterial;&lt;br /&gt;  import org.papervision3d.lights.PointLight3D;&lt;br /&gt;  import org.papervision3d.materials.shadematerials.PhongMaterial;&lt;br /&gt;  import org.papervision3d.objects.parsers.Max3DS;&lt;br /&gt;  import org.papervision3d.objects.primitives.Plane;&lt;br /&gt;  import org.papervision3d.events.FileLoadEvent;&lt;br /&gt;  import org.papervision3d.events.InteractiveScene3DEvent;&lt;br /&gt;  import org.papervision3d.render.QuadrantRenderEngine;&lt;br /&gt;&lt;br /&gt;  public class ModelDrag extends BasicView&lt;br /&gt;  {&lt;br /&gt;    private var planeMat:WireframeMaterial;&lt;br /&gt;    private var planeMod:Plane;&lt;br /&gt; &lt;br /&gt;    private var shaderlight:PointLight3D;&lt;br /&gt;    private var phongMat:PhongMaterial;&lt;br /&gt;    private var wireMat:WireframeMaterial;&lt;br /&gt; &lt;br /&gt;    private var max3dsMod:Max3DS;&lt;br /&gt;    private var teapotMod:DisplayObject3D;&lt;br /&gt; &lt;br /&gt;    private var planeToDragOn:Plane3D;&lt;br /&gt;    private var currentModel:DisplayObject3D;&lt;br /&gt;  &lt;br /&gt;    public function ModelDrag()&lt;br /&gt;    {&lt;br /&gt;      init3DObject();&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    private function init3DObject():void&lt;br /&gt;    {&lt;br /&gt;      planeMat = new WireframeMaterial(0x00FF00, 1, 0);&lt;br /&gt;      planeMod = new Plane(planeMat, 500, 500, 8, 8);&lt;br /&gt;      planeMod.localRotationX = -90;&lt;br /&gt;      scene.addChild(planeMod);&lt;br /&gt;  &lt;br /&gt;      max3dsMod = new Max3DS();&lt;br /&gt;      max3dsMod.load("Model.3DS");&lt;br /&gt;      max3dsMod.addEventListener( FileLoadEvent.LOAD_COMPLETE, onfileLoadHandle );&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    private function onfileLoadHandle(event:FileLoadEvent):void&lt;br /&gt;    {&lt;br /&gt;      viewport.opaqueBackground = 0x0;&lt;br /&gt;      viewport.interactive = true;&lt;br /&gt;  &lt;br /&gt;      max3dsMod.scale = 1;&lt;br /&gt;      var tmpMod:Max3DS = Max3DS(event.target);&lt;br /&gt;      scene.addChild(tmpMod);&lt;br /&gt;  &lt;br /&gt;      shaderlight = new PointLight3D(true);&lt;br /&gt;      shaderlight.position = new Number3D( -300, 300, -300 );&lt;br /&gt;      scene.addChild(shaderlight);&lt;br /&gt;      phongMat = new PhongMaterial( shaderlight, 0xFFFFFF, 0x555555, 100 );&lt;br /&gt;      phongMat.interactive = true;&lt;br /&gt;  &lt;br /&gt;      wireMat = new WireframeMaterial(0xFFFFFF, 1, 0);&lt;br /&gt;      wireMat.interactive = true;&lt;br /&gt;      teapotMod = tmpMod.getChildByName("Teapot");&lt;br /&gt;      teapotMod.material = phongMat;&lt;br /&gt;      teapotMod.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS,teapotModPressHandler);&lt;br /&gt;  &lt;br /&gt;      stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);&lt;br /&gt;  &lt;br /&gt;      var up:Number3D = new Number3D(0, 1, 0);&lt;br /&gt;      planeToDragOn = new Plane3D(up, new Number3D(0,0,0));&lt;br /&gt;   &lt;br /&gt;      camera.y = 100;&lt;br /&gt;      camera.z = -200;&lt;br /&gt;&lt;br /&gt;      renderer = new QuadrantRenderEngine(QuadrantRenderEngine.CORRECT_Z_FILTER);&lt;br /&gt;      startRendering();&lt;br /&gt;    }&lt;br /&gt;            &lt;br /&gt;    private function teapotModPressHandler(event:InteractiveScene3DEvent):void&lt;br /&gt;    {&lt;br /&gt;      currentModel = event.displayObject3D as DisplayObject3D;&lt;br /&gt;      teapotMod.material = wireMat; &lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    private function mouseUpHandler(event:MouseEvent):void&lt;br /&gt;    {&lt;br /&gt;      currentModel = null;&lt;br /&gt;      teapotMod.material = phongMat;&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    override protected function onRenderTick(event:Event = null):void&lt;br /&gt;    { &lt;br /&gt;      var ray:Number3D = camera.unproject(viewport.containerSprite.mouseX, viewport.containerSprite.mouseY);&lt;br /&gt;      ray = Number3D.add(ray, camera.position);&lt;br /&gt;&lt;br /&gt;      var cameraVertex3D:Vertex3D = new Vertex3D(camera.x, camera.y, camera.z);&lt;br /&gt;      var rayVertex3D:Vertex3D = new Vertex3D(ray.x, ray.y, ray.z);&lt;br /&gt;&lt;br /&gt;      var intersectPoint:Vertex3D = planeToDragOn.getIntersectionLine(cameraVertex3D, rayVertex3D);&lt;br /&gt;  &lt;br /&gt;      if(currentModel)&lt;br /&gt;      {&lt;br /&gt;        currentModel.x = intersectPoint.x;&lt;br /&gt;        currentModel.y = intersectPoint.y;&lt;br /&gt;        currentModel.z = intersectPoint.z;&lt;br /&gt;        viewport.buttonMode = true;&lt;br /&gt;      }&lt;br /&gt;      else&lt;br /&gt;      {&lt;br /&gt;        viewport.buttonMode = false;&lt;br /&gt;      }&lt;br /&gt;  &lt;br /&gt;      super.onRenderTick(event);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/TMbfj9-9S1I/AAAAAAAAAWk/bNrLsNc2BuI/s1600/demo.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 290px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5532355001298275154" border="0" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/TMbfj9-9S1I/AAAAAAAAAWk/bNrLsNc2BuI/s400/demo.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://igmax.myweb.hinet.net/demo_modeldrag/ModelDrag.html" target="_blank"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-1503332545849999674?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/1503332545849999674/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2010/10/3d.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/1503332545849999674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/1503332545849999674'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2010/10/3d.html' title='【教學】拖曳3D模型物件'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_a8EDl0Lwf_Q/TMbfj9-9S1I/AAAAAAAAAWk/bNrLsNc2BuI/s72-c/demo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-3211376065409066872</id><published>2010-10-25T07:50:00.000-07:00</published><updated>2010-10-25T08:29:47.832-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>【教學】在Windows 7 上安裝 Android 開發環境步驟</title><content type='html'>&lt;strong&gt;&lt;span style="font-family:verdana;"&gt;Step1:下載安裝JDK1.6 &lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;(1)連結 &lt;/span&gt;&lt;a href="http://java.sun.com/javase/downloads/index.jsp"&gt;&lt;span style="font-family:Verdana;"&gt;http://java.sun.com/javase/downloads/index.jsp&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:Verdana;"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;下載"jdk-6u22-windows-i586.exe"安裝執行檔.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;(2)直接執行安裝檔,&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;安裝JDK至預設目錄&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;(C:\Program Files\Java\jdk1.6.0_22\) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;(3)在桌面"電腦"點擊滑鼠右鍵,選取"內容",再選取"進階系統設定",&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;之後選"環境變數"找到"Path"變數名,點擊"編輯",&lt;/span&gt; &lt;span style="font-family:Verdana;"&gt;添加JDK的bin路徑&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;(C:\Program Files\Java\jdk1.6.0_22\bin),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;完成後按"確定".&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;(4)於"系統變數"裡找到"CLASSPATH"變數名,&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;點擊"編輯",&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;添加JDK的lib及demo路徑&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;(C:\Program Files\Java\jdk1.6.0_22\lib)及&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;(C:\Program Files\Java\jdk1.6.0_22\demo),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;完成後按"確定".&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;(5)執行"CMD" "java -version",檢測JDK是否安裝成功.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;strong&gt;Step2:下載安裝Eclipse&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;(1)登錄 http://www.eclipse.org/downloads/,&lt;br /&gt;選擇"Eclipse IDE for Java Developers"下載,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;(2)直接下載壓縮包.eclipse-java-galileo-SR2-win32,&lt;br /&gt;解壓eclipse資料夾至C:\Program Files\.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;strong&gt;Step3:下載安裝Android SDK&lt;br /&gt;&lt;/strong&gt;(1) 連結至http://developer.android.com/sdk/index.html,&lt;br /&gt;"選取"android-sdk-r07-windows.zip"下載,&lt;br /&gt;解壓縮下載好的SDK安裝包到要安裝的路徑(C:\Program Files\),&lt;br /&gt;執行"Setup.exe"安裝.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;(2) "Android SDK and AVD Manager"窗口選"Settings",&lt;br /&gt;勾選完右下方點擊"Save &amp;amp; Apply",&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;(3) 重新執行"Setup.exe".&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;(4) 選"Available Packages"點擊"Install Selected"按鈕,安裝軟件包.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;(5) 點擊"Accept All","Install Accepted"按鈕,開始下載安裝包 .&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;(6) 在桌面"電腦"點擊滑鼠右鍵,選取"內容",再選取"進階系統設定",&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;之後選"系統變量" 找到"Path"變數名,點擊"編輯",&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;(Android SDK安裝文件下的tools文件夾路徑加入)&lt;br /&gt;(C:\Program Files\android-sdk-windows\tools),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;完成後按"確定".&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;strong&gt;Step4:安裝ADT&lt;br /&gt;&lt;/strong&gt;(1) 開啟"Eclipse",點擊上方選單"Help",選擇"Software Update..."項&lt;br /&gt;和"Avaiable Software"選項,點擊"Add Site..."按鈕,&lt;br /&gt;輸入"https//dl-ssl.google.com/android/eclipse/".&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;(2) 開啟選單"Windows",選擇"Preferences"-&gt;"Android",&lt;br /&gt;點擊"Browse"按鈕,選擇Android SDK的安裝路徑.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-3211376065409066872?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/3211376065409066872/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2010/10/windows-7-android.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/3211376065409066872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/3211376065409066872'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2010/10/windows-7-android.html' title='【教學】在Windows 7 上安裝 Android 開發環境步驟'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-6443297906150636187</id><published>2010-10-22T21:06:00.000-07:00</published><updated>2010-10-25T07:50:52.285-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>【教學】Android在Windows上開發環境</title><content type='html'>Android作業系統除了用來開發手機外，&lt;br /&gt;也可以開發其他嵌入式系統(Embedded System)。&lt;br /&gt;其應用程式的開發環境可以是Windos、Mac OS X 或Linux作業系統。&lt;br /&gt;&lt;br /&gt;下面介紹的是在Windos下開發Android所需的軟體開發包與工具：&lt;br /&gt;(1)JDK 1.6&lt;br /&gt;下載網址：&lt;a href="http://java.sun.com/javase/downloads/index.jsp"&gt;http://java.sun.com/javase/downloads/index.jsp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(2)Eclipse Galileo(3.5)&lt;br /&gt;下載網址：&lt;a href="http://www.eclipse.org/downloads/"&gt;http://www.eclipse.org/downloads/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(3)Android SDK 2.2&lt;br /&gt;下載網址：&lt;a href="http://developer.android.com/sdk/index.html"&gt;http://developer.android.com/sdk/index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(4)ADT 0.9.7&lt;br /&gt;下載網址：&lt;a href="https://dl-ssl.google.com/android/eclipse/"&gt;https://dl-ssl.google.com/android/eclipse/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-6443297906150636187?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/6443297906150636187/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2010/10/androidwindows.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/6443297906150636187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/6443297906150636187'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2010/10/androidwindows.html' title='【教學】Android在Windows上開發環境'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-6317732780055986976</id><published>2010-10-21T07:23:00.000-07:00</published><updated>2011-05-05T07:32:55.653-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>【教學】InteractiveSceneManager &amp; Mouse3D</title><content type='html'>&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;package &lt;br /&gt;{&lt;br /&gt;  import flash.events.Event;&lt;br /&gt;  import flash.text.TextField; &lt;br /&gt;    &lt;br /&gt;  import org.papervision3d.materials.WireframeMaterial;&lt;br /&gt;  import org.papervision3d.objects.primitives.Sphere;&lt;br /&gt;  import org.papervision3d.objects.primitives.Plane;&lt;br /&gt;  import org.papervision3d.view.BasicView;  &lt;br /&gt;    &lt;br /&gt;  import org.papervision3d.core.utils.Mouse3D;&lt;br /&gt;  import org.papervision3d.events.InteractiveScene3DEvent; &lt;br /&gt; &lt;br /&gt;  /**&lt;br /&gt;   * ...interactiveSceneManager &amp; Mouse3D&lt;br /&gt;   * @author Max&lt;br /&gt;   */&lt;br /&gt;  public class PV3D_Mouse3D_Demo extends BasicView &lt;br /&gt;  {&lt;br /&gt;    private var txt_mx:TextField;&lt;br /&gt;    private var txt_my:TextField;&lt;br /&gt;    private var txt_mz:TextField;&lt;br /&gt;    private var txt_author:tAuthortxt;  &lt;br /&gt;&lt;br /&gt;    private var planeMat:WireframeMaterial&lt;br /&gt;    private var planeMod:Plane;&lt;br /&gt;  &lt;br /&gt;    private var markMat:WireframeMaterial;&lt;br /&gt;    private var markMod:Sphere;&lt;br /&gt;  &lt;br /&gt;    private var m3D:Mouse3D;  &lt;br /&gt;  &lt;br /&gt;    public function PV3D_Mouse3D_Demo()&lt;br /&gt;    { &lt;br /&gt;      init3D();&lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    private function init3D():void&lt;br /&gt;    {&lt;br /&gt;      viewport.opaqueBackground = 0x0;&lt;br /&gt;      viewport.interactive = true;&lt;br /&gt;   &lt;br /&gt;      txt_mx = new TextField();&lt;br /&gt;      txt_mx.textColor = 0xFFFFFF;&lt;br /&gt;      txt_mx.width = 200;&lt;br /&gt;      txt_mx.selectable = false;&lt;br /&gt;      txt_mx.x = 20;&lt;br /&gt;      txt_mx.y = 20;&lt;br /&gt;      viewport.addChild(txt_mx);&lt;br /&gt;   &lt;br /&gt;      txt_my = new TextField();&lt;br /&gt;      txt_my.textColor = 0xFFFFFF;&lt;br /&gt;      txt_my.width = 200;&lt;br /&gt;      txt_my.selectable = false;&lt;br /&gt;      txt_my.x = 20;&lt;br /&gt;      txt_my.y = 40;&lt;br /&gt;      viewport.addChild(txt_my);&lt;br /&gt;   &lt;br /&gt;      txt_mz = new TextField();&lt;br /&gt;      txt_mz.textColor = 0xFFFFFF;&lt;br /&gt;      txt_mz.width = 200;&lt;br /&gt;      txt_mz.selectable = false;&lt;br /&gt;      txt_mz.x = 20;&lt;br /&gt;      txt_mz.y = 60;&lt;br /&gt;      viewport.addChild(txt_mz);&lt;br /&gt;     &lt;br /&gt;      planeMat = new WireframeMaterial(0x00FF00, 1, 0);&lt;br /&gt;      planeMat.doubleSided = true;&lt;br /&gt;      planeMat.interactive = true;&lt;br /&gt;      planeMod = new Plane(planeMat, 1000, 1000, 6, 6);&lt;br /&gt;      scene.addChild(planeMod);&lt;br /&gt;    &lt;br /&gt;      markMat = new WireframeMaterial(0xFF0000, 1, 0);&lt;br /&gt;      markMat.doubleSided = true; &lt;br /&gt;      markMod = new Sphere(markMat, 15, 4, 3);&lt;br /&gt;      scene.addChild(markMod);  &lt;br /&gt;     &lt;br /&gt;      Mouse3D.enabled = true;&lt;br /&gt;      m3D = viewport.interactiveSceneManager.mouse3D;&lt;br /&gt;  &lt;br /&gt;      planeMod.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, onPlaneModOver);&lt;br /&gt;      planeMod.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, onPlaneModOut);&lt;br /&gt;   &lt;br /&gt;      startRendering();&lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    public function onPlaneModOver(event:InteractiveScene3DEvent):void&lt;br /&gt;    { &lt;br /&gt;      markMod.visible = true;&lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    public function onPlaneModOut(event:InteractiveScene3DEvent):void&lt;br /&gt;    {&lt;br /&gt;      markMod.visible = false;&lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    override protected function onRenderTick(event:Event = null):void &lt;br /&gt;    {&lt;br /&gt;      txt_mx.text = "mx:" + m3D.x;&lt;br /&gt;      txt_my.text = "my:" + m3D.y;&lt;br /&gt;      txt_mz.text = "mz:" + m3D.z;&lt;br /&gt; &lt;br /&gt;      markMod.x = m3D.x;&lt;br /&gt;      markMod.y = m3D.y;&lt;br /&gt;      markMod.z = m3D.z;  &lt;br /&gt;       &lt;br /&gt;      planeMod.pitch(.2);&lt;br /&gt;      planeMod.yaw(.1);&lt;br /&gt;      planeMod.roll(.2);&lt;br /&gt;  &lt;br /&gt;      super.onRenderTick(event);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/TMBOPbaV6_I/AAAAAAAAAWc/OJgUNypvSp8/s1600/demo.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 303px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5530506369374219250" border="0" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/TMBOPbaV6_I/AAAAAAAAAWc/OJgUNypvSp8/s400/demo.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://igmax.myweb.hinet.net/demo_interactiveSceneManager/PV3D_Mouse3D_Demo.html" target="_blank"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-6317732780055986976?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/6317732780055986976/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2010/10/interactivescenemanager-mouse3d.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/6317732780055986976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/6317732780055986976'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2010/10/interactivescenemanager-mouse3d.html' title='【教學】InteractiveSceneManager &amp; Mouse3D'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_a8EDl0Lwf_Q/TMBOPbaV6_I/AAAAAAAAAWc/OJgUNypvSp8/s72-c/demo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-4856962860730126022</id><published>2010-05-19T04:45:00.000-07:00</published><updated>2010-05-19T04:53:35.711-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>【作品】 PV3D 3D線段(Lines3D)測試</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/S_PQCiRxtLI/AAAAAAAAAS4/SXOAUoQDU2I/s1600/demo.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 315px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5472946714164966578" border="0" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/S_PQCiRxtLI/AAAAAAAAAS4/SXOAUoQDU2I/s400/demo.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://7-12.idv.tw/DeyingData/Flash/PV3D/demo_line3d/Lines3DExample.html" target="_blank"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-4856962860730126022?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/4856962860730126022/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2010/05/pv3d-3dlines3d.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/4856962860730126022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/4856962860730126022'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2010/05/pv3d-3dlines3d.html' title='【作品】 PV3D 3D線段(Lines3D)測試'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_a8EDl0Lwf_Q/S_PQCiRxtLI/AAAAAAAAAS4/SXOAUoQDU2I/s72-c/demo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-6636863114076387082</id><published>2010-05-14T05:17:00.000-07:00</published><updated>2011-05-05T07:33:33.835-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>【作品】 Jiglib &amp; papervision3d 碰撞測試</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/S-1AhxrAmcI/AAAAAAAAASw/wCZ3yzKFqPQ/s1600/demo.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 300px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5471100071338613186" border="0" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/S-1AhxrAmcI/AAAAAAAAASw/wCZ3yzKFqPQ/s400/demo.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://igmax.myweb.hinet.net/demo_bowling/Bowling_Demo.html" target="_blank"&gt;demo&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-6636863114076387082?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/6636863114076387082/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2010/05/jiglib-papervision3d.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/6636863114076387082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/6636863114076387082'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2010/05/jiglib-papervision3d.html' title='【作品】 Jiglib &amp; papervision3d 碰撞測試'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/S-1AhxrAmcI/AAAAAAAAASw/wCZ3yzKFqPQ/s72-c/demo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-2818437896495754828</id><published>2010-05-12T09:07:00.000-07:00</published><updated>2011-05-05T07:33:16.605-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>【作品】自訂Reflection效果測試</title><content type='html'>使用PV3D內建的ReflectionView類別，&lt;br /&gt;可以輕鬆建立倒影，&lt;br /&gt;但是建立的倒影無法漸層。&lt;br /&gt;於是自己寫了一個測試，&lt;br /&gt;使其模型的倒影能有漸層效果。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/S-rTBvJ9G8I/AAAAAAAAASo/btFu5O-rLn0/s1600/demo.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 380px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5470416724186438594" border="0" alt="" src="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/S-rTBvJ9G8I/AAAAAAAAASo/btFu5O-rLn0/s400/demo.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://igmax.myweb.hinet.net/demo_reflection/demo_reflection.html" target="_blank"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-2818437896495754828?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/2818437896495754828/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2010/05/reflection.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/2818437896495754828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/2818437896495754828'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2010/05/reflection.html' title='【作品】自訂Reflection效果測試'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_a8EDl0Lwf_Q/S-rTBvJ9G8I/AAAAAAAAASo/btFu5O-rLn0/s72-c/demo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-809889445764356585</id><published>2010-05-04T05:53:00.000-07:00</published><updated>2010-05-04T06:05:46.701-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>【作品】波浪效果選單測試</title><content type='html'>這個選單是利用as3dmod變形類別，&lt;br /&gt;再搭配簡單的平面模型來完成對位。&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/S-AZgMOMFTI/AAAAAAAAASg/QvdYo8vY8l0/s1600/demo.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 280px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5467397988455028018" border="0" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/S-AZgMOMFTI/AAAAAAAAASg/QvdYo8vY8l0/s400/demo.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://7-12.idv.tw/DeyingData/Flash/PV3D/demo_menu04/WavePlane_Demo.html" target="_blank"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-809889445764356585?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/809889445764356585/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2010/05/blog-post.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/809889445764356585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/809889445764356585'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2010/05/blog-post.html' title='【作品】波浪效果選單測試'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/S-AZgMOMFTI/AAAAAAAAASg/QvdYo8vY8l0/s72-c/demo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-8677327639542636313</id><published>2010-01-30T23:34:00.000-08:00</published><updated>2010-01-30T23:40:54.951-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VC++'/><title type='text'>陣列類別</title><content type='html'>MFC的陣列類別可以很輕鬆建立與管理一維陣列物件,&lt;br /&gt;陣列類別包括:&lt;br /&gt;CbyteArray&lt;br /&gt;CDWordArray&lt;br /&gt;CobArray&lt;br /&gt;CptrArray&lt;br /&gt;CUintArray&lt;br /&gt;CwordArray&lt;br /&gt;CStringArray&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-8677327639542636313?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/8677327639542636313/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2010/01/blog-post.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/8677327639542636313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/8677327639542636313'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2010/01/blog-post.html' title='陣列類別'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-9120973459569626984</id><published>2009-12-30T10:13:00.000-08:00</published><updated>2010-10-27T08:59:27.765-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>【教學】平面基本材質(雙面貼圖)</title><content type='html'>&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;  import flash.events.Event;&lt;br /&gt;  import org.papervision3d.view.BasicView;&lt;br /&gt;  import org.papervision3d.materials.BitmapFileMaterial;&lt;br /&gt;  import org.papervision3d.objects.primitives.Plane;&lt;br /&gt;  import org.papervision3d.objects.DisplayObject3D;&lt;br /&gt;  &lt;br /&gt;  /**&lt;br /&gt;  * ...DoubleTexture&lt;br /&gt;  * @author Max&lt;br /&gt;  */&lt;br /&gt;  public class  DoubleTexture extends BasicView&lt;br /&gt;  {&lt;br /&gt;    private var FrontMat:BitmapFileMaterial;&lt;br /&gt;    private var FrontMod:Plane;&lt;br /&gt;    private var BackMat:BitmapFileMaterial;&lt;br /&gt;    private var BackMod:Plane;&lt;br /&gt;    private var PokerMod:DisplayObject3D;&lt;br /&gt; &lt;br /&gt;    public function DoubleTexture():void&lt;br /&gt;    {&lt;br /&gt;      initPoker();&lt;br /&gt;      startRendering();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private function initPoker():void&lt;br /&gt;    {&lt;br /&gt;      viewport.opaqueBackground = 0x000000;&lt;br /&gt;      FrontMat = new BitmapFileMateria("http://7-12.idv.tw/DeyingData/Flash/PV3D/demo_texture_double/front.jpg",true);&lt;br /&gt;      FrontMod = new Plane(FrontMat,256,384,1,1);&lt;br /&gt;      FrontMod.x = 0;&lt;br /&gt;      FrontMod.y = 0;&lt;br /&gt;      FrontMod.z = 0;&lt;br /&gt;      BackMat = new BitmapFileMaterial("http://7-12.idv.tw/DeyingData/Flash/PV3D/demo_texture_double/back.jpg",true);&lt;br /&gt;      BackMod = new Plane(BackMat,256,384,1,1);&lt;br /&gt;      BackMod.x = 0;&lt;br /&gt;      BackMod.y = 0;&lt;br /&gt;      BackMod.z = 0;&lt;br /&gt;      BackMod.rotationY = 180;&lt;br /&gt;  &lt;br /&gt;      PokerMod = new DisplayObject3D();&lt;br /&gt;      PokerMod.addChild(FrontMod);&lt;br /&gt;      PokerMod.addChild(BackMod);&lt;br /&gt;      scene.addChild(PokerMod);&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    override protected function onRenderTick(event:Event = null):void&lt;br /&gt;    {&lt;br /&gt;      PokerMod.yaw(10); &lt;br /&gt;      super.onRenderTick(event);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SzuYwVXff7I/AAAAAAAAASY/LXaIWoGSPv0/s1600-h/demo.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 400px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5421094532607344562" border="0" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SzuYwVXff7I/AAAAAAAAASY/LXaIWoGSPv0/s400/demo.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://7-12.idv.tw/DeyingData/Flash/PV3D/demo_texture_double/DoubleTexture.html" target="_blank"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-9120973459569626984?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/9120973459569626984/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/12/blog-post.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/9120973459569626984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/9120973459569626984'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/12/blog-post.html' title='【教學】平面基本材質(雙面貼圖)'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SzuYwVXff7I/AAAAAAAAASY/LXaIWoGSPv0/s72-c/demo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-2229832065911077558</id><published>2009-11-05T07:37:00.000-08:00</published><updated>2011-05-05T07:34:17.384-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>【作品】 極光效果測試</title><content type='html'>這個測試主要運用曲線功能，&lt;br /&gt;再搭配濾鏡效果，&lt;br /&gt;使其隨機變換頂點座標位置，&lt;br /&gt;也可運用座標陣列去變換，&lt;br /&gt;方法很多種可測試，&lt;br /&gt;也會產生不同效果。&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SvLyAmwHXLI/AAAAAAAAASQ/59cn7WDgMCE/s1600-h/demo.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5400644995386924210" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 292px" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SvLyAmwHXLI/AAAAAAAAASQ/59cn7WDgMCE/s400/demo.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://igmax.myweb.hinet.net/demo_aurora/Aurora_Sample.html" target="_blank"&gt;demo &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-2229832065911077558?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/2229832065911077558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/2229832065911077558'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/11/blog-post.html' title='【作品】 極光效果測試'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SvLyAmwHXLI/AAAAAAAAASQ/59cn7WDgMCE/s72-c/demo.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-1299465100285187554</id><published>2009-10-14T06:49:00.000-07:00</published><updated>2010-10-28T08:30:02.156-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>【教學】多圖載入時百分比表示</title><content type='html'>這篇範例主要是測試多圖檔載入時，&lt;br /&gt;如何計算百分比，&lt;br /&gt;雖然現在有BulkLoader下載(loader)類別可用，&lt;br /&gt;相當方便，不過還是用其他方法做測試。&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;  import flash.display.MovieClip;&lt;br /&gt;  import flash.events.Event;&lt;br /&gt;  import flash.events.MouseEvent;&lt;br /&gt;  import flash.events.ProgressEvent;&lt;br /&gt;  import flash.events.EventDispatcher;&lt;br /&gt;  import flash.net.URLRequest;&lt;br /&gt;  import flash.display.Loader;&lt;br /&gt;  import flash.display.LoaderInfo;&lt;br /&gt;  import flash.display.Bitmap;&lt;br /&gt;  import flash.display.BitmapData;&lt;br /&gt;   &lt;br /&gt;  public class CMenuBack extends MovieClip&lt;br /&gt;  {&lt;br /&gt;    private var PicLoader:Array;&lt;br /&gt;    private var PicLoaderInfo:Array;&lt;br /&gt;    private var PicName:Array;&lt;br /&gt;    private var TotalByte:int;&lt;br /&gt;    private var PercentLoaded:Array;&lt;br /&gt;    private var PicTotal:int;&lt;br /&gt;    private var PicCount:int;&lt;br /&gt;    private var PicIndex:int;&lt;br /&gt;    public var Process:Number;&lt;br /&gt;&lt;br /&gt;    public function CMenuBack():void&lt;br /&gt;    {&lt;br /&gt;      PicTotal = 10;&lt;br /&gt;      PicLoader = new Array(PicTotal);&lt;br /&gt;      PicLoaderInfo = new Array(PicTotal);&lt;br /&gt;      PicName = new Array(PicTotal);&lt;br /&gt;      PercentLoaded = new Array(PicTotal);&lt;br /&gt;      TotalByte = 0;&lt;br /&gt;      PicCount = 0;&lt;br /&gt;      PicIndex = 0;&lt;br /&gt;      Process = 0;&lt;br /&gt;&lt;br /&gt;      for (var i:int = 0; i &lt; PicTotal; i++ )&lt;br /&gt;      {&lt;br /&gt;        PicName[i]='http://7-12.idv.tw/DeyingData/Flash/AS3/LoadPic/pic'+(i+1).toString()+'.jpg';&lt;br /&gt;        PicLoader[i] = new Loader();&lt;br /&gt;        PicLoader[i].contentLoaderInfo.addEventListener( Event.INIT, oninitHandler);&lt;br /&gt;        PicLoader[i].load( new URLRequest(PicName[i]));&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      addEventListener("myEvent1",MsgFun1);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private function MsgFun1(event:Event):void&lt;br /&gt;    {&lt;br /&gt;      LoasdPic(PicIndex);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private function oninitHandler(event:Event):void&lt;br /&gt;    {&lt;br /&gt;      var loader:Loader = Loader(event.target.loader);&lt;br /&gt;      var info:LoaderInfo = LoaderInfo(loader.contentLoaderInfo);&lt;br /&gt;      TotalByte = TotalByte + info.bytesTotal;&lt;br /&gt;&lt;br /&gt;      if (PicCount&gt;=(PicTotal-1))&lt;br /&gt;      {&lt;br /&gt;        dispatchEvent(new Event("myEvent1"));&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      for (var i:int = 0; i &lt; PicTotal;i++ )&lt;br /&gt;      {&lt;br /&gt;        if (PicLoader[i].contentLoaderInfo == event.target)&lt;br /&gt;        {&lt;br /&gt;          PicLoader[i].unload();&lt;br /&gt;          PicCount += 1;&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private function onLoaderProgress(event:ProgressEvent):void&lt;br /&gt;    {&lt;br /&gt;      PercentLoaded[PicIndex] = event.bytesLoaded/TotalByte;&lt;br /&gt;      PercentLoaded[PicIndex] = Math.round(PercentLoaded[PicIndex] * 100);&lt;br /&gt;      Process = Process + PercentLoaded[PicIndex];&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private function onPicLoaderComplete(event:Event):void&lt;br /&gt;    {&lt;br /&gt;      for (var i:int = 0; i &lt; PicTotal;i++ )&lt;br /&gt;      {&lt;br /&gt;        if (PicLoader[i].contentLoaderInfo == event.target)&lt;br /&gt;        {&lt;br /&gt;          var PicBitmap:Bitmap;&lt;br /&gt;          PicBitmap = Bitmap(PicLoader[i].content);&lt;br /&gt;          addChild(PicBitmap);&lt;br /&gt;          PicBitmap.x = i * 320;&lt;br /&gt;          PicIndex += 1;&lt;br /&gt;          if ( PicIndex &lt; pictotal )&lt;br /&gt;          {&lt;br /&gt;            LoasdPic(PicIndex);&lt;br /&gt;          }&lt;br /&gt;          else&lt;br /&gt;          {&lt;br /&gt;            Process = 100;&lt;br /&gt;          }&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private function LoasdPic(index:int):void&lt;br /&gt;    {&lt;br /&gt;      PicLoader[index] = new Loader();&lt;br /&gt;      PicLoader[index].contentLoaderInfo.addEventListener( ProgressEvent.PROGRESS, onLoaderProgress);&lt;br /&gt;      PicLoader[index].contentLoaderInfo.addEventListener( Event.COMPLETE, onPicLoaderComplete);&lt;br /&gt;      PicLoader[index].load( new URLRequest(PicName[index]));&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="javascript" name="code" &gt;&lt;br /&gt;package &lt;br /&gt;{&lt;br /&gt;  import flash.display.MovieClip;&lt;br /&gt;  import flash.display.Shape; &lt;br /&gt;  &lt;br /&gt;  /**&lt;br /&gt;  * ...&lt;br /&gt;  * @author Max&lt;br /&gt;  */&lt;br /&gt;  public class CMask extends MovieClip &lt;br /&gt;  {&lt;br /&gt;    private var square:Shape;&lt;br /&gt;  &lt;br /&gt;    public function CMask():void&lt;br /&gt;    {&lt;br /&gt;      square = new Shape();&lt;br /&gt;      square.graphics.lineStyle(1, 0x000000);&lt;br /&gt;      square.graphics.beginFill(0xff0000);&lt;br /&gt;      square.graphics.drawRect(0, 0, 320, 240);&lt;br /&gt;      square.graphics.endFill();&lt;br /&gt;      this.addChild(square);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="javascript" name="code" &gt;&lt;br /&gt;package &lt;br /&gt;{&lt;br /&gt;  import flash.display.MovieClip;&lt;br /&gt;  import flash.events.Event;&lt;br /&gt;  import flash.text.TextField;&lt;br /&gt;  import flash.display.Shape;&lt;br /&gt;  import CMenuBack;&lt;br /&gt;  import CMask;&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * ...&lt;br /&gt;   * @author Max&lt;br /&gt;   */&lt;br /&gt;  public class CMenu extends MovieClip &lt;br /&gt;  {&lt;br /&gt;    private var Menu_mc:CMenuBack;&lt;br /&gt;    private var Mask_mc:CMask;&lt;br /&gt;    private var Percent_txt:TextField;&lt;br /&gt;    private var speed:int;&lt;br /&gt;    private var LoaderBar:Shape = new Shape();&lt;br /&gt;    private var LoaderPos:Number;&lt;br /&gt;    private var IsDraw:Boolean;&lt;br /&gt; &lt;br /&gt;    public function CMenu():void&lt;br /&gt;    {&lt;br /&gt;      speed = -1;&lt;br /&gt;      IsDraw = true; &lt;br /&gt;      Menu_mc = new CMenuBack();&lt;br /&gt;      addChild(Menu_mc);   &lt;br /&gt;      Mask_mc = new CMask();&lt;br /&gt;      addChild(Mask_mc);&lt;br /&gt;      Mask_mc.alpha = 0.5;&lt;br /&gt;      Menu_mc.mask = Mask_mc;&lt;br /&gt;      LoaderPos = 0;&lt;br /&gt;      LoaderBar.graphics.lineStyle(1, 0x000000);&lt;br /&gt;      LoaderBar.graphics.beginFill(0x000000);&lt;br /&gt;      LoaderBar.graphics.drawRect(0, 220, LoaderPos, 20);&lt;br /&gt;      LoaderBar.graphics.endFill();&lt;br /&gt;      LoaderBar.alpha = 0.6;&lt;br /&gt;      this.addChild(LoaderBar);&lt;br /&gt;    &lt;br /&gt;      Percent_txt = new TextField();             &lt;br /&gt;      Percent_txt.x = 10;             &lt;br /&gt;      Percent_txt.y = 220;              &lt;br /&gt;      Percent_txt.textColor = 0xffffff;              &lt;br /&gt;      this.addChild(Percent_txt);&lt;br /&gt;   &lt;br /&gt;      addEventListener(Event.ENTER_FRAME, onEnterFrame); &lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    private function onEnterFrame(event:Event):void&lt;br /&gt;    {&lt;br /&gt;      if ( Menu_mc.Process==100 )&lt;br /&gt;      {&lt;br /&gt;        if (Menu_mc.x&lt;-2880 || Menu_mc.x&gt;0 )&lt;br /&gt;        {&lt;br /&gt;          speed *= -1;&lt;br /&gt;        }&lt;br /&gt;        Menu_mc.x += speed;&lt;br /&gt;      }&lt;br /&gt;   &lt;br /&gt;      if ( Menu_mc.Process&lt;100 &amp;&amp; IsDraw==true )&lt;br /&gt;      {  &lt;br /&gt;        LoaderPos = Math.floor(Menu_mc.Process * 320 / 100);&lt;br /&gt;        LoaderBar.graphics.clear();&lt;br /&gt;        LoaderBar.graphics.beginFill(0x000000);&lt;br /&gt;        LoaderBar.graphics.drawRect(0, 220, LoaderPos, 20);&lt;br /&gt;        LoaderBar.graphics.endFill();&lt;br /&gt;        LoaderBar.alpha = 0.6;&lt;br /&gt;        Percent_txt.text = "Loading... " ;&lt;br /&gt;      }&lt;br /&gt;      else if( Menu_mc.Process&gt;=100 &amp;&amp; IsDraw==true )&lt;br /&gt;      {&lt;br /&gt;        LoaderPos = 320;&lt;br /&gt;        LoaderBar.graphics.clear();&lt;br /&gt;        LoaderBar.graphics.beginFill(0x000000);&lt;br /&gt;        LoaderBar.graphics.drawRect(0, 220, LoaderPos, 20);&lt;br /&gt;        LoaderBar.graphics.endFill();&lt;br /&gt;        LoaderBar.alpha = 0.6;&lt;br /&gt;        IsDraw = false;&lt;br /&gt;        Percent_txt.text = ""; &lt;br /&gt;      }&lt;br /&gt;      // Percent_txt.text = "Loading.. " + (int(Menu_mc.Process)).toString() + "%";&lt;br /&gt;      // Percent_txt.text = "Loading... " ;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/TMmVWdRZaNI/AAAAAAAAAXU/SRUOYKirODw/s1600/demo.jpg"&gt;&lt;img style="WIDTH: 321px; HEIGHT: 240px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5533117830248622290" border="0" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/TMmVWdRZaNI/AAAAAAAAAXU/SRUOYKirODw/s400/demo.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://7-12.idv.tw/DeyingData/Flash/AS3/LoadPic/Menu.html" target="_blank"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-1299465100285187554?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/1299465100285187554/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/10/blog-post.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/1299465100285187554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/1299465100285187554'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/10/blog-post.html' title='【教學】多圖載入時百分比表示'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_a8EDl0Lwf_Q/TMmVWdRZaNI/AAAAAAAAAXU/SRUOYKirODw/s72-c/demo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-2547203617440036912</id><published>2009-09-20T23:38:00.000-07:00</published><updated>2011-05-05T07:37:13.104-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>【教學】PV3D 動態陰影範例 Shadow Texture</title><content type='html'>此範例參考ZUPKO.INFO上，&lt;br /&gt;Casting Shadows In Papervision3D - Redux範例，&lt;br /&gt;修改部份內容作測試，&lt;br /&gt;運用 ShadowCaster 這個類可以輕鬆建立陰影。&lt;br /&gt;&lt;br /&gt;執行結果：&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SrcgIxbMWoI/AAAAAAAAASA/sqc05qbt9B8/s1600-h/demo.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 270px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5383807214623152770" border="0" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SrcgIxbMWoI/AAAAAAAAASA/sqc05qbt9B8/s400/demo.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://igmax.myweb.hinet.net/demo_shadow/demo_shadowtexture.html" target="_blank"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-2547203617440036912?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/2547203617440036912/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/09/pv3d-shadow-texture.html#comment-form' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/2547203617440036912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/2547203617440036912'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/09/pv3d-shadow-texture.html' title='【教學】PV3D 動態陰影範例 Shadow Texture'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SrcgIxbMWoI/AAAAAAAAASA/sqc05qbt9B8/s72-c/demo.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-9064095838611715895</id><published>2009-09-04T07:18:00.001-07:00</published><updated>2010-10-28T07:14:10.999-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>【教學】PV3D動態選取貼圖 Dynamic Texture</title><content type='html'>此範例可以動態選取左邊貼圖的範圍,&lt;br /&gt;選取好貼圖會即時更新在方塊材質上.&lt;br /&gt;運用到其他延伸也可以改其他面與模型喔!&lt;br /&gt;&lt;br /&gt;ActionScript3程式代碼：&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;  import fl.controls.Label;&lt;br /&gt;  import fl.controls.Slider;&lt;br /&gt;  import fl.events.SliderEvent;&lt;br /&gt;  import flash.display.DisplayObject;&lt;br /&gt;  import flash.text.TextField;&lt;br /&gt;  import flash.text.TextFieldAutoSize;&lt;br /&gt;  import flash.events.Event;&lt;br /&gt;  import flash.net.URLRequest;&lt;br /&gt;  import flash.display.Loader;&lt;br /&gt;  import flash.display.Bitmap;&lt;br /&gt;  import flash.display.BitmapData;&lt;br /&gt; &lt;br /&gt;  import org.papervision3d.core.geom.renderables.Triangle3D;&lt;br /&gt;  import org.papervision3d.core.proto.MaterialObject3D;&lt;br /&gt;  import org.papervision3d.materials.BitmapMaterial;&lt;br /&gt;  import org.papervision3d.objects.primitives.Plane;&lt;br /&gt;  import org.papervision3d.view.BasicView;&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;  * ...動態貼圖座標範例&lt;br /&gt;  * @author Max&lt;br /&gt;  */&lt;br /&gt;  public class DynamicTexture extends BasicView&lt;br /&gt;  {&lt;br /&gt;    private var SLX:Slider;&lt;br /&gt;    private var SLY:Slider;&lt;br /&gt;    private var SLZ:Slider;&lt;br /&gt;    private var TxtX:TextField;&lt;br /&gt;    private var TxtY:TextField;&lt;br /&gt;    private var TxtZ:TextField;&lt;br /&gt;    private var ValueX:Number;&lt;br /&gt;    private var ValueY:Number;&lt;br /&gt;    private var ValueZ:Number;&lt;br /&gt; &lt;br /&gt;    private var SLU:Slider;&lt;br /&gt;    private var SLV:Slider; &lt;br /&gt;    private var TxtU:TextField;&lt;br /&gt;    private var TxtV:TextField; &lt;br /&gt;    private var ValueU:Number;&lt;br /&gt;    private var ValueV:Number;&lt;br /&gt;&lt;br /&gt;    private var DynumicLoader:Loader;&lt;br /&gt;    private var DynumicBitmap:Bitmap;&lt;br /&gt;    private var DynumicBitmapData:BitmapData;&lt;br /&gt;    private var PlaneMat:MaterialObject3D;&lt;br /&gt;    private var PlaneMod:Plane;&lt;br /&gt; &lt;br /&gt;    private var author:TextField;&lt;br /&gt;    private var IGURL:TextField;&lt;br /&gt;   &lt;br /&gt;    public function DynamicTexture():void&lt;br /&gt;    {&lt;br /&gt;      opaqueBackground = 0x000000;&lt;br /&gt;      DynumicLoader = new Loader();&lt;br /&gt;      DynumicLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onDynumicloaderComplete);&lt;br /&gt;      DynumicLoader.load( new URLRequest("http://7-12.idv.tw/DeyingData/Flash/PV3D/demo_dynamictexture/texture.jpg"));&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    function thumbDragSLUHandler(event:SliderEvent):void&lt;br /&gt;    {&lt;br /&gt;      ValueU = Number( (event.value*0.01).toFixed(2) );&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    function thumbDragSLVHandler(event:SliderEvent):void&lt;br /&gt;    {&lt;br /&gt;      ValueV = Number( (event.value*0.01).toFixed(2) );&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    function thumbDragSLXHandler(event:SliderEvent):void&lt;br /&gt;    {&lt;br /&gt;      ValueX = event.value;&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    function thumbDragSLYHandler(event:SliderEvent):void&lt;br /&gt;    {&lt;br /&gt;      ValueY = event.value;&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    function thumbDragSLZHandler(event:SliderEvent):void&lt;br /&gt;    {&lt;br /&gt;      ValueZ = event.value;&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    private function onDynumicloaderComplete(event:Event):void&lt;br /&gt;    {&lt;br /&gt;      DynumicBitmap = Bitmap(DynumicLoader.content);&lt;br /&gt;      DynumicBitmapData = DynumicBitmap.bitmapData;&lt;br /&gt;  &lt;br /&gt;      PlaneMat = new BitmapMaterial( DynumicBitmapData, true);&lt;br /&gt;      PlaneMat.doubleSided = true;&lt;br /&gt;      PlaneMat.tiled = true;&lt;br /&gt;  &lt;br /&gt;      PlaneMod = new Plane(PlaneMat, 800, 800, 2, 2);&lt;br /&gt;      PlaneMod.autoCalcScreenCoords = true;&lt;br /&gt;      scene.addChild(PlaneMod);&lt;br /&gt;  &lt;br /&gt;      author = new TextField();&lt;br /&gt;      author.autoSize = TextFieldAutoSize.LEFT;&lt;br /&gt;      author.textColor = 0xFFFFFF;&lt;br /&gt;      author.text = "author:Max";&lt;br /&gt;      viewport.addChild(author);&lt;br /&gt;  &lt;br /&gt;      IGURL = new TextField();&lt;br /&gt;      IGURL.autoSize = TextFieldAutoSize.LEFT;&lt;br /&gt;      IGURL.textColor = 0xFFFFFF;&lt;br /&gt;      IGURL.text = "http://7-12.idv.tw";&lt;br /&gt;      viewport.addChild(IGURL);&lt;br /&gt;  &lt;br /&gt;      ValueU = 0;&lt;br /&gt;      TxtU = new TextField();&lt;br /&gt;      TxtU.autoSize = TextFieldAutoSize.LEFT;&lt;br /&gt;      TxtU.textColor = 0xFFFFFF;&lt;br /&gt;      TxtU.text = "";&lt;br /&gt;      viewport.addChild(TxtU);  &lt;br /&gt;      SLU = new Slider();&lt;br /&gt;      SLU.width = 100;&lt;br /&gt;      SLU.minimum = -10;&lt;br /&gt;      SLU.maximum = 10;&lt;br /&gt;      SLU.liveDragging = true;&lt;br /&gt;      SLU.snapInterval = 1;&lt;br /&gt;      SLU.tickInterval = SLU.snapInterval; &lt;br /&gt;      viewport.addChild(SLU);&lt;br /&gt;      SLU.addEventListener( SliderEvent.THUMB_DRAG, thumbDragSLUHandler);&lt;br /&gt;  &lt;br /&gt;      ValueV = 0;&lt;br /&gt;      TxtV = new TextField();&lt;br /&gt;      TxtV.autoSize = TextFieldAutoSize.LEFT;&lt;br /&gt;      TxtV.textColor = 0xFFFFFF;&lt;br /&gt;      TxtV.text = "";&lt;br /&gt;      viewport.addChild(TxtV);  &lt;br /&gt;      SLV = new Slider();&lt;br /&gt;      SLV.width = 100;&lt;br /&gt;      SLV.minimum = -10;&lt;br /&gt;      SLV.maximum = 10;&lt;br /&gt;      SLV.liveDragging = true;&lt;br /&gt;      SLV.snapInterval = 1;&lt;br /&gt;      SLV.tickInterval = SLV.snapInterval;&lt;br /&gt;      viewport.addChild(SLV);&lt;br /&gt;      SLV.addEventListener( SliderEvent.THUMB_DRAG, thumbDragSLVHandler);&lt;br /&gt;   &lt;br /&gt;      ValueX = 0;&lt;br /&gt;      TxtX = new TextField();&lt;br /&gt;      TxtX.autoSize = TextFieldAutoSize.LEFT;&lt;br /&gt;      TxtX.textColor = 0xFFFFFF;&lt;br /&gt;      TxtX.text = "";&lt;br /&gt;      viewport.addChild(TxtX);&lt;br /&gt;      SLX = new Slider();&lt;br /&gt;      SLX.width = 100;&lt;br /&gt;      SLX.minimum = 0;&lt;br /&gt;      SLX.maximum = 180;&lt;br /&gt;      SLX.liveDragging = true;&lt;br /&gt;      SLX.snapInterval = 10;&lt;br /&gt;      SLX.tickInterval = SLX.snapInterval; &lt;br /&gt;      viewport.addChild(SLX);&lt;br /&gt;      SLX.addEventListener( SliderEvent.THUMB_DRAG, thumbDragSLXHandler);&lt;br /&gt;  &lt;br /&gt;      ValueY = 0;&lt;br /&gt;      TxtY = new TextField();&lt;br /&gt;      TxtY.autoSize = TextFieldAutoSize.LEFT;&lt;br /&gt;      TxtY.textColor = 0xFFFFFF;&lt;br /&gt;      TxtY.text = "";&lt;br /&gt;      viewport.addChild(TxtY);&lt;br /&gt;      SLY = new Slider();&lt;br /&gt;      SLY.width = 100;&lt;br /&gt;      SLY.minimum = 0;&lt;br /&gt;      SLY.maximum = 180;&lt;br /&gt;      SLY.liveDragging = true;&lt;br /&gt;      SLY.snapInterval = 10;&lt;br /&gt;      SLY.tickInterval = SLY.snapInterval;&lt;br /&gt;      viewport.addChild(SLY);&lt;br /&gt;      SLY.addEventListener( SliderEvent.THUMB_DRAG, thumbDragSLYHandler);&lt;br /&gt;  &lt;br /&gt;      ValueZ = 0;&lt;br /&gt;      TxtZ = new TextField();&lt;br /&gt;      TxtZ.autoSize = TextFieldAutoSize.LEFT;&lt;br /&gt;      TxtZ.textColor = 0xFFFFFF;&lt;br /&gt;      TxtZ.text = "";&lt;br /&gt;      viewport.addChild(TxtZ);&lt;br /&gt;      SLZ = new Slider();&lt;br /&gt;      SLZ.width = 100;&lt;br /&gt;      SLZ.minimum = 0;&lt;br /&gt;      SLZ.maximum = 180;&lt;br /&gt;      SLZ.liveDragging = true;&lt;br /&gt;      SLZ.snapInterval = 10;&lt;br /&gt;      SLZ.tickInterval = SLZ.snapInterval;&lt;br /&gt;      viewport.addChild(SLZ);&lt;br /&gt;      SLZ.addEventListener( SliderEvent.THUMB_DRAG, thumbDragSLZHandler);&lt;br /&gt;  &lt;br /&gt;      startRendering();&lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    override protected function onRenderTick(event:Event = null):void&lt;br /&gt;    {&lt;br /&gt;      TxtU.x = PlaneMod.screen.x + 170 + stage.stageWidth / 2;&lt;br /&gt;      TxtU.y = PlaneMod.screen.y - 120 + stage.stageHeight / 2;&lt;br /&gt;      TxtV.x = PlaneMod.screen.x + 170 + stage.stageWidth / 2;&lt;br /&gt;      TxtV.y = PlaneMod.screen.y - 70  + stage.stageHeight / 2;&lt;br /&gt;      SLU.move( PlaneMod.screen.x + 170 + stage.stageWidth / 2 , PlaneMod.screen.y - 100 + stage.stageHeight / 2);&lt;br /&gt;      SLV.move( PlaneMod.screen.x + 170 + stage.stageWidth / 2 , PlaneMod.screen.y - 50  + stage.stageHeight / 2);&lt;br /&gt;  &lt;br /&gt;      TxtX.x = PlaneMod.screen.x + 170 + stage.stageWidth / 2;&lt;br /&gt;      TxtX.y = PlaneMod.screen.y - 20  + stage.stageHeight / 2;&lt;br /&gt;      TxtY.x = PlaneMod.screen.x + 170 + stage.stageWidth / 2;&lt;br /&gt;      TxtY.y = PlaneMod.screen.y + 30  + stage.stageHeight / 2;&lt;br /&gt;      TxtZ.x = PlaneMod.screen.x + 170 + stage.stageWidth / 2;&lt;br /&gt;      TxtZ.y = PlaneMod.screen.y + 80  + stage.stageHeight / 2;&lt;br /&gt;      SLX.move( PlaneMod.screen.x + 170 + stage.stageWidth / 2 , PlaneMod.screen.y + 0   + stage.stageHeight / 2);&lt;br /&gt;      SLY.move( PlaneMod.screen.x + 170 + stage.stageWidth / 2 , PlaneMod.screen.y + 50  + stage.stageHeight / 2);&lt;br /&gt;      SLZ.move( PlaneMod.screen.x + 170 + stage.stageWidth / 2 , PlaneMod.screen.y + 100 + stage.stageHeight / 2);&lt;br /&gt;  &lt;br /&gt;      author.x = PlaneMod.screen.x + 170 + stage.stageWidth / 2;&lt;br /&gt;      author.y = PlaneMod.screen.y + 180  + stage.stageHeight / 2;&lt;br /&gt;  &lt;br /&gt;      IGURL.x = PlaneMod.screen.x - 220 + stage.stageWidth / 2;&lt;br /&gt;      IGURL.y = PlaneMod.screen.y + 180  + stage.stageHeight / 2;&lt;br /&gt;   &lt;br /&gt;      for each (var triangle3D:Triangle3D in PlaneMod.geometry.faces)&lt;br /&gt;      {&lt;br /&gt;        triangle3D.uv0.v -= ValueV;&lt;br /&gt;        triangle3D.uv1.v -= ValueV;&lt;br /&gt;        triangle3D.uv2.v -= ValueV;&lt;br /&gt;   &lt;br /&gt;        triangle3D.uv0.u -= ValueU;&lt;br /&gt;        triangle3D.uv1.u -= ValueU;&lt;br /&gt;        triangle3D.uv2.u -= ValueU;&lt;br /&gt;      }&lt;br /&gt;          &lt;br /&gt;      BitmapMaterial(PlaneMod.material).resetUVS();&lt;br /&gt;      PlaneMod.rotationX = ValueX;&lt;br /&gt;      PlaneMod.rotationY = ValueY;&lt;br /&gt;      PlaneMod.rotationZ = ValueZ;&lt;br /&gt;  &lt;br /&gt;      TxtU.text = "U值: " + ValueU.toString();&lt;br /&gt;      TxtV.text = "V值: " + ValueV.toString(); &lt;br /&gt;      TxtX.text = "旋轉X軸: " + ValueX.toString();&lt;br /&gt;      TxtY.text = "旋轉Y軸: " + ValueY.toString();&lt;br /&gt;      TxtZ.text = "旋轉Z軸: " + ValueZ.toString();&lt;br /&gt;     &lt;br /&gt;      super.onRenderTick(event);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;執行結果：&lt;br /&gt;&lt;a href="http://7-12.idv.tw/DeyingData/Flash/PV3D/demo_texture_select/SelectTexture.html"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 295px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5377616779771184098" border="0" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SqEh-ChxA-I/AAAAAAAAAR4/3Wblh_bhC_Q/s400/demo.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://7-12.idv.tw/DeyingData/Flash/PV3D/demo_texture_select/SelectTexture.html" target="_blank"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-9064095838611715895?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/9064095838611715895/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/09/pv3d-dynamic-texture.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/9064095838611715895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/9064095838611715895'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/09/pv3d-dynamic-texture.html' title='【教學】PV3D動態選取貼圖 Dynamic Texture'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SqEh-ChxA-I/AAAAAAAAAR4/3Wblh_bhC_Q/s72-c/demo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-563367421650344172</id><published>2009-08-21T22:49:00.000-07:00</published><updated>2010-10-28T06:11:12.977-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>【教學】PreLoad 下載進度百分比</title><content type='html'>當檔案容量較大時，&lt;br /&gt;下載常常會較久，&lt;br /&gt;這時就會用到下載進度百分比，&lt;br /&gt;以便掌握下載過程。&lt;br /&gt;&lt;br /&gt;本範例主要是建立一個基本的框架，&lt;br /&gt;以便套用到各項專案中，&lt;br /&gt;說明了LoaderInfo的應用。&lt;br /&gt;&lt;br /&gt;建立流程：&lt;br /&gt;Step1：&lt;br /&gt;1.先打開ㄧ個新專案&lt;br /&gt;2.打開選單[視窗]-&gt;[其他面板]-&gt;[場景]&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/So-Hkp1xI5I/AAAAAAAAARg/ZrDl8ugKzGQ/s1600-h/demo_1.jpg"&gt;&lt;img style="WIDTH: 268px; HEIGHT: 400px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5372661944252703634" border="0" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/So-Hkp1xI5I/AAAAAAAAARg/ZrDl8ugKzGQ/s400/demo_1.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Step2：&lt;br /&gt;1.加入一個新場景(PreLoad)&lt;br /&gt;2.原先場景則為(main)&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/So-Hq5zhB4I/AAAAAAAAARo/ER9cimz-mDA/s1600-h/demo_2.jpg"&gt;&lt;img style="WIDTH: 215px; HEIGHT: 209px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5372662051617441666" border="0" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/So-Hq5zhB4I/AAAAAAAAARo/ER9cimz-mDA/s400/demo_2.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Step3：&lt;br /&gt;1.接下來切換到(PreLoad)場景編寫程式&lt;br /&gt;2.寫一個PreLoadClass.as(下載類別)&lt;br /&gt;&lt;pre class="javascript" name="code" &gt;package &lt;br /&gt;{&lt;br /&gt;  import flash.display.LoaderInfo;&lt;br /&gt;  import flash.display.MovieClip;&lt;br /&gt;  import flash.display.Shape;&lt;br /&gt;  import flash.events.Event;&lt;br /&gt;  import flash.text.TextField;&lt;br /&gt; &lt;br /&gt;  /**&lt;br /&gt;  * ...下載進度基本類別&lt;br /&gt;  * @author Max&lt;br /&gt;  */&lt;br /&gt;  public class PreLoadClass extends MovieClip&lt;br /&gt;  {&lt;br /&gt;    private var _ProjectLoaderInfo:LoaderInfo;&lt;br /&gt;    private var _LoadPercent:Number;&lt;br /&gt;    private var _BarFrame:Shape;&lt;br /&gt;    private var _ProcessBar:Shape;&lt;br /&gt;    private var _Percent_txt:TextField;&lt;br /&gt;   &lt;br /&gt;    public function PreLoadClass():void&lt;br /&gt;    {&lt;br /&gt;      this.addEventListener(Event.ADDED_TO_STAGE, _init);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private function _init(event:Event):void&lt;br /&gt;    {&lt;br /&gt;      _LoadPercent = 0;&lt;br /&gt;      _ProjectLoaderInfo = stage.loaderInfo;&lt;br /&gt;      DrawProcess();  &lt;br /&gt;      this.addEventListener( Event.ENTER_FRAME, _onEnterFrame ); &lt;br /&gt;      this.removeEventListener( Event.ADDED_TO_STAGE, _init ); &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private function DrawProcess():void&lt;br /&gt;    {&lt;br /&gt;      _BarFrame = new Shape();&lt;br /&gt;      _BarFrame.graphics.lineStyle(2, 0x999999, 1, false, "normal", null, null, 3);&lt;br /&gt;      _BarFrame.graphics.moveTo(223, 193);&lt;br /&gt;      _BarFrame.graphics.lineTo(327, 193); &lt;br /&gt;      _BarFrame.graphics.moveTo(327, 193);&lt;br /&gt;      _BarFrame.graphics.lineTo(327, 207); &lt;br /&gt;      _BarFrame.graphics.moveTo(327, 207);&lt;br /&gt;      _BarFrame.graphics.lineTo(223, 207);&lt;br /&gt;      _BarFrame.graphics.moveTo(223, 207);&lt;br /&gt;      _BarFrame.graphics.lineTo(223, 193);&lt;br /&gt;      this.addChild(_BarFrame);&lt;br /&gt;   &lt;br /&gt;      _ProcessBar = new Shape();&lt;br /&gt;      _ProcessBar.x = 225;&lt;br /&gt;      _ProcessBar.y = 195;&lt;br /&gt;      this.addChild(_ProcessBar); &lt;br /&gt;   &lt;br /&gt;      _Percent_txt = new TextField();&lt;br /&gt;      _Percent_txt.x = 330;&lt;br /&gt;      _Percent_txt.y = 190;&lt;br /&gt;      _Percent_txt.textColor = 0xAAAAAA;&lt;br /&gt;      this.addChild(_Percent_txt);&lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    private function _onEnterFrame(event:Event):void&lt;br /&gt;    {&lt;br /&gt;      _LoadPercent = Math.round((_ProjectLoaderInfo.bytesLoaded / _ProjectLoaderInfo.bytesTotal)*100);&lt;br /&gt;      _ProcessBar.graphics.beginFill(0xFFFFFF, 1);&lt;br /&gt;      _ProcessBar.graphics.drawRect(0, 0, _LoadPercent, 10);&lt;br /&gt;      _ProcessBar.graphics.endFill(); &lt;br /&gt;   &lt;br /&gt;      if (_LoadPercent &gt;= 100)&lt;br /&gt;      {&lt;br /&gt;        this.removeEventListener( Event.ENTER_FRAME, _onEnterFrame );&lt;br /&gt;        this.dispatchEvent(new Event( Event.COMPLETE ));&lt;br /&gt;        this.removeChild(_BarFrame);&lt;br /&gt;        this.removeChild(_ProcessBar);&lt;br /&gt;        this.removeChild(_Percent_txt);&lt;br /&gt;      }&lt;br /&gt;      &lt;br /&gt;      _Percent_txt.text = _LoadPercent.toString() + "%";&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Step4:&lt;br /&gt;1.撰寫主要Main.as(文檔類別)&lt;br /&gt;&lt;pre class="javascript" name="code" &gt;package &lt;br /&gt;{&lt;br /&gt;  import flash.display.MovieClip;&lt;br /&gt;  import flash.events.Event;&lt;br /&gt;  import PreLoadClass;&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;  * ...下載進度文檔類別&lt;br /&gt;  * @author Max&lt;br /&gt;  */&lt;br /&gt;  public class Main extends MovieClip&lt;br /&gt;  {&lt;br /&gt;    private var PreLoader:PreLoadClass;&lt;br /&gt;&lt;br /&gt;    public function Main()&lt;br /&gt;    {&lt;br /&gt;      _init();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private function _init():void&lt;br /&gt;    {&lt;br /&gt;      this.stop();&lt;br /&gt;      PreLoader = new PreLoadClass();&lt;br /&gt;      this.addChild(PreLoader); &lt;br /&gt;      PreLoader.x = 0;&lt;br /&gt;      PreLoader.y = 0;&lt;br /&gt;      PreLoader.addEventListener(Event.COMPLETE, _PreLoadProcess);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private function _PreLoadProcess(event:Event):void&lt;br /&gt;    {&lt;br /&gt;      /*檔案下載完畢*/&lt;br /&gt;      gotoAndStop(1,"main");&lt;br /&gt;      PreLoader.removeEventListener( Event.COMPLETE , _PreLoadProcess);&lt;br /&gt;      this.removeChild(PreLoader); &lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;執行畫面：&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/So-Hxmaf8YI/AAAAAAAAARw/hMKX7_mc5P4/s1600-h/demo_0.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 350px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5372662166671323522" border="0" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/So-Hxmaf8YI/AAAAAAAAARw/hMKX7_mc5P4/s400/demo_0.jpg" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-563367421650344172?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/563367421650344172/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/08/preload.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/563367421650344172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/563367421650344172'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/08/preload.html' title='【教學】PreLoad 下載進度百分比'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_a8EDl0Lwf_Q/So-Hkp1xI5I/AAAAAAAAARg/ZrDl8ugKzGQ/s72-c/demo_1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-847930394373189785</id><published>2009-07-23T06:30:00.000-07:00</published><updated>2010-10-28T06:47:42.874-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>【教學】PV3D動態貼圖 Dynamic Texture</title><content type='html'>這個範例是測試貼圖UV座標，&lt;br /&gt;拖曳Slider可以看到貼圖的變化。&lt;br /&gt;&lt;br /&gt;ActionScript3程式代碼：&lt;br /&gt;&lt;pre class="javascript" name="code" &gt;package &lt;br /&gt;{&lt;br /&gt;  import fl.controls.Label;&lt;br /&gt;  import fl.controls.Slider;&lt;br /&gt;  import fl.events.SliderEvent; &lt;br /&gt;  import flash.display.DisplayObject;&lt;br /&gt;  import flash.text.TextField;&lt;br /&gt;  import flash.text.TextFieldAutoSize;&lt;br /&gt;  import flash.events.Event;&lt;br /&gt;  import flash.net.URLRequest;&lt;br /&gt;  import flash.display.Loader;&lt;br /&gt;  import flash.display.Bitmap;&lt;br /&gt;  import flash.display.BitmapData;&lt;br /&gt;  &lt;br /&gt;  import org.papervision3d.core.geom.renderables.Triangle3D;&lt;br /&gt;  import org.papervision3d.core.proto.MaterialObject3D;&lt;br /&gt;  import org.papervision3d.materials.BitmapMaterial;&lt;br /&gt;  import org.papervision3d.objects.primitives.Plane;&lt;br /&gt;  import org.papervision3d.view.BasicView;&lt;br /&gt; &lt;br /&gt;  /**&lt;br /&gt;  * ...動態貼圖座標範例&lt;br /&gt;  * @author Max&lt;br /&gt;  */&lt;br /&gt;  public class DynamicTexture extends BasicView &lt;br /&gt;  { &lt;br /&gt;    private var SLX:Slider;&lt;br /&gt;    private var SLY:Slider;&lt;br /&gt;    private var SLZ:Slider;&lt;br /&gt;    private var TxtX:TextField;&lt;br /&gt;    private var TxtY:TextField;&lt;br /&gt;    private var TxtZ:TextField;&lt;br /&gt;    private var ValueX:Number;&lt;br /&gt;    private var ValueY:Number;&lt;br /&gt;    private var ValueZ:Number;&lt;br /&gt;  &lt;br /&gt;    private var SLU:Slider;&lt;br /&gt;    private var SLV:Slider;  &lt;br /&gt;    private var TxtU:TextField;&lt;br /&gt;    private var TxtV:TextField;  &lt;br /&gt;    private var ValueU:Number;&lt;br /&gt;    private var ValueV:Number;&lt;br /&gt; &lt;br /&gt;    private var DynumicLoader:Loader;&lt;br /&gt;    private var DynumicBitmap:Bitmap;&lt;br /&gt;    private var DynumicBitmapData:BitmapData;&lt;br /&gt;    private var PlaneMat:MaterialObject3D;&lt;br /&gt;    private var PlaneMod:Plane;&lt;br /&gt;  &lt;br /&gt;    private var author:TextField;&lt;br /&gt;    private var IGURL:TextField;&lt;br /&gt;    &lt;br /&gt;    public function DynamicTexture():void&lt;br /&gt;    { &lt;br /&gt;      opaqueBackground = 0x000000; &lt;br /&gt;      DynumicLoader = new Loader();&lt;br /&gt;      DynumicLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onDynumicloaderComplete);&lt;br /&gt;      DynumicLoader.load( new URLRequest("http://7-12.idv.tw/DeyingData/Flash/PV3D/demo_dynamictexture/texture.jpg"));&lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    function thumbDragSLUHandler(event:SliderEvent):void &lt;br /&gt;    {&lt;br /&gt;      ValueU = Number( (event.value*0.01).toFixed(2) );&lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    function thumbDragSLVHandler(event:SliderEvent):void &lt;br /&gt;    {&lt;br /&gt;      ValueV = Number( (event.value*0.01).toFixed(2) );&lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    function thumbDragSLXHandler(event:SliderEvent):void &lt;br /&gt;    {&lt;br /&gt;      ValueX = event.value;&lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    function thumbDragSLYHandler(event:SliderEvent):void &lt;br /&gt;    {&lt;br /&gt;      ValueY = event.value;&lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    function thumbDragSLZHandler(event:SliderEvent):void &lt;br /&gt;    {&lt;br /&gt;      ValueZ = event.value;&lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    private function onDynumicloaderComplete(event:Event):void&lt;br /&gt;    {&lt;br /&gt;      DynumicBitmap = Bitmap(DynumicLoader.content);&lt;br /&gt;      DynumicBitmapData = DynumicBitmap.bitmapData;&lt;br /&gt;   &lt;br /&gt;      PlaneMat = new BitmapMaterial( DynumicBitmapData, true);&lt;br /&gt;      PlaneMat.doubleSided = true;&lt;br /&gt;      PlaneMat.tiled = true;&lt;br /&gt;   &lt;br /&gt;      PlaneMod = new Plane(PlaneMat, 800, 800, 2, 2);&lt;br /&gt;      PlaneMod.autoCalcScreenCoords = true;&lt;br /&gt;      scene.addChild(PlaneMod);&lt;br /&gt;   &lt;br /&gt;      author = new TextField();&lt;br /&gt;      author.autoSize = TextFieldAutoSize.LEFT;&lt;br /&gt;      author.textColor = 0xFFFFFF;&lt;br /&gt;      author.text = "author:Max";&lt;br /&gt;      viewport.addChild(author);&lt;br /&gt;   &lt;br /&gt;      IGURL = new TextField();&lt;br /&gt;      IGURL.autoSize = TextFieldAutoSize.LEFT;&lt;br /&gt;      IGURL.textColor = 0xFFFFFF;&lt;br /&gt;      IGURL.text = "http://7-12.idv.tw";&lt;br /&gt;      viewport.addChild(IGURL);&lt;br /&gt;   &lt;br /&gt;      ValueU = 0;&lt;br /&gt;      TxtU = new TextField();&lt;br /&gt;      TxtU.autoSize = TextFieldAutoSize.LEFT;&lt;br /&gt;      TxtU.textColor = 0xFFFFFF;&lt;br /&gt;      TxtU.text = "";&lt;br /&gt;      viewport.addChild(TxtU);   &lt;br /&gt;      SLU = new Slider();&lt;br /&gt;      SLU.width = 100;&lt;br /&gt;      SLU.minimum = -10;&lt;br /&gt;      SLU.maximum = 10;&lt;br /&gt;      SLU.liveDragging = true;&lt;br /&gt;      SLU.snapInterval = 1;&lt;br /&gt;      SLU.tickInterval = SLU.snapInterval;  &lt;br /&gt;      viewport.addChild(SLU);&lt;br /&gt;      SLU.addEventListener( SliderEvent.THUMB_DRAG, thumbDragSLUHandler);&lt;br /&gt;   &lt;br /&gt;      ValueV = 0;&lt;br /&gt;      TxtV = new TextField();&lt;br /&gt;      TxtV.autoSize = TextFieldAutoSize.LEFT;&lt;br /&gt;      TxtV.textColor = 0xFFFFFF;&lt;br /&gt;      TxtV.text = "";&lt;br /&gt;      viewport.addChild(TxtV);   &lt;br /&gt;      SLV = new Slider();&lt;br /&gt;      SLV.width = 100;&lt;br /&gt;      SLV.minimum = -10;&lt;br /&gt;      SLV.maximum = 10;&lt;br /&gt;      SLV.liveDragging = true;&lt;br /&gt;      SLV.snapInterval = 1;&lt;br /&gt;      SLV.tickInterval = SLV.snapInterval;&lt;br /&gt;      viewport.addChild(SLV);&lt;br /&gt;      SLV.addEventListener( SliderEvent.THUMB_DRAG, thumbDragSLVHandler);&lt;br /&gt;    &lt;br /&gt;      ValueX = 0;&lt;br /&gt;      TxtX = new TextField();&lt;br /&gt;      TxtX.autoSize = TextFieldAutoSize.LEFT;&lt;br /&gt;      TxtX.textColor = 0xFFFFFF;&lt;br /&gt;      TxtX.text = "";&lt;br /&gt;      viewport.addChild(TxtX); &lt;br /&gt;      SLX = new Slider();&lt;br /&gt;      SLX.width = 100;&lt;br /&gt;      SLX.minimum = 0;&lt;br /&gt;      SLX.maximum = 180;&lt;br /&gt;      SLX.liveDragging = true;&lt;br /&gt;      SLX.snapInterval = 10;&lt;br /&gt;      SLX.tickInterval = SLX.snapInterval;  &lt;br /&gt;      viewport.addChild(SLX);&lt;br /&gt;      SLX.addEventListener( SliderEvent.THUMB_DRAG, thumbDragSLXHandler);&lt;br /&gt;   &lt;br /&gt;      ValueY = 0;&lt;br /&gt;      TxtY = new TextField();&lt;br /&gt;      TxtY.autoSize = TextFieldAutoSize.LEFT;&lt;br /&gt;      TxtY.textColor = 0xFFFFFF;&lt;br /&gt;      TxtY.text = "";&lt;br /&gt;      viewport.addChild(TxtY);&lt;br /&gt;      SLY = new Slider();&lt;br /&gt;      SLY.width = 100;&lt;br /&gt;      SLY.minimum = 0;&lt;br /&gt;      SLY.maximum = 180;&lt;br /&gt;      SLY.liveDragging = true;&lt;br /&gt;      SLY.snapInterval = 10;&lt;br /&gt;      SLY.tickInterval = SLY.snapInterval;&lt;br /&gt;      viewport.addChild(SLY);&lt;br /&gt;      SLY.addEventListener( SliderEvent.THUMB_DRAG, thumbDragSLYHandler);&lt;br /&gt;   &lt;br /&gt;      ValueZ = 0;&lt;br /&gt;      TxtZ = new TextField();&lt;br /&gt;      TxtZ.autoSize = TextFieldAutoSize.LEFT;&lt;br /&gt;      TxtZ.textColor = 0xFFFFFF;&lt;br /&gt;      TxtZ.text = "";&lt;br /&gt;      viewport.addChild(TxtZ);&lt;br /&gt;      SLZ = new Slider();&lt;br /&gt;      SLZ.width = 100;&lt;br /&gt;      SLZ.minimum = 0;&lt;br /&gt;      SLZ.maximum = 180;&lt;br /&gt;      SLZ.liveDragging = true;&lt;br /&gt;      SLZ.snapInterval = 10;&lt;br /&gt;      SLZ.tickInterval = SLZ.snapInterval;&lt;br /&gt;      viewport.addChild(SLZ);&lt;br /&gt;      SLZ.addEventListener( SliderEvent.THUMB_DRAG, thumbDragSLZHandler);&lt;br /&gt;   &lt;br /&gt;      startRendering();&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    override protected function onRenderTick(event:Event = null):void &lt;br /&gt;    { &lt;br /&gt;      TxtU.x = PlaneMod.screen.x + 170 + stage.stageWidth / 2;&lt;br /&gt;      TxtU.y = PlaneMod.screen.y - 120 + stage.stageHeight / 2;&lt;br /&gt;      TxtV.x = PlaneMod.screen.x + 170 + stage.stageWidth / 2;&lt;br /&gt;      TxtV.y = PlaneMod.screen.y - 70  + stage.stageHeight / 2;&lt;br /&gt;      SLU.move( PlaneMod.screen.x + 170 + stage.stageWidth / 2 , PlaneMod.screen.y - 100 + stage.stageHeight / 2);&lt;br /&gt;      SLV.move( PlaneMod.screen.x + 170 + stage.stageWidth / 2 , PlaneMod.screen.y - 50  + stage.stageHeight / 2);&lt;br /&gt;   &lt;br /&gt;      TxtX.x = PlaneMod.screen.x + 170 + stage.stageWidth / 2; &lt;br /&gt;      TxtX.y = PlaneMod.screen.y - 20  + stage.stageHeight / 2; &lt;br /&gt;      TxtY.x = PlaneMod.screen.x + 170 + stage.stageWidth / 2; &lt;br /&gt;      TxtY.y = PlaneMod.screen.y + 30  + stage.stageHeight / 2; &lt;br /&gt;      TxtZ.x = PlaneMod.screen.x + 170 + stage.stageWidth / 2;&lt;br /&gt;      TxtZ.y = PlaneMod.screen.y + 80  + stage.stageHeight / 2; &lt;br /&gt;      SLX.move( PlaneMod.screen.x + 170 + stage.stageWidth / 2 , PlaneMod.screen.y + 0   + stage.stageHeight / 2);&lt;br /&gt;      SLY.move( PlaneMod.screen.x + 170 + stage.stageWidth / 2 , PlaneMod.screen.y + 50  + stage.stageHeight / 2);&lt;br /&gt;      SLZ.move( PlaneMod.screen.x + 170 + stage.stageWidth / 2 , PlaneMod.screen.y + 100 + stage.stageHeight / 2);&lt;br /&gt;   &lt;br /&gt;      author.x = PlaneMod.screen.x + 170 + stage.stageWidth / 2; &lt;br /&gt;      author.y = PlaneMod.screen.y + 180  + stage.stageHeight / 2;&lt;br /&gt;   &lt;br /&gt;      IGURL.x = PlaneMod.screen.x - 220 + stage.stageWidth / 2; &lt;br /&gt;      IGURL.y = PlaneMod.screen.y + 180  + stage.stageHeight / 2;&lt;br /&gt;    &lt;br /&gt;      for each (var triangle3D:Triangle3D in PlaneMod.geometry.faces)&lt;br /&gt;      {&lt;br /&gt;        triangle3D.uv0.v -= ValueV;&lt;br /&gt;        triangle3D.uv1.v -= ValueV;&lt;br /&gt;        triangle3D.uv2.v -= ValueV;&lt;br /&gt;    &lt;br /&gt;        triangle3D.uv0.u -= ValueU;&lt;br /&gt;        triangle3D.uv1.u -= ValueU;&lt;br /&gt;        triangle3D.uv2.u -= ValueU; &lt;br /&gt;      }&lt;br /&gt;            &lt;br /&gt;      BitmapMaterial(PlaneMod.material).resetUVS();&lt;br /&gt;      PlaneMod.rotationX = ValueX;&lt;br /&gt;      PlaneMod.rotationY = ValueY;&lt;br /&gt;      PlaneMod.rotationZ = ValueZ;&lt;br /&gt;   &lt;br /&gt;      TxtU.text = "U值: " + ValueU.toString();&lt;br /&gt;      TxtV.text = "V值: " + ValueV.toString();  &lt;br /&gt;      TxtX.text = "旋轉X軸: " + ValueX.toString();&lt;br /&gt;      TxtY.text = "旋轉Y軸: " + ValueY.toString();&lt;br /&gt;      TxtZ.text = "旋轉Z軸: " + ValueZ.toString();&lt;br /&gt;      &lt;br /&gt;      super.onRenderTick(event);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;執行結果：&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SmhmWONezvI/AAAAAAAAARY/REFoR8H-AHY/s1600-h/demo.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5361647888342372082" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 350px" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SmhmWONezvI/AAAAAAAAARY/REFoR8H-AHY/s400/demo.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://7-12.idv.tw/DeyingData/Flash/PV3D/demo_dynamictexture/DynamicTextureSample.swf" target="_blank"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-847930394373189785?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/847930394373189785/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/07/pv3d-dynamic-texture.html#comment-form' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/847930394373189785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/847930394373189785'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/07/pv3d-dynamic-texture.html' title='【教學】PV3D動態貼圖 Dynamic Texture'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SmhmWONezvI/AAAAAAAAARY/REFoR8H-AHY/s72-c/demo.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-2702030899324640929</id><published>2009-07-19T05:18:00.000-07:00</published><updated>2010-10-28T07:39:14.948-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>【教學】Flash ActionScript3 Random亂數應用</title><content type='html'>將一些常用到的亂數功能，&lt;br /&gt;例如取一隨機亂數值、&lt;br /&gt;取限定範圍內的亂數值、&lt;br /&gt;取限定範圍不重複排列值等..，&lt;br /&gt;封裝成CalRandomClass.as檔&lt;br /&gt;只要在需要時引用並呼叫方法即可。&lt;br /&gt;&lt;br /&gt;ActionScript3 CalRandomClass.as檔代碼：&lt;br /&gt;&lt;pre class="javascript" name="code" &gt;package  &lt;br /&gt;{  &lt;br /&gt;  /**  &lt;br /&gt;  * ...計算亂數的類別&lt;br /&gt;  * @author Max  &lt;br /&gt;  */    &lt;br /&gt;  public class CalRandomClass  &lt;br /&gt;  {&lt;br /&gt;    private static  var _aUniqueIDs:Array; &lt;br /&gt;    &lt;br /&gt;    // 建構子 &lt;br /&gt;    public function CalRandomClass():void &lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;    }  &lt;br /&gt;    public function Ranround(nNumber:Number,nRoundToInterval:Number=1):Number &lt;br /&gt;    {&lt;br /&gt;      return Math.round(nNumber/nRoundToInterval)*nRoundToInterval;&lt;br /&gt;    }         &lt;br /&gt;    public function Ranfloor(nNumber:Number,nRoundToInterval:Number=1):Number &lt;br /&gt;    { &lt;br /&gt;      return Math.floor(nNumber/nRoundToInterval)*nRoundToInterval; &lt;br /&gt;    }     &lt;br /&gt;    public function Ranceil(nNumber:Number,nRoundToInterval:Number=1):Number &lt;br /&gt;    { &lt;br /&gt;      return Math.ceil(nNumber/nRoundToInterval)*nRoundToInterval; &lt;br /&gt;    }         &lt;br /&gt;    public function Ranrandom(nMinimum:Number,nMaximum:Number=0,nRoundToInterval:Number=1):Number &lt;br /&gt;    {&lt;br /&gt;      if (nMinimum &gt; nMaximum) &lt;br /&gt;      {&lt;br /&gt;        var nTemp:Number=nMinimum; &lt;br /&gt;        nMinimum=nMaximum; &lt;br /&gt;        nMaximum=nTemp; &lt;br /&gt;      } &lt;br /&gt;      var nDeltaRange:Number=(nMaximum-nMinimum)+(1*nRoundToInterval); &lt;br /&gt;      var nRandomNumber:Number=Math.random()*nDeltaRange; &lt;br /&gt;      nRandomNumber+=nMinimum; &lt;br /&gt;      return Ranfloor(nRandomNumber,nRoundToInterval); &lt;br /&gt;    }         &lt;br /&gt;    public function getUnique():Number &lt;br /&gt;    { &lt;br /&gt;      if (_aUniqueIDs==null) &lt;br /&gt;      { &lt;br /&gt;        _aUniqueIDs=new Array(); &lt;br /&gt;      } &lt;br /&gt;      var dCurrent:Date=new Date(); &lt;br /&gt;      var nID:Number=dCurrent.getTime(); &lt;br /&gt;      while (!isUnique(nID)) &lt;br /&gt;      { &lt;br /&gt;        nID+=Ranrandom(dCurrent.getTime(),2*dCurrent.getTime()); &lt;br /&gt;      } &lt;br /&gt;      _aUniqueIDs.push(nID); &lt;br /&gt;      return nID; &lt;br /&gt;    }        &lt;br /&gt;    private function isUnique(nNumber:Number):Boolean &lt;br /&gt;    { &lt;br /&gt;      for (var i:Number=0;i &lt; _aUniqueIDs.length;i++) &lt;br /&gt;      {&lt;br /&gt;        if (_aUniqueIDs[i]==nNumber) &lt;br /&gt;        { &lt;br /&gt;          return false; &lt;br /&gt;        } &lt;br /&gt;      } &lt;br /&gt;      return true; &lt;br /&gt;    }         &lt;br /&gt;    // 取得單一隨機亂數值 &lt;br /&gt;    public function GetSingleRandom():Number &lt;br /&gt;    {&lt;br /&gt;      // 傳回虛擬亂數 n，其中 0 &lt;= n &lt; 1。 &lt;br /&gt;      var ran:Number=Math.random(); &lt;br /&gt;      return ran; &lt;br /&gt;    }        &lt;br /&gt;    // 取得一定範圍單一亂數值 &lt;br /&gt;    public function GetRangeRandom(min:Number,max:Number,round:Number):Number &lt;br /&gt;    {&lt;br /&gt;      // 取其有效位數 &lt;br /&gt;      var tmproundstr:String=round.toString(); &lt;br /&gt;      var roundindex:int=tmproundstr.indexOf(".",0); &lt;br /&gt;      var roundnum:int=tmproundstr.length-roundindex-1; &lt;br /&gt;      // 取亂數 &lt;br /&gt;      var ran:Number=Ranrandom(min,max,round); &lt;br /&gt;      var newnum:Number; &lt;br /&gt;      // 過濾無效位元 &lt;br /&gt;      var tmpstr:String=ran.toString(); &lt;br /&gt;      var index:int=tmpstr.indexOf(".",0); &lt;br /&gt;      // 無小數點時處理 &lt;br /&gt;      if (index==-1) &lt;br /&gt;      {&lt;br /&gt;        tmpstr=tmpstr+".0"; &lt;br /&gt;        var newindex:int=tmpstr.indexOf(".",0); &lt;br /&gt;        newnum=Number(tmpstr.substr(0,newindex+roundnum+1)); &lt;br /&gt;      } &lt;br /&gt;      else &lt;br /&gt;      {&lt;br /&gt;        newnum=Number(tmpstr.substr(0,index+roundnum+1)); &lt;br /&gt;      } &lt;br /&gt;      return newnum; &lt;br /&gt;    }        &lt;br /&gt;    // 取得一定範圍不重覆所有亂數整數值&lt;br /&gt;    public function GetRangeArrayRandom(min:int,max:int):Array&lt;br /&gt;    {&lt;br /&gt;      var ResNum:Number=0;&lt;br /&gt;      var TmpAdd:Number=0;&lt;br /&gt;      var TmpPos:Array=new Array();&lt;br /&gt;      var TmpNum:Array=new Array();&lt;br /&gt;      for (var i:int=0;i &lt; (max-min)+1;i++)&lt;br /&gt;      {&lt;br /&gt;        TmpPos[i]=0;&lt;br /&gt;      }          &lt;br /&gt;      // 取得min-max的不重複亂數順序&lt;br /&gt;      while (TmpAdd &lt; (max-min)+1)&lt;br /&gt;      {&lt;br /&gt;        ResNum=Ranrandom( min, max,1);&lt;br /&gt;        if (TmpPos[ResNum-min]!=1)&lt;br /&gt;        {&lt;br /&gt;          TmpPos[ResNum-min]=1;&lt;br /&gt;          TmpNum.push(ResNum);&lt;br /&gt;          TmpAdd=TmpAdd+1;&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;      return TmpNum;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;過濾無效字元也可直接使用toFixed()來取有效位數，&lt;br /&gt;修改如下：&lt;br /&gt;&lt;span style="color:#009900;"&gt;//過濾無效位元&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;var&lt;/span&gt; newnum:&lt;span style="color:#3333ff;"&gt;Number&lt;/span&gt;;&lt;br /&gt;newnum = &lt;span style="color:#3333ff;"&gt;Number&lt;/span&gt;(ran.&lt;span style="color:#3333ff;"&gt;toFixed&lt;/span&gt;(roundnum));&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-2702030899324640929?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/2702030899324640929/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/07/flash-actionscript3-random.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/2702030899324640929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/2702030899324640929'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/07/flash-actionscript3-random.html' title='【教學】Flash ActionScript3 Random亂數應用'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-3512454253825822469</id><published>2009-07-16T06:35:00.000-07:00</published><updated>2009-07-16T07:24:03.191-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>【教學】PV3D 結合 flartoolkit</title><content type='html'>AR(Augmented Reality)擴張現實的技術，&lt;br /&gt;以電腦圖學計算攝影機(Webcam)，&lt;br /&gt;和標記(Marker)之間的相對位置，&lt;br /&gt;將開發者創造的虛擬的物件，&lt;br /&gt;依據標記在真實世界上的相關資訊，&lt;br /&gt;覆蓋到真實環境中。&lt;br /&gt;之前要玩這樣的技術，&lt;br /&gt;只有C或Java語言才提供，&lt;br /&gt;ARToolkit是C++開發的，&lt;br /&gt;NyARToolkit則是由Java寫成的，&lt;br /&gt;直到ㄧ位日本的程式設計師Saqoosha，&lt;br /&gt;改寫ActionScript3的FLARToolKit版本。&lt;br /&gt;此版結合PV3D也可只做AR的效果。&lt;br /&gt;&lt;br /&gt;FLARToolKit可以由以下連結取得&lt;br /&gt;&lt;a href="http://www.libspark.org/svn/as3/FLARToolKit/"&gt;http://www.libspark.org/svn/as3/FLARToolKit/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;而想要製作Marker可以到&lt;br /&gt;&lt;a href="http://flash.tarotaro.org/blog/2008/12/14/artoolkit-marker-generator-online-released/" target="_blank"&gt;flash.tarotaro.org.blog&lt;/a&gt;這邊上傳自製的Marker。&lt;br /&gt;&lt;br /&gt;以下就是參考FLARToolKit的範例修改而成&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/Sl8tAQdyx-I/AAAAAAAAAPM/zmSwIksxit0/s1600-h/demo.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5359051564037359586" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 290px" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/Sl8tAQdyx-I/AAAAAAAAAPM/zmSwIksxit0/s400/demo.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://7-12.idv.tw/DeyingData/Flash/PV3D/demo_AR/AR_demo.htm" target="_blank"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-3512454253825822469?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/3512454253825822469/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/07/pv3d-flartoolkit.html#comment-form' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/3512454253825822469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/3512454253825822469'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/07/pv3d-flartoolkit.html' title='【教學】PV3D 結合 flartoolkit'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_a8EDl0Lwf_Q/Sl8tAQdyx-I/AAAAAAAAAPM/zmSwIksxit0/s72-c/demo.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-4836667956414233523</id><published>2009-07-11T08:57:00.000-07:00</published><updated>2011-05-05T07:37:56.720-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Director'/><title type='text'>【教學】Director 3D 滑鼠互動 &amp; 模型貼圖變換</title><content type='html'>CastMember視窗：&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/Sli3HPOnqJI/AAAAAAAAAOo/ItaQArOo5ak/s1600-h/pic1.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5357233091732023442" style="WIDTH: 328px; CURSOR: hand; HEIGHT: 296px" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/Sli3HPOnqJI/AAAAAAAAAOo/ItaQArOo5ak/s400/pic1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lingo 程式代碼：&lt;br /&gt;----------Movie Script:"Main"&lt;br /&gt;&lt;pre class="javascript" name="code" &gt;&lt;br /&gt;global resSphere    -- 球體模型資源  &lt;br /&gt;global modSphere    -- 球體模型  &lt;br /&gt;global matSphere    -- 球體基本材質  &lt;br /&gt;global txtSphere1   -- 球體基本貼圖1  &lt;br /&gt;global txtSphere2   -- 球體基本貼圖2  &lt;br /&gt;  &lt;br /&gt;on startmovie  &lt;br /&gt;  member("Scene3D").resetworld()  &lt;br /&gt;  --建立球體模型資源 &lt;br /&gt;  resSphere = member("Scene3D").newModelResource("SphereRes",#Sphere,#front) &lt;br /&gt;  --球體半徑 &lt;br /&gt;  resSphere.radius = 40 &lt;br /&gt;  --球體的起始角度 &lt;br /&gt;  resSphere.startAngle = 0 &lt;br /&gt;  --球體的結束角度 &lt;br /&gt;  resSphere.endAngle = 360 &lt;br /&gt;  --球體的解析度數(越高越平滑) &lt;br /&gt;  resSphere.resolution = 24 &lt;br /&gt;  --建立球體模型 &lt;br /&gt;  modSphere = member("Scene3D").newModel("SphereRes") &lt;br /&gt;  modSphere.resource = resSphere &lt;br /&gt;  --球體位置 &lt;br /&gt;  modSphere.transform.position = vector(0,0,0) &lt;br /&gt;  --球體旋轉 &lt;br /&gt;  modSphere.transform.rotation = vector(0,180,0) &lt;br /&gt;  --設定基本材質球顏色 &lt;br /&gt;  --貼圖2 &lt;br /&gt;  txtSphere2 = member("Scene3D").newTexture("SphereTxt2",#fromCastmember,member("Face2")) &lt;br /&gt;  --貼圖1 &lt;br /&gt;  txtSphere1 = member("Scene3D").newTexture("SphereTxt1",#fromCastmember,member("Face1")) &lt;br /&gt;  --建立標準材質#standard,#painter,#engraver,#newsprint &lt;br /&gt;  matSphere = member("Scene3D").newshader("SphereMat",#standard) &lt;br /&gt;  --設定材質球陰影色 &lt;br /&gt;  matSphere.ambient = rgb(50,50,50) &lt;br /&gt;  --設定材質球基本色 &lt;br /&gt;  matSphere.diffuse = rgb(100,100,100) &lt;br /&gt;  --設定材質球反光色 &lt;br /&gt;  matSphere.specular = rgb(255,255,255) &lt;br /&gt;  --設定材質球發亮度 &lt;br /&gt;  matSphere.emissive = rgb(50,50,50) &lt;br /&gt;  --設定反光範圍大小 &lt;br /&gt;  matSphere.shininess = 70 &lt;br /&gt;  --材質混合度 &lt;br /&gt;  matSphere.blend = 70   &lt;br /&gt;  --材質透明度 &lt;br /&gt;  matSphere.transparent = 100 &lt;br /&gt;  --描繪形式(#fill,#wire,#point) &lt;br /&gt;  matSphere.renderstyle = #fill &lt;br /&gt;  --貼圖旋轉方向 &lt;br /&gt;  matSphere.texturetransform.rotate(0,0,0) &lt;br /&gt;  --貼圖重複0.2重複5次 &lt;br /&gt;  matSphere.texturetransform.scale(1,1,1) &lt;br /&gt;  --設定貼圖2 &lt;br /&gt;  matSphere.texture = txtSphere2 &lt;br /&gt;  --將材質指定給模型 &lt;br /&gt;  modSphere.shader = matSphere           &lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;----------Frame Script:"Loop"&lt;br /&gt;&lt;pre class="javascript" name="code" &gt;&lt;br /&gt;global resSphere    -- 球體模型資源   &lt;br /&gt;global modSphere    -- 球體模型  &lt;br /&gt;global matSphere    -- 球體基本材質  &lt;br /&gt;global txtSphere1   -- 球體基本貼圖1  &lt;br /&gt;global txtSphere2   -- 球體基本貼圖2  &lt;br /&gt;  &lt;br /&gt;on exitFrame me&lt;br /&gt;&lt;br /&gt;  --Pick  &lt;br /&gt;  mousepos = point(_mouse.mouseH,_mouse.mouseV) &lt;br /&gt;  Tag = sprite(1).camera.spritespacetoworldspace(mousepos) --2Dto3D &lt;br /&gt;  Ori = sprite(1).camera.worldposition &lt;br /&gt;  Ray = Tag - Ori &lt;br /&gt;  PickMod = member("Scene3D").modelsUnderRay(Ori,Ray,1,#detailed)&lt;br /&gt;&lt;br /&gt;  if count(PickMod)&gt;0 then &lt;br /&gt;    PickModName = PickMod[1].model &lt;br /&gt;    PickModName.shader.texture=txtSphere1 &lt;br /&gt;  else &lt;br /&gt;    modSphere.shader.texture=txtSphere2 &lt;br /&gt;  end if&lt;br /&gt;&lt;br /&gt;  go to the frame&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Score視窗：&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/Sli3PSb_UNI/AAAAAAAAAOw/vLpXtsKcFzQ/s1600-h/pic2.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5357233230032359634" style="WIDTH: 352px; CURSOR: hand; HEIGHT: 326px" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/Sli3PSb_UNI/AAAAAAAAAOw/vLpXtsKcFzQ/s400/pic2.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;執行結果：&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/Sli3VrQ4QYI/AAAAAAAAAO4/aq4Omwnnpsw/s1600-h/pic3.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5357233339775861122" style="WIDTH: 319px; CURSOR: hand; HEIGHT: 235px" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/Sli3VrQ4QYI/AAAAAAAAAO4/aq4Omwnnpsw/s400/pic3.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://igmax.myweb.hinet.net/demo_lingo_changeTexture/ChangeTexture2.htm"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-4836667956414233523?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/4836667956414233523/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/07/director-3d.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/4836667956414233523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/4836667956414233523'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/07/director-3d.html' title='【教學】Director 3D 滑鼠互動 &amp; 模型貼圖變換'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_a8EDl0Lwf_Q/Sli3HPOnqJI/AAAAAAAAAOo/ItaQArOo5ak/s72-c/pic1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-3998652655101278036</id><published>2009-07-11T05:20:00.001-07:00</published><updated>2011-05-05T07:39:52.778-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Director'/><title type='text'>【作品】Director 中使用Lingo 3D建置象棋</title><content type='html'>這是之前用Lingo寫的一個3D象棋程式，&lt;br /&gt;可用滑鼠抓取棋子，&lt;br /&gt;測試了各種棋子的走法。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SliDwETxqQI/AAAAAAAAAOg/JXJPQv_EPIo/s1600-h/demo.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 330px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5357176618570852610" border="0" alt="" src="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SliDwETxqQI/AAAAAAAAAOg/JXJPQv_EPIo/s400/demo.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://igmax.myweb.hinet.net/demo_chess/chess.htm" target="_blank"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-3998652655101278036?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/3998652655101278036/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/07/director-lingo-3d.html#comment-form' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/3998652655101278036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/3998652655101278036'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/07/director-lingo-3d.html' title='【作品】Director 中使用Lingo 3D建置象棋'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SliDwETxqQI/AAAAAAAAAOg/JXJPQv_EPIo/s72-c/demo.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-2904304406261558754</id><published>2009-07-10T06:03:00.000-07:00</published><updated>2009-07-10T07:02:10.367-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VC++'/><title type='text'>【教學】VC++與Flash溝通(二)</title><content type='html'>&lt;strong&gt;Step1：&lt;/strong&gt;&lt;br /&gt;1.開啟VS2005，建立一個新專案。&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/Slc8hNUKEQI/AAAAAAAAAMI/tRX0QpVqxCM/s1600-h/demo00.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5356816822988050690" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 380px" alt="" src="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/Slc8hNUKEQI/AAAAAAAAAMI/tRX0QpVqxCM/s400/demo00.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step2：&lt;/strong&gt;&lt;br /&gt;1.專案類型選擇MFC。&lt;br /&gt;2.類型選擇MFC應用程式。&lt;br /&gt;3.為專案設定位置與名稱。&lt;br /&gt;4.設定完按下[確定]鍵。&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/Slc83NaKkII/AAAAAAAAAMQ/zSQQrnXUvqw/s1600-h/demo01.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5356817200970371202" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 260px" alt="" src="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/Slc83NaKkII/AAAAAAAAAMQ/zSQQrnXUvqw/s400/demo01.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step3：&lt;/strong&gt;&lt;br /&gt;1.使用MFC應用程式精靈來幫忙設定。&lt;br /&gt;2.按[下一步&gt;]。&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/Slc9STU9alI/AAAAAAAAAMY/VC9igsA21cQ/s1600-h/demo02.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5356817666415618642" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 300px" alt="" src="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/Slc9STU9alI/AAAAAAAAAMY/VC9igsA21cQ/s400/demo02.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step4：&lt;/strong&gt;&lt;br /&gt;1.應用程式類型選擇以對話方塊為基礎(D)。&lt;br /&gt;2.專案樣式為MFC標準。&lt;br /&gt;3.使用MFC的共用DLL。&lt;br /&gt;4.按[下一步&gt;]。&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/Slc9lezqBwI/AAAAAAAAAMg/_Kx0RtxtD0U/s1600-h/demo03.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5356817995914675970" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 300px" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/Slc9lezqBwI/AAAAAAAAAMg/_Kx0RtxtD0U/s400/demo03.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step5：&lt;/strong&gt;&lt;br /&gt;1.將最大化與功能表取消。&lt;br /&gt;2.按[下一步&gt;]。&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/Slc938dSkmI/AAAAAAAAAMo/5OejKX-282E/s1600-h/demo04.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5356818313111573090" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 300px" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/Slc938dSkmI/AAAAAAAAAMo/5OejKX-282E/s400/demo04.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step6：&lt;/strong&gt;&lt;br /&gt;1.進階不做修改，直接[下一步&gt;]。&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/Slc-Ges94qI/AAAAAAAAAMw/WeAdZOyd0dY/s1600-h/demo05.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5356818562822300322" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 300px" alt="" src="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/Slc-Ges94qI/AAAAAAAAAMw/WeAdZOyd0dY/s400/demo05.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step7：&lt;/strong&gt;&lt;br /&gt;1.產生CMFCFlashProgApp與CMFCFlashProgDlg類別。&lt;br /&gt;2.按下[完成]鍵，完成dialog設定。&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/Slc-UtvDMqI/AAAAAAAAAM4/ngi9Nxp7KMY/s1600-h/demo06.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5356818807375737506" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 300px" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/Slc-UtvDMqI/AAAAAAAAAM4/ngi9Nxp7KMY/s400/demo06.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step8：&lt;/strong&gt;&lt;br /&gt;1.完成設定後可看到自動產生的對話框視窗。&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/Slc-j8_RPqI/AAAAAAAAANA/ZvJ2A4jeiGc/s1600-h/demo07.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5356819069168336546" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 270px" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/Slc-j8_RPqI/AAAAAAAAANA/ZvJ2A4jeiGc/s400/demo07.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step9：&lt;/strong&gt;&lt;br /&gt;1.點選右邊[資源檢視]標籤。&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/Slc-0SXLHHI/AAAAAAAAANI/bdmbQS0nih0/s1600-h/demo08.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5356819349783649394" style="WIDTH: 198px; CURSOR: hand; HEIGHT: 400px" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/Slc-0SXLHHI/AAAAAAAAANI/bdmbQS0nih0/s400/demo08.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step10：&lt;/strong&gt;&lt;br /&gt;1.在左邊Dialog視窗內點擊滑鼠右鍵。&lt;br /&gt;2.彈出視窗選擇[插入ActiveX控制項(X)...]。&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/Slc_C8GaesI/AAAAAAAAANQ/UepLn_c0HVc/s1600-h/demo09.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5356819601505811138" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 310px" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/Slc_C8GaesI/AAAAAAAAANQ/UepLn_c0HVc/s400/demo09.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step11：&lt;/strong&gt;&lt;br /&gt;1.選取Shockwave Flash Object選項。&lt;br /&gt;2.按下[確定]鍵。&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/Slc_O_KwrwI/AAAAAAAAANY/2go3owYa6po/s1600-h/demo10.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5356819808487780098" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 200px" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/Slc_O_KwrwI/AAAAAAAAANY/2go3owYa6po/s400/demo10.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step12：&lt;/strong&gt;&lt;br /&gt;1.出現黑色方塊的Flash OCX控制項表示成功加入。&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/Slc_bbM2QtI/AAAAAAAAANg/iv4DekcbS1I/s1600-h/demo11.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5356820022171157202" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 275px" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/Slc_bbM2QtI/AAAAAAAAANg/iv4DekcbS1I/s400/demo11.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step13：&lt;/strong&gt;&lt;br /&gt;1.在控制項上點擊滑鼠右鍵。&lt;br /&gt;2.彈出視窗選擇[加入變數(B)...]。&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/Slc_nGiRKaI/AAAAAAAAANo/NmVqI5XCALg/s1600-h/demo12.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5356820222782286242" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 290px" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/Slc_nGiRKaI/AAAAAAAAANo/NmVqI5XCALg/s400/demo12.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step14：&lt;/strong&gt;&lt;br /&gt;1.變數名稱取"m_Flashocx",(可自取)。&lt;br /&gt;2.按下[完成]鍵。&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/Slc_zO2btdI/AAAAAAAAANw/pl6vT49HSW4/s1600-h/demo13.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5356820431172777426" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 295px" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/Slc_zO2btdI/AAAAAAAAANw/pl6vT49HSW4/s400/demo13.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step15：&lt;/strong&gt;&lt;br /&gt;1.觀察[類別檢視]，&lt;br /&gt;2.多了CShockwaveflash1這個類別。&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/Slc__NyE57I/AAAAAAAAAN4/aCUXTAriElg/s1600-h/demo14.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5356820637044500402" style="WIDTH: 155px; CURSOR: hand; HEIGHT: 400px" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/Slc__NyE57I/AAAAAAAAAN4/aCUXTAriElg/s400/demo14.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step16：&lt;/strong&gt;&lt;br /&gt;1.選取[方案總管]。&lt;br /&gt;2.標頭檔多了shockwaveflash1.h檔，&lt;br /&gt;3.原始程式檔多了shockwaveflash1.cpp檔。&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SldAMpc7xnI/AAAAAAAAAOA/c40g8ROo7c4/s1600-h/demo15.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5356820867810313842" style="WIDTH: 167px; CURSOR: hand; HEIGHT: 400px" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SldAMpc7xnI/AAAAAAAAAOA/c40g8ROo7c4/s400/demo15.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step17：&lt;/strong&gt;&lt;br /&gt;1.選取MFCFlashProgDlg.h檔。&lt;br /&gt;2.#include "shockwaveflash1.h"自動被添加。&lt;br /&gt;3.在//程式碼實作 public:裡&lt;br /&gt;有 CShockwaveflash1 m_Flashocx;&lt;br /&gt;表示控件已宣告。&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SldAZYj7EzI/AAAAAAAAAOI/E-hHcBfvX6c/s1600-h/demo16.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5356821086614524722" style="WIDTH: 356px; CURSOR: hand; HEIGHT: 400px" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SldAZYj7EzI/AAAAAAAAAOI/E-hHcBfvX6c/s400/demo16.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step18：&lt;/strong&gt;&lt;br /&gt;1.接下來可以到MFCFlashProgDlg.cpp裡&lt;br /&gt;的BOOL CMFCFlashProgDlg::OnInitDialog()&lt;br /&gt;函式裡建立實體以下為增加的程式碼片段。&lt;br /&gt;VC程式碼：&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;span style="color:green;"&gt;//--------------------------------------主視窗&lt;/span&gt;&lt;br /&gt;CMFCFlashProgDlg::MoveWindow(&lt;span style="color:maroon;"&gt;0&lt;/span&gt;,&lt;span style="color:maroon;"&gt;0&lt;/span&gt;,&lt;span style="color:maroon;"&gt;640&lt;/span&gt;,&lt;span style="color:maroon;"&gt;480&lt;/span&gt;,&lt;span style="color:maroon;"&gt;1&lt;/span&gt;);   &lt;br /&gt;CMFCFlashProgDlg::ShowWindow(SW_SHOW);&lt;br /&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;//--------------------------------------Flash物件&lt;/span&gt;&lt;br /&gt;hwndflash = m_Flashocx.GetSafeHwnd();&lt;br /&gt;m_Flashocx.SetParent(&lt;span style="color:blue;"&gt;this&lt;/span&gt;);    &lt;br /&gt;m_Flashocx.MoveWindow( &lt;span style="color:maroon;"&gt;0&lt;/span&gt;, &lt;span style="color:maroon;"&gt;0&lt;/span&gt;, &lt;span style="color:maroon;"&gt;550&lt;/span&gt;, &lt;span style="color:maroon;"&gt;400&lt;/span&gt;, &lt;span style="color:maroon;"&gt;1&lt;/span&gt;);   &lt;br /&gt;m_Flashocx.ShowWindow(SW_SHOW);    &lt;br /&gt;FlashName = _T(&lt;span style="color:maroon;"&gt;"C://AS3TestProg.swf"&lt;/span&gt;);&lt;br /&gt;m_Flashocx.put_Movie(FlashName);&lt;br /&gt;m_Flashocx.put_Menu(false);&lt;br /&gt;m_Flashocx.put_Playing(true); &lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step19：&lt;/strong&gt;&lt;br /&gt;1.接下來新增一個Button1(按鈕1)，&lt;br /&gt;在按鈕上點擊兩下進入函式內，&lt;br /&gt;將VC要與Flash溝通的程式碼加入其中，&lt;br /&gt;以下為增加的程式碼片段。&lt;br /&gt;VC程式碼：&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;span style="color:blue;"&gt;void&lt;/span&gt; CMFCFlashProgDlg::OnBnClickedButton1()&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:green;"&gt;// TODO: 在此加入控制項告知處理常式程式碼&lt;/span&gt;&lt;br /&gt;    CString XMLSTR;&lt;br /&gt;    CString res;&lt;br /&gt;    CString strStartFunction;&lt;br /&gt;    CString strVarable;&lt;br /&gt;    CString strValue;&lt;br /&gt;    CString strEndFunction;&lt;br /&gt;    &lt;span style="color:green;"&gt;//回呼函式名稱&lt;/span&gt;&lt;br /&gt;    strStartFunction = _T(&lt;span style="color:maroon;"&gt;"&amp;lt;invoke name='CallMeFromApplication'&amp;gt;"&lt;/span&gt;);&lt;br /&gt;    &lt;span style="color:green;"&gt;//Flash變數名    &lt;/span&gt;&lt;br /&gt;    strVarable = _T(&lt;span style="color:maroon;"&gt;"&amp;lt;arguments&amp;gt;&amp;lt;string&amp;gt;strTest1&amp;lt;/string&amp;gt;&amp;lt;/arguments&amp;gt;"&lt;/span&gt;);&lt;br /&gt;   &lt;span style="color:green;"&gt;//Flash變數值&lt;/span&gt;&lt;br /&gt;    strValue = _T(&lt;span style="color:maroon;"&gt;"&amp;lt;arguments&amp;gt;&amp;lt;string&amp;gt;VC++SendFlash&amp;lt;/string&amp;gt;&amp;lt;/arguments&amp;gt;"&lt;/span&gt;);  &lt;br /&gt;   &lt;span style="color:green;"&gt;//結束標籤&lt;/span&gt;&lt;br /&gt;    strEndFunction = _T(&lt;span style="color:maroon;"&gt;"&amp;lt;/invoke&amp;gt;"&lt;/span&gt;);                                            &lt;br /&gt;&lt;br /&gt;    XMLSTR = strStartFunction + strVarable + strValue + strEndFunction;&lt;br /&gt;    &lt;span style="color:green;"&gt;// 傳遞變數值給Flash&lt;/span&gt;&lt;br /&gt;    res = m_Flashocx.CallFunction(XMLSTR);  &lt;br /&gt;}&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step20：&lt;/strong&gt;&lt;br /&gt;1.而要從Flash傳遞給VC則需要新增FSCommand事件，&lt;br /&gt;2.點選&lt;加入&gt;FSCommandShockwaveflash12。&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SldA2ZWZqnI/AAAAAAAAAOQ/-zRlUjE0eBs/s1600-h/demo17.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5356821585042451058" style="WIDTH: 304px; CURSOR: hand; HEIGHT: 226px" alt="" src="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SldA2ZWZqnI/AAAAAAAAAOQ/-zRlUjE0eBs/s400/demo17.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step21：&lt;/strong&gt;&lt;br /&gt;於VC程式中自動新增以下程式碼：&lt;br /&gt;VC程式碼：&lt;br /&gt;&lt;code&gt;&lt;pre&gt;BEGIN_EVENTSINK_MAP(CMFCFlashProgDlg, CDialog)&lt;br /&gt;    ON_EVENT(CMFCFlashProgDlg, IDC_SHOCKWAVEFLASH1, &lt;span style="color:maroon;"&gt;150&lt;/span&gt;, &lt;br /&gt;    CMFCFlashProgDlg::FSCommandShockwaveflash1,VTS_BSTR VTS_BSTR)&lt;br /&gt;END_EVENTSINK_MAP()&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;void&lt;/span&gt; CMFCFlashProgDlg::FSCommandShockwaveflash1(LPCTSTR command, LPCTSTR args)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:green;"&gt;// TODO: 在此加入您的訊息處理常式程式碼&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    fscomd = command;    &lt;br /&gt;    fsargs = args;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color:green;"&gt;//為Flash fscommand的第一個參數&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:blue;"&gt;if&lt;/span&gt;( fscomd == &lt;span style="color:maroon;"&gt;"ASCallVC"&lt;/span&gt; )   &lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color:green;"&gt;//為Flash fscommand的第二個參數&lt;/span&gt;&lt;br /&gt;        &lt;span style="color:blue;"&gt;if&lt;/span&gt;( fsargs==&lt;span style="color:maroon;"&gt;"true"&lt;/span&gt; ) &lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color:green;"&gt;//可作為Flash傳遞過來想做的事    &lt;/span&gt;&lt;br /&gt;              MessageBoxW( _T(&lt;span style="color:maroon;"&gt;"Flash call VC++"&lt;/span&gt;), _T(&lt;span style="color:maroon;"&gt;"MSG"&lt;/span&gt;), MB_OK);&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;程式執行結果：&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SldBvtPTWdI/AAAAAAAAAOY/N8J2ztHmaXI/s1600-h/demo18.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5356822569633929682" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 300px" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SldBvtPTWdI/AAAAAAAAAOY/N8J2ztHmaXI/s400/demo18.jpg" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-2904304406261558754?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/2904304406261558754/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/07/vcflash_10.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/2904304406261558754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/2904304406261558754'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/07/vcflash_10.html' title='【教學】VC++與Flash溝通(二)'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_a8EDl0Lwf_Q/Slc8hNUKEQI/AAAAAAAAAMI/tRX0QpVqxCM/s72-c/demo00.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-1398537279407997282</id><published>2009-07-10T05:30:00.000-07:00</published><updated>2010-10-28T08:56:35.315-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VC++'/><title type='text'>【教學】VC++與Flash溝通(一)</title><content type='html'>有時後會需要VC嵌入Flash一起製作專案，&lt;br /&gt;Flash要如何與VC++等外部程式溝通呢？&lt;br /&gt;原本在ActionScript2.0時非常容易，&lt;br /&gt;只需要LoadVars與Fscommand就行了。&lt;br /&gt;但是到了ActionScript3.0較複雜，&lt;br /&gt;主要使用到ExternalInterface與fscommand，&lt;br /&gt;以下測試的範例就是製作一個紅色的球，&lt;br /&gt;球由起始點往右移動，&lt;br /&gt;當到達X座標250時變會停住不動，&lt;br /&gt;此時由VC++程式按扭來控制Flash的球，&lt;br /&gt;讓他回到起始點重新移動。&lt;br /&gt;VC++也可直接改變Flash的變數值。&lt;br /&gt;而Flash在場景上按滑鼠時也會通知VC。&lt;br /&gt;以下為Flash AS3部分的程式碼：&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;package &lt;br /&gt;{ &lt;br /&gt;  import flash.display.Stage; &lt;br /&gt;  import flash.display.StageAlign; &lt;br /&gt;  import flash.display.StageScaleMode;&lt;br /&gt;  import flash.display.MovieClip;&lt;br /&gt;  import flash.display.Shape; &lt;br /&gt;  import flash.events.Event; &lt;br /&gt;  import flash.events.MouseEvent;&lt;br /&gt;  import flash.text.TextField;  &lt;br /&gt;  import flash.external.ExternalInterface;&lt;br /&gt;  import flash.system.fscommand;&lt;br /&gt;  &lt;br /&gt;  public class AS3TestProg extends MovieClip&lt;br /&gt;  {  &lt;br /&gt;    public var testnum:String;  &lt;br /&gt;    public var shapobj:Shape;&lt;br /&gt;    public var field:TextField;  &lt;br /&gt;    public var strTest1:String;&lt;br /&gt;    public var strTest2:String;&lt;br /&gt;    public var strTest1txt:TextField;&lt;br /&gt;    public var strTest2txt:TextField;&lt;br /&gt;&lt;br /&gt;    public function AS3TestProg()&lt;br /&gt;    {  &lt;br /&gt;      testnum = "準備接收VC傳來的字串訊息.";&lt;br /&gt;      field = new TextField();&lt;br /&gt;      field.width = 300;&lt;br /&gt;      field.height = 20;&lt;br /&gt;      field.x = 50;&lt;br /&gt;      field.y = 50;&lt;br /&gt;      addChild(field);&lt;br /&gt;      &lt;br /&gt;      strTest1 = "測試字串1";&lt;br /&gt;      strTest1txt = new TextField();&lt;br /&gt;      strTest1txt.width = 300;&lt;br /&gt;      strTest1txt.height = 20;&lt;br /&gt;      strTest1txt.x = 50;&lt;br /&gt;      strTest1txt.y = 70;&lt;br /&gt;      addChild(strTest1txt);&lt;br /&gt;     &lt;br /&gt;      strTest2 = "測試字串2";&lt;br /&gt;      strTest2txt = new TextField();&lt;br /&gt;      strTest2txt.width = 300;&lt;br /&gt;      strTest2txt.height = 20;&lt;br /&gt;      strTest2txt.x = 50;&lt;br /&gt;      strTest2txt.y = 90;&lt;br /&gt;      addChild(strTest2txt);&lt;br /&gt;       &lt;br /&gt;      init();  &lt;br /&gt;    }  &lt;br /&gt;&lt;br /&gt;    public function init():void&lt;br /&gt;    {&lt;br /&gt;      stage.stageWidth = 550;&lt;br /&gt;      stage.stageHeight = 400; &lt;br /&gt;      stage.frameRate = 24;&lt;br /&gt;      stage.scaleMode = StageScaleMode.NO_SCALE;&lt;br /&gt;      stage.align = StageAlign.TOP_LEFT;&lt;br /&gt;      &lt;br /&gt;      shapobj = new Shape();  &lt;br /&gt;      shapobj.graphics.beginFill(0xFF0000, 100);&lt;br /&gt;      shapobj.graphics.drawCircle(0, 0, 10);&lt;br /&gt;      shapobj.graphics.endFill();&lt;br /&gt;      shapobj.x = 10;&lt;br /&gt;      shapobj.y = 10;&lt;br /&gt;      addChild(shapobj);&lt;br /&gt;      stage.addEventListener( MouseEvent.CLICK, onMouseUpHandle);&lt;br /&gt;     &lt;br /&gt;      // 與外部溝通&lt;br /&gt;      if (ExternalInterface.available)&lt;br /&gt;      {&lt;br /&gt;        // 與VC++溝通的介面(VC傳值給Flash變數)    &lt;br /&gt;        ExternalInterface.addCallback("CallMeFromApplication", InternalFunction);&lt;br /&gt;        ExternalInterface.addCallback("CallMeFromApplication2", CallbackFunction);&lt;br /&gt;      }&lt;br /&gt;      &lt;br /&gt;      addEventListener(Event.ENTER_FRAME, onEnterFrameHandle );&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    // 建立與VC++溝通的介面(VC傳值給Flash變數)&lt;br /&gt;    public function InternalFunction(Str1:String ,Str2:String ):String&lt;br /&gt;    {&lt;br /&gt;      this[Str1] = Str2;  &lt;br /&gt;      return "the function was called successfully";&lt;br /&gt;    }&lt;br /&gt;         &lt;br /&gt;    // 建立與VC++溝通的介面(VC傳值給Flash變數)&lt;br /&gt;    public function CallbackFunction(Str1:String ,Str2:String ):String&lt;br /&gt;    {&lt;br /&gt;      this[Str1] = Str2;  &lt;br /&gt;      return "the function was called successfully";&lt;br /&gt;    }&lt;br /&gt;       &lt;br /&gt;    public function onMouseUpHandle(event:MouseEvent):void&lt;br /&gt;    {&lt;br /&gt;      // trace("click");&lt;br /&gt;      // 與VC++溝通的介面(Flash呼叫VC)   &lt;br /&gt;      fscommand( "ASCallVC", "true");&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public function onEnterFrameHandle(event:Event):void&lt;br /&gt;    {&lt;br /&gt;      field.text = testnum;&lt;br /&gt;      strTest1txt.text = strTest1;&lt;br /&gt;      strTest2txt.text = strTest2;&lt;br /&gt;     &lt;br /&gt;      if ( strTest2 == "ReSetFrame")&lt;br /&gt;      {&lt;br /&gt;        shapobj.x = 10;&lt;br /&gt;        strTest2 = "重新開始";&lt;br /&gt;      }&lt;br /&gt;       &lt;br /&gt;      shapobj.x += 1;&lt;br /&gt;      if(shapobj.x&gt;=250)&lt;br /&gt;      {&lt;br /&gt;        shapobj.x = 250;&lt;br /&gt;        strTest2 = "到達終點"&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-1398537279407997282?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/1398537279407997282/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/07/vcflash.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/1398537279407997282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/1398537279407997282'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/07/vcflash.html' title='【教學】VC++與Flash溝通(一)'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-4919017068553644556</id><published>2009-07-08T03:04:00.000-07:00</published><updated>2009-07-08T03:09:58.264-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>【教學】PV3D 自定義動畫網格範例</title><content type='html'>這個範例是參考國外例子來改寫的，&lt;br /&gt;主要測試自定義的TriangleMesh3D，&lt;br /&gt;將自定義的類封裝成AnimatedMesh類，&lt;br /&gt;將一些動畫的設定加入至該類，&lt;br /&gt;是原先TriangleMesh3D教學篇的延伸。&lt;br /&gt;&lt;br /&gt;執行結果：&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SlRvoslSgWI/AAAAAAAAAMA/y8GNwCZNgWM/s1600-h/demo.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5356028601803374946" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 290px" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SlRvoslSgWI/AAAAAAAAAMA/y8GNwCZNgWM/s400/demo.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://7-12.idv.tw/swf/pv3d_demo_CustomTriangle.swf" target="_blank"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-4919017068553644556?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/4919017068553644556/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/07/pv3d.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/4919017068553644556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/4919017068553644556'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/07/pv3d.html' title='【教學】PV3D 自定義動畫網格範例'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SlRvoslSgWI/AAAAAAAAAMA/y8GNwCZNgWM/s72-c/demo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-2007881260347679389</id><published>2009-07-08T02:09:00.000-07:00</published><updated>2010-10-28T09:18:57.034-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>【教學】PV3D創建網格模型 TriangleMesh3D</title><content type='html'>&lt;pre class="javascript" name="code" &gt;package  &lt;br /&gt;{  &lt;br /&gt;  // flash  &lt;br /&gt;  import flash.events.Event;  &lt;br /&gt;  // pv3d  &lt;br /&gt;  import org.papervision3d.core.geom.TriangleMesh3D;  &lt;br /&gt;  import org.papervision3d.core.geom.renderables.Triangle3D;  &lt;br /&gt;  import org.papervision3d.core.geom.renderables.Vertex3D;  &lt;br /&gt;  import org.papervision3d.materials.WireframeMaterial; &lt;br /&gt;  import org.papervision3d.materials.ColorMaterial; &lt;br /&gt;  import org.papervision3d.view.BasicView; &lt;br /&gt;  import org.papervision3d.objects.DisplayObject3D; &lt;br /&gt;  &lt;br /&gt;  // TriangleMesh3DSample類別繼承BasicView &lt;br /&gt;  public class TriangleMesh3DSample extends BasicView &lt;br /&gt;  { &lt;br /&gt;    // 宣告網格三角面 &lt;br /&gt;    private var triangleMesh3d1:TriangleMesh3D; &lt;br /&gt;    private var triangleMesh3d2:TriangleMesh3D; &lt;br /&gt;    private var triangleMesh3d3:TriangleMesh3D; &lt;br /&gt;    private var triangleMesh3d4:TriangleMesh3D; &lt;br /&gt;    // 自定網格群組 &lt;br /&gt;    private var triangleMeshGroup:DisplayObject3D; &lt;br /&gt;    &lt;br /&gt;    // 建構函式 &lt;br /&gt;    public function TriangleMesh3DSample() &lt;br /&gt;    { &lt;br /&gt;      // 建置自定網格面 &lt;br /&gt;      initMesh3D();     &lt;br /&gt;    } &lt;br /&gt;&lt;br /&gt;    // 建置自定網格面 &lt;br /&gt;    private function initMesh3D():void &lt;br /&gt;    {&lt;br /&gt;      // 網格正面材質 &lt;br /&gt;      var materialfront:WireframeMaterial = new WireframeMaterial(0x555555,100,0); &lt;br /&gt;      // 網格背面材質 &lt;br /&gt;      var materialback:ColorMaterial = new ColorMaterial(0xcc0000); &lt;br /&gt;      // 自定網格群組 &lt;br /&gt;      triangleMeshGroup = new DisplayObject3D();&lt;br /&gt;      // 三角面頂點座標 &lt;br /&gt;      var vertex3D_1:Vertex3D = new Vertex3D(-200,  200, 0 );&lt;br /&gt;      var vertex3D_2:Vertex3D = new Vertex3D( 200, -200, 0 ); &lt;br /&gt;      var vertex3D_3:Vertex3D = new Vertex3D(-200, -200, 0 ); &lt;br /&gt;      var vertex3D_4:Vertex3D = new Vertex3D(-200,  200, 0 ); &lt;br /&gt;      var vertex3D_5:Vertex3D = new Vertex3D( 200,  200, 0 ); &lt;br /&gt;      var vertex3D_6:Vertex3D = new Vertex3D( 200, -200, 0 ); &lt;br /&gt;      // 三角面1頂點索引陣列 &lt;br /&gt;      var triangleVertices1:Array = [vertex3D_3,vertex3D_2,vertex3D_1]; &lt;br /&gt;      // 建立三角面1         &lt;br /&gt;      var triangle3d1:Triangle3D = new Triangle3D( null, triangleVertices1, null, null); &lt;br /&gt;      var triangleFaces1:Array = [triangle3d1]; &lt;br /&gt;      // 建立網格三角面1 &lt;br /&gt;      triangleMesh3d1 = new TriangleMesh3D(materialfront,triangleVertices1,triangleFaces1,"m1");&lt;br /&gt;      triangle3d1.instance = triangleMesh3d1; &lt;br /&gt;      triangleMeshGroup.addChild(triangleMesh3d1);&lt;br /&gt;      // 三角面2頂點索引陣列 &lt;br /&gt;      var triangleVertices2:Array = [vertex3D_6, vertex3D_5, vertex3D_4];&lt;br /&gt;      // 建立三角面2 &lt;br /&gt;      var triangle3d2:Triangle3D = new Triangle3D( null, triangleVertices2, null, null);&lt;br /&gt;      var triangleFaces2:Array = [triangle3d2]; &lt;br /&gt;      // 建立網格三角面2 &lt;br /&gt;      triangleMesh3d2 = new TriangleMesh3D(materialfront,triangleVertices2,triangleFaces2,"m2"); &lt;br /&gt;      triangle3d2.instance = triangleMesh3d2; &lt;br /&gt;      triangleMeshGroup.addChild(triangleMesh3d2);&lt;br /&gt;      // 三角面3頂點索引陣列 &lt;br /&gt;      var triangleVertices3:Array = [vertex3D_1,vertex3D_2,vertex3D_3]; &lt;br /&gt;      // 建立三角面3        &lt;br /&gt;      var triangle3d3:Triangle3D = new Triangle3D( null, triangleVertices3, null, null);&lt;br /&gt;      var triangleFaces3:Array = [triangle3d3]; &lt;br /&gt;      // 建立網格三角面3 &lt;br /&gt;      triangleMesh3d3 = new TriangleMesh3D(materialback,triangleVertices3,triangleFaces3,"m3"); &lt;br /&gt;      triangle3d3.instance = triangleMesh3d3; &lt;br /&gt;      triangleMeshGroup.addChild(triangleMesh3d3); &lt;br /&gt;      // 三角面4頂點索引陣列 &lt;br /&gt;      var triangleVertices4:Array = [vertex3D_4, vertex3D_5, vertex3D_6]; &lt;br /&gt;      // 建立三角面4 &lt;br /&gt;      var triangle3d4:Triangle3D = new Triangle3D( null, triangleVertices4, null, null); &lt;br /&gt;      var triangleFaces4:Array = [triangle3d4]; &lt;br /&gt;      // 建立網格三角面4 &lt;br /&gt;      triangleMesh3d4 = new TriangleMesh3D(materialback,triangleVertices4,triangleFaces4,"m4"); &lt;br /&gt;      triangle3d4.instance = triangleMesh3d4; &lt;br /&gt;      triangleMeshGroup.addChild(triangleMesh3d4); &lt;br /&gt;      // 自定網格群組加入場景中 &lt;br /&gt;      scene.addChild(triangleMeshGroup); &lt;br /&gt;      // 開始渲染 &lt;br /&gt;      startRendering();        &lt;br /&gt;    } &lt;br /&gt;    &lt;br /&gt;    // Loop(覆寫AbstractView的onRenderTick()方法)&lt;br /&gt;    override protected function onRenderTick(event:Event=null):void&lt;br /&gt;    {&lt;br /&gt;      // 自定網格群組繞Y軸旋轉 &lt;br /&gt;      triangleMeshGroup.rotationY += 5; &lt;br /&gt;      super.onRenderTick(event); &lt;br /&gt;    } &lt;br /&gt;  } &lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;執行結果：&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SlRi7Z8pmRI/AAAAAAAAAL4/bWeIi3Gd-9k/s1600-h/demo.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5356014629567437074" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 290px" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SlRi7Z8pmRI/AAAAAAAAAL4/bWeIi3Gd-9k/s400/demo.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://7-12.idv.tw/swf/pv3d_demo_TriangleMesh3D_Sample.swf" target="_blank"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-2007881260347679389?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/2007881260347679389/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/07/pv3d-trianglemesh3d.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/2007881260347679389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/2007881260347679389'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/07/pv3d-trianglemesh3d.html' title='【教學】PV3D創建網格模型 TriangleMesh3D'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SlRi7Z8pmRI/AAAAAAAAAL4/bWeIi3Gd-9k/s72-c/demo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-1098953621113650243</id><published>2009-07-06T19:51:00.000-07:00</published><updated>2010-05-17T01:15:49.084-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>色彩值轉換函式</title><content type='html'>將RGB值轉成16進制值：&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;function&lt;/span&gt; RGBToHex(r:&lt;span style="color:blue;"&gt;uint&lt;/span&gt;, g:&lt;span style="color:blue;"&gt;uint&lt;/span&gt;, b:&lt;span style="color:blue;"&gt;uint&lt;/span&gt;):&lt;span style="color:blue;"&gt;uint&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:blue;"&gt;var&lt;/span&gt; hex:&lt;span style="color:blue;"&gt;uint&lt;/span&gt; = (r &amp;lt;&amp;lt; &lt;span style="color:#000000;"&gt;16&lt;/span&gt; │ g &amp;lt;&amp;lt; │ &lt;span style="color:#000000;"&gt;8&lt;/span&gt;  b);&lt;br /&gt;    &lt;span style="color:blue;"&gt;return&lt;/span&gt; hex;&lt;br /&gt;}&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;將16進制值轉成RGB值：&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;function&lt;/span&gt; HexToRGB(hex:&lt;span style="color:blue;"&gt;uint&lt;/span&gt;):&lt;span style="color:#3333ff;"&gt;Array&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:blue;"&gt;var&lt;/span&gt; rgb:&lt;span style="color:#3333ff;"&gt;Array&lt;/span&gt; = [];&lt;br /&gt;    &lt;span style="color:blue;"&gt;var&lt;/span&gt; r:&lt;span style="color:blue;"&gt;uint&lt;/span&gt; = hex &amp;gt;&amp;gt; &lt;span style="color:#000000;"&gt;16&lt;/span&gt; ;&lt;br /&gt;    &lt;span style="color:blue;"&gt;var&lt;/span&gt; g:&lt;span style="color:blue;"&gt;uint&lt;/span&gt; = hex &amp;gt;&amp;gt; &lt;span style="color:#000000;"&gt;8&lt;/span&gt; &amp;amp; &lt;span style="color:#000000;"&gt;0xFF&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color:blue;"&gt;var&lt;/span&gt; b:&lt;span style="color:blue;"&gt;uint&lt;/span&gt; = hex &amp;amp; &lt;span style="color:#000000;"&gt;0xFF&lt;/span&gt;;&lt;br /&gt;    rgb.&lt;span style="color:#3333ff;"&gt;push&lt;/span&gt;(r, g, b);&lt;br /&gt;    &lt;span style="color:blue;"&gt;return&lt;/span&gt; rgb;&lt;br /&gt;}&lt;/pre&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-1098953621113650243?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/1098953621113650243/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/07/blog-post.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/1098953621113650243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/1098953621113650243'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/07/blog-post.html' title='色彩值轉換函式'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-8723703788127708060</id><published>2009-07-06T19:15:00.000-07:00</published><updated>2009-07-06T19:40:39.554-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VC++'/><title type='text'>SBCS函數對照表</title><content type='html'>&lt;table width="400" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th scope="col" bordercolor="#999999" width="193" bgcolor="#cccccc"&gt;通用名稱&lt;/th&gt;&lt;th scope="col" bordercolor="#999999" width="191" bgcolor="#cccccc"&gt;對應的SBCS函數&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tmain&lt;/td&gt;&lt;td bordercolor="#999999"&gt;main&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tWinMain&lt;/td&gt;&lt;td bordercolor="#999999"&gt;WinMain&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;__targv&lt;/td&gt;&lt;td bordercolor="#999999"&gt;__argv&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999" bgcolor="#cccccc" colspan="2"&gt;標準輸出/輸入&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_fgettc&lt;/td&gt;&lt;td bordercolor="#999999"&gt;fgetc&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_fgettchar&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_fgetchar&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_fgetts&lt;/td&gt;&lt;td bordercolor="#999999"&gt;fgets&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_fputtc&lt;/td&gt;&lt;td bordercolor="#999999"&gt;fputc&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_fputtchar&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_fputchar&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_fputts&lt;/td&gt;&lt;td bordercolor="#999999"&gt;fputs&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_ftprintf&lt;/td&gt;&lt;td bordercolor="#999999"&gt;fprintf&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_ftscanf&lt;/td&gt;&lt;td bordercolor="#999999"&gt;fscanf&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_gettc&lt;/td&gt;&lt;td bordercolor="#999999"&gt;getc&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_gettchar&lt;/td&gt;&lt;td bordercolor="#999999"&gt;getchar&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_getts&lt;/td&gt;&lt;td bordercolor="#999999"&gt;gets&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_puttc&lt;/td&gt;&lt;td bordercolor="#999999"&gt;putc&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_puttchar&lt;/td&gt;&lt;td bordercolor="#999999"&gt;putchar&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_putts&lt;/td&gt;&lt;td bordercolor="#999999"&gt;puts&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_sntprintf&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_snprintf&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_stprintf&lt;/td&gt;&lt;td bordercolor="#999999"&gt;sprintf&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_stscanf&lt;/td&gt;&lt;td bordercolor="#999999"&gt;sscanf&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tprintf&lt;/td&gt;&lt;td bordercolor="#999999"&gt;printf&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tscanf&lt;/td&gt;&lt;td bordercolor="#999999"&gt;scanf&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_ungettc&lt;/td&gt;&lt;td bordercolor="#999999"&gt;ungetc&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_vftprintf&lt;/td&gt;&lt;td bordercolor="#999999"&gt;vfprintf&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_vsntprintf&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_vsnprintf&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_vstprintf&lt;/td&gt;&lt;td bordercolor="#999999"&gt;vsprintf&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_vtprintf&lt;/td&gt;&lt;td bordercolor="#999999"&gt;vprintf&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999" bgcolor="#cccccc" colspan="2"&gt;資料轉換&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_i64tot&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_i64toa&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_itot&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_itoa&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_ltot&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_ltoa&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcstod&lt;/td&gt;&lt;td bordercolor="#999999"&gt;strtod&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcstol&lt;/td&gt;&lt;td bordercolor="#999999"&gt;strtol&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcstoul&lt;/td&gt;&lt;td bordercolor="#999999"&gt;strtoul&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_ttoi&lt;/td&gt;&lt;td bordercolor="#999999"&gt;atoi&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_ttoi64&lt;/td&gt;&lt;td bordercolor="#999999"&gt;atoi64&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_ttol&lt;/td&gt;&lt;td bordercolor="#999999"&gt;atol&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_ui64tot&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_ui64toa&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_ultot&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_ultoa&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999" bgcolor="#cccccc" colspan="2"&gt;程序執行&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_texecl&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_execl&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_texecle&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_execle&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_texeclp&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_execlp&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_texeclpe&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_execlpe&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_texecv&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_execv&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_texecve&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_execve&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_texecvp&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_execvp&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_texecvpe&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_execvpe&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tspawnl&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_spawnl&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tspawnle&lt;/td&gt;&lt;br /&gt;&lt;td bordercolor="#999999"&gt;_spawnle&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tspqwnlp&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_spawnlp&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tspawnlpe&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_spawnlpe&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tspawnv&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_spawnv&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tspawnve&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_spawnve&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tspawnvp&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_spawnvp&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tspawnvpe&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_spawnvpe&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tsystem&lt;/td&gt;&lt;td bordercolor="#999999"&gt;system&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999" bgcolor="#cccccc" colspan="2"&gt;日期/時間&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tasctime&lt;/td&gt;&lt;td bordercolor="#999999"&gt;asctime&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tctime&lt;/td&gt;&lt;td bordercolor="#999999"&gt;ctime&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tstrdate&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_strdata&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tstrtime&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_strtime&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tutime&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_utime&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcsftime&lt;/td&gt;&lt;td bordercolor="#999999"&gt;strftime&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999" bgcolor="#cccccc" colspan="2"&gt;目錄/路徑&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tchdir&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_chdir&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tgetcwd&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_getcwd&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tgetdcwd&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_getdcwd&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tmkdir&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_mkdir&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_trmdir&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_rmdir&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tfullpath&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_fullpath&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tgetenv&lt;/td&gt;&lt;td bordercolor="#999999"&gt;getenv&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tmakepath&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_makepath&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tputenv&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_putenv&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tsearchenv&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_searchenv&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tsplitpath&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_splitpath&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999" bgcolor="#cccccc" colspan="2"&gt;輸出/輸入&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tfdopen&lt;/td&gt;&lt;td bordercolor="#999999"&gt;fdopen&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tfopen&lt;/td&gt;&lt;td bordercolor="#999999"&gt;fopen&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tfreopen&lt;/td&gt;&lt;td bordercolor="#999999"&gt;freopen&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tperror&lt;/td&gt;&lt;td bordercolor="#999999"&gt;perror&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tpopen&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_popen&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_ttempnam&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_tempnam&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_ttmpnam&lt;/td&gt;&lt;td bordercolor="#999999"&gt;tmpnam&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tchmod&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_chmod&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcreat&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_creat&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tfindfirst&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_findfirst&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tfindnext&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_findnext&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tmktemp&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_mktemp&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_topen&lt;/td&gt;&lt;td bordercolor="#999999"&gt;open&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_taccess&lt;/td&gt;&lt;td bordercolor="#999999"&gt;access&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tremove&lt;/td&gt;&lt;td bordercolor="#999999"&gt;remove&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_trename&lt;/td&gt;&lt;td bordercolor="#999999"&gt;rename&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tsopen&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_sopen&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tunlink&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_unlink&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tfinddata_t&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_finddata_t&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tsta&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_stat&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tstati64&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_stati64&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999" bgcolor="#cccccc" colspan="2"&gt;字串處理&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcscat&lt;/td&gt;&lt;td bordercolor="#999999"&gt;strcat&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcschr&lt;/td&gt;&lt;td bordercolor="#999999"&gt;strchr&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcsclen&lt;/td&gt;&lt;td bordercolor="#999999"&gt;strlen&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcscmp&lt;/td&gt;&lt;td bordercolor="#999999"&gt;strcmp&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcscoll&lt;/td&gt;&lt;td bordercolor="#999999"&gt;strcoll&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcscpy&lt;/td&gt;&lt;td bordercolor="#999999"&gt;strcpy&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcscspn&lt;/td&gt;&lt;td bordercolor="#999999"&gt;strcspn&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcsdup&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_strdup&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcsicmp&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_stricmp&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcslen&lt;/td&gt;&lt;td bordercolor="#999999"&gt;strlen&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcsncat&lt;/td&gt;&lt;td bordercolor="#999999"&gt;strncat&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcsnccat&lt;/td&gt;&lt;td bordercolor="#999999"&gt;strnccat&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcsnccpy&lt;/td&gt;&lt;td bordercolor="#999999"&gt;strncpy&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcsncmp&lt;/td&gt;&lt;td bordercolor="#999999"&gt;strncmp&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcsncpy&lt;/td&gt;&lt;td bordercolor="#999999"&gt;strncpy&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcsncset&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_strnset&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcsnicmp&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_strnicmp&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcsnset&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_strnset&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcspbrk&lt;/td&gt;&lt;td bordercolor="#999999"&gt;strpbrk&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcsrchr&lt;/td&gt;&lt;td bordercolor="#999999"&gt;strrchr&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcsrev&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_strrev&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcsset&lt;/td&gt;&lt;td bordercolor="#999999"&gt;_strset&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcsspn&lt;/td&gt;&lt;td bordercolor="#999999"&gt;strspn&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcsstr&lt;/td&gt;&lt;td bordercolor="#999999"&gt;strstr&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcstok&lt;/td&gt;&lt;td bordercolor="#999999"&gt;strtok&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_tcsxfrm&lt;/td&gt;&lt;td bordercolor="#999999"&gt;strxfrm&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999" bgcolor="#cccccc" colspan="2"&gt;字元分類&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_istascii&lt;/td&gt;&lt;td bordercolor="#999999"&gt;isascii&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_istcntrl&lt;/td&gt;&lt;td bordercolor="#999999"&gt;iscntrl&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_istxdigit&lt;/td&gt;&lt;td bordercolor="#999999"&gt;isxdigit&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_istalnum&lt;/td&gt;&lt;td bordercolor="#999999"&gt;isalnum&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_istalpha&lt;/td&gt;&lt;td bordercolor="#999999"&gt;isalpha&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_istdigit&lt;/td&gt;&lt;td bordercolor="#999999"&gt;isdigit&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_istgraph&lt;/td&gt;&lt;td bordercolor="#999999"&gt;isgraph&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_istlower&lt;/td&gt;&lt;td bordercolor="#999999"&gt;islower&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_istprint&lt;/td&gt;&lt;td bordercolor="#999999"&gt;isprint&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_istpunct&lt;/td&gt;&lt;td bordercolor="#999999"&gt;ispunct&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_istspace&lt;/td&gt;&lt;td bordercolor="#999999"&gt;isspace&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_istupper&lt;/td&gt;&lt;td bordercolor="#999999"&gt;isupper&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999" bgcolor="#cccccc" colspan="2"&gt;字元轉換&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_totupper&lt;/td&gt;&lt;td bordercolor="#999999"&gt;toupper&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bordercolor="#999999"&gt;_totlower&lt;/td&gt;&lt;td bordercolor="#999999"&gt;tolower&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-8723703788127708060?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/8723703788127708060/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/07/sbcs.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/8723703788127708060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/8723703788127708060'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/07/sbcs.html' title='SBCS函數對照表'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-6296467124693162525</id><published>2009-07-03T12:13:00.000-07:00</published><updated>2010-10-29T08:14:57.334-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>【教學】PV3D Particle3D 粒子效果</title><content type='html'>&lt;pre class="javascript" name="code" &gt;&lt;br /&gt;package  &lt;br /&gt;{  &lt;br /&gt;  // Flash  &lt;br /&gt;  import flash.events.Event;  &lt;br /&gt;  import flash.display.Stage;  &lt;br /&gt;  import flash.events.MouseEvent;  &lt;br /&gt;  import flash.geom.Rectangle; &lt;br /&gt;  import flash.filters.BlurFilter;&lt;br /&gt;  import flash.geom.ColorTransform; &lt;br /&gt;  import flash.geom.Point; &lt;br /&gt;  // PV3D &lt;br /&gt;  import org.papervision3d.view.BasicView;&lt;br /&gt;  // Particles &lt;br /&gt;  import com.dangries.loaders.PictureLoader; &lt;br /&gt;  import com.dangries.bitmapUtilities.PictureAtomizer; &lt;br /&gt;  import com.dangries.objects.Particle3D; &lt;br /&gt;  import com.dangries.geom3D.*; &lt;br /&gt;  import com.dangries.display.RotatingParticleBoard; &lt;br /&gt;   &lt;br /&gt;  public class Particle3D_Sample extends BasicView &lt;br /&gt;  { &lt;br /&gt;    private var picURLString:Array; &lt;br /&gt;    private var picLoader:PictureLoader; &lt;br /&gt;    private var particleboard:RotatingParticleBoard; &lt;br /&gt;    private var pic:Array; &lt;br /&gt;    private var atomizer:PictureAtomizer; &lt;br /&gt;    private var particles:Array; &lt;br /&gt;    private var p3d:Particle3D; &lt;br /&gt;    private var blur:BlurFilter; &lt;br /&gt;    private var darken:ColorTransform; &lt;br /&gt;    private var particleboardRect:Rectangle; &lt;br /&gt;    private var filterPoint:Point; &lt;br /&gt;    private var Step:int; &lt;br /&gt;    private var p:int;      &lt;br /&gt;&lt;br /&gt;    public function Particle3D_Sample() &lt;br /&gt;    {     &lt;br /&gt;      picURLString = ["/httpdocs/DeyingData/Flash/PV3D/demo_particle3D/mach.png"]; &lt;br /&gt;      picLoader = new PictureLoader(); &lt;br /&gt;      blur = new BlurFilter( 3, 3); &lt;br /&gt;      darken = new ColorTransform( 1, 1, 1, 0.8 ); &lt;br /&gt;      filterPoint = new Point( 0, 0); &lt;br /&gt;      particles = new Array();          &lt;br /&gt;      viewport.opaqueBackground = 0x000000; &lt;br /&gt;      Step = 0; &lt;br /&gt;      p = 0;         &lt;br /&gt;      particleboard = new RotatingParticleBoard( stage.stageWidth, stage.stageHeight, true, 0x00000000, 160); &lt;br /&gt;      particleboard.setDepthDarken( -10, -80, 1.5);  &lt;br /&gt;      particleboard.makeFrame( 1, 0x000000, 1); &lt;br /&gt;      particleboard.holder.x = stage.stageWidth / 2  - particleboard.width / 2; &lt;br /&gt;      particleboard.holder.y = stage.stageHeight / 2 - particleboard.height / 2;  &lt;br /&gt;      particleboardRect = new Rectangle( 0, 0, particleboard.width, particleboard.height );        &lt;br /&gt;      &lt;br /&gt;      picLoader.addEventListener( PictureLoader.ALL_PICS_LOADED, onCreateParticlesHandle); &lt;br /&gt;      picLoader.loadPics( picURLString);      &lt;br /&gt;        &lt;br /&gt;      stage.addEventListener(MouseEvent.CLICK, onMouseClickHandle); &lt;br /&gt;    } &lt;br /&gt;&lt;br /&gt;    function onCreateParticlesHandle(event:Event):void &lt;br /&gt;    { &lt;br /&gt;      pic = picLoader.picArray; &lt;br /&gt;      picLoader.removeEventListener( PictureLoader.ALL_PICS_LOADED, onCreateParticlesHandle); &lt;br /&gt;      atomizer = new PictureAtomizer();&lt;br /&gt;      atomizer.sampling = 1;&lt;br /&gt;      atomizer.spread = 1.33;&lt;br /&gt;      atomizer.sampleFuzzX = 0;&lt;br /&gt;      atomizer.sampleFuzzY = 0;&lt;br /&gt;      atomizer.originX = Math.floor( pic[0].width/2 );&lt;br /&gt;      atomizer.originY = Math.floor( pic[0].height/2);&lt;br /&gt;      atomizer.addEventListener( PictureAtomizer.PARTICLES_CREATED, onRunHandle);&lt;br /&gt;      atomizer.createParticles( pic[0]);      &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private function onRunHandle(event:Event):void &lt;br /&gt;    {&lt;br /&gt;      particles = atomizer.particleArray;&lt;br /&gt;      atomizer.setPositionsByPic(0, 0, 0);&lt;br /&gt;      viewport.addChild( particleboard.holder);&lt;br /&gt;      startRendering(); &lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    private function onMouseClickHandle(event:MouseEvent):void&lt;br /&gt;    {&lt;br /&gt;      if (Step == 0)&lt;br /&gt;      { &lt;br /&gt;        Step = 1;&lt;br /&gt;      }&lt;br /&gt;      if (Step == 2)&lt;br /&gt;      {&lt;br /&gt;        Step = 3;&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    override protected function onRenderTick(event:Event = null):void&lt;br /&gt;    {&lt;br /&gt;      if ( Step == 1 )&lt;br /&gt;      {&lt;br /&gt;        for (var j:Number = 0; j &lt;= particles.length - 1; j++)&lt;br /&gt;        {&lt;br /&gt;          particles[j].z = p*(128 - particles[j].lum);&lt;br /&gt;        }&lt;br /&gt;        p = p + 1;&lt;br /&gt;        if ( p &gt; 50)&lt;br /&gt;        {&lt;br /&gt;          p = 50;&lt;br /&gt;          Step = 2;&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      if ( Step == 3 )&lt;br /&gt;      {&lt;br /&gt;        for (var k:Number = 0; k &lt;= particles.length - 1; k++)&lt;br /&gt;        {&lt;br /&gt;          particles[k].z = p*(128 - particles[k].lum);&lt;br /&gt;        }&lt;br /&gt;        p = p - 1;&lt;br /&gt;        if ( p &lt; 0)&lt;br /&gt;        {&lt;br /&gt;          p = 0;     &lt;br /&gt;          Step = 0;&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      particleboard.bitmapData.applyFilter( particleboard.bitmapData, particleboardRect, filterPoint, blur);&lt;br /&gt;      particleboard.bitmapData.colorTransform( particleboardRect, darken);     &lt;br /&gt;      particleboard.drawParticles( particles);        &lt;br /&gt;      super.onRenderTick(event);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;執行結果：&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/Sk5ZBZXrEhI/AAAAAAAAALw/gYe0XayRzoo/s1600-h/demo2.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5354314887515017746" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 300px" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/Sk5ZBZXrEhI/AAAAAAAAALw/gYe0XayRzoo/s400/demo2.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://7-12.idv.tw/DeyingData/Flash/PV3D/demo_particle3D/Particle3D_Sample.html" target="_blank"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-6296467124693162525?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/6296467124693162525/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/07/pv3d-particle3d.html#comment-form' title='3 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/6296467124693162525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/6296467124693162525'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/07/pv3d-particle3d.html' title='【教學】PV3D Particle3D 粒子效果'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_a8EDl0Lwf_Q/Sk5ZBZXrEhI/AAAAAAAAALw/gYe0XayRzoo/s72-c/demo2.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-2250295329599267988</id><published>2009-07-02T08:15:00.000-07:00</published><updated>2010-10-29T08:18:49.938-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>【教學】PV3D 頂點基本建置 Pixel3D</title><content type='html'>這個範例主要是測試頂點在3D場景中的變化，&lt;br /&gt;PV3D主要提供了Pixels與Pixel3D這兩個類，&lt;br /&gt;頂點加入光暈特效GlowFilter，&lt;br /&gt;再配合TweenMax來改變頂點位置，&lt;br /&gt;點擊滑鼠產生放大縮小效果：&lt;br /&gt;&lt;pre class="javascript" name="code" &gt;&lt;br /&gt;package  &lt;br /&gt;{  &lt;br /&gt;  // flash  &lt;br /&gt;  import flash.events.Event; &lt;br /&gt;  import flash.filters.GlowFilter;  &lt;br /&gt;  import flash.events.MouseEvent;  &lt;br /&gt;  // pv3d &lt;br /&gt;  import org.papervision3d.view.BasicView;  &lt;br /&gt;  import org.papervision3d.core.geom.Pixels; &lt;br /&gt;  import org.papervision3d.core.geom.renderables.Pixel3D; &lt;br /&gt;  import org.papervision3d.core.effects.BitmapLayerEffect; &lt;br /&gt;  import org.papervision3d.view.layer.BitmapEffectLayer; &lt;br /&gt;  import org.papervision3d.objects.DisplayObject3D; &lt;br /&gt;  // gs&lt;br /&gt;  import gs.TweenMax; &lt;br /&gt;  import gs.easing.*; &lt;br /&gt;  &lt;br /&gt;  public class PV3DPoint_Sample extends BasicView &lt;br /&gt;  { &lt;br /&gt;    private var pixelArray:Array; &lt;br /&gt;    private var pixels:Pixels; &lt;br /&gt;    private var pixel3d:Pixel3D; &lt;br /&gt;    private var pixelbefly:BitmapEffectLayer; &lt;br /&gt;    private var PosXArray:Array; &lt;br /&gt;    private var PosYArray:Array; &lt;br /&gt;    private var PosZArray:Array; &lt;br /&gt;    private var step:int; &lt;br /&gt;    private var pgroup:DisplayObject3D; &lt;br /&gt;&lt;br /&gt;    public function PV3DPoint_Sample() &lt;br /&gt;    { &lt;br /&gt;      // 階段控制變數 &lt;br /&gt;      step = 0; &lt;br /&gt;      // 3D點陣列 &lt;br /&gt;      pixelArray = new Array(); &lt;br /&gt;      // 位置陣列 &lt;br /&gt;      PosXArray = new Array(); &lt;br /&gt;      PosYArray = new Array(); &lt;br /&gt;      PosZArray = new Array(); &lt;br /&gt;&lt;br /&gt;      // 新增pixelbefly(像素層)讓 pixel繪製 &lt;br /&gt;      pixelbefly = new BitmapEffectLayer(viewport,640,480,true,0,"clear_pre",false,false);&lt;br /&gt;      // 清除畫面再繪製 &lt;br /&gt;      pixelbefly.clearBeforeRender = true; &lt;br /&gt;      // 讓Pixels可以被繪製出來 &lt;br /&gt;      viewport.containerSprite.addLayer(pixelbefly); &lt;br /&gt;      // 增加光暈特效 &lt;br /&gt;      pixelbefly.addEffect(new BitmapLayerEffect(new GlowFilter(0xFFFFFF, 1,  3,  3, 5, 3))); &lt;br /&gt;      pixelbefly.addEffect(new BitmapLayerEffect(new GlowFilter(0x00AAFF, 1, 20, 20, 8, 3))); &lt;br /&gt;      // 設定背景色 &lt;br /&gt;      viewport.opaqueBackground = 0x000000; &lt;br /&gt;      // 增設群組 &lt;br /&gt;      pgroup = new DisplayObject3D(); &lt;br /&gt;      var index:int = 0; &lt;br /&gt;      for (var k:int = 0; k &lt; 10; k++) &lt;br /&gt;      { &lt;br /&gt;        for (var i:int = 0; i &lt; 10; i++) &lt;br /&gt;        { &lt;br /&gt;          for (var j:int = 0; j &lt; 10; j++) &lt;br /&gt;          {&lt;br /&gt;            pixels = new Pixels(pixelbefly);&lt;br /&gt;            pixel3d = new Pixel3D(0xCCFFFFFF,0,0,0);&lt;br /&gt;            pixels.addPixel3D(pixel3d);&lt;br /&gt;            pixels.x = 0;&lt;br /&gt;            pixels.y = 0; &lt;br /&gt;            pixels.z = 0;&lt;br /&gt;            pixelArray[index] = pixels;  &lt;br /&gt;            PosXArray.push(-250 + (50*i)); &lt;br /&gt;            PosYArray.push(-250 + (50*j)); &lt;br /&gt;            PosZArray.push(-250 + (50*k));&lt;br /&gt;            pgroup.addChild(pixelArray[index], index.toString());&lt;br /&gt;            index += 1; &lt;br /&gt;          } &lt;br /&gt;        } &lt;br /&gt;      } &lt;br /&gt;      scene.addChild(pgroup); &lt;br /&gt;      // 增加滑鼠事件&lt;br /&gt;      stage.addEventListener(MouseEvent.CLICK, onPressHandle); &lt;br /&gt;      // 開始渲染 &lt;br /&gt;      startRendering(); &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private function onPressHandle(event:MouseEvent):void &lt;br /&gt;    { &lt;br /&gt;      if ( step == 0) &lt;br /&gt;      { &lt;br /&gt;        step = 1; &lt;br /&gt;      }&lt;br /&gt;      if ( step == 2) &lt;br /&gt;      { &lt;br /&gt;        step = 3; &lt;br /&gt;      } &lt;br /&gt;    } &lt;br /&gt;&lt;br /&gt;    override protected function onRenderTick(event:Event = null):void &lt;br /&gt;    {&lt;br /&gt;      // 改變群組角度&lt;br /&gt;      pgroup.rotationX = viewport.containerSprite.mouseY / 4;&lt;br /&gt;      pgroup.rotationY = viewport.containerSprite.mouseX / 6;&lt;br /&gt;      // 放大&lt;br /&gt;      if (step == 1)&lt;br /&gt;      {&lt;br /&gt;        for (var index1:int = 0; index1 &lt; 1000; index1++)&lt;br /&gt;        {&lt;br /&gt;          TweenMax.to(pixelArray[index1],1.2,{ x:PosXArray[index1],y:PosYArray[index1],z:PosZArray[index1],ease:Expo.easeInOut});&lt;br /&gt;        }&lt;br /&gt;        step = 2;&lt;br /&gt;      }&lt;br /&gt;      // 縮小&lt;br /&gt;      if (step == 3)&lt;br /&gt;      {&lt;br /&gt;        for (var index2:int = 0; index2 &lt; 1000; index2++)&lt;br /&gt;        {&lt;br /&gt;          TweenMax.to(pixelArray[index2],1,{ x:0,y:0,z:0,ease:Quad.easeIn} );&lt;br /&gt;        }&lt;br /&gt;        step = 0;&lt;br /&gt;      }&lt;br /&gt;      super.onRenderTick(event);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;執行結果：&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SkzP105MhiI/AAAAAAAAALo/30k_pLpVo5g/s1600-h/demo.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5353882580675233314" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 375px" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SkzP105MhiI/AAAAAAAAALo/30k_pLpVo5g/s400/demo.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://7-12.idv.tw/swf/pv3d_demo_3DPoint_Sample.swf" target="_blank"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-2250295329599267988?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/2250295329599267988/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/07/pv3d-pixel3d.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/2250295329599267988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/2250295329599267988'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/07/pv3d-pixel3d.html' title='【教學】PV3D 頂點基本建置 Pixel3D'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SkzP105MhiI/AAAAAAAAALo/30k_pLpVo5g/s72-c/demo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-636728674178416014</id><published>2009-06-30T02:29:00.000-07:00</published><updated>2010-10-29T08:34:57.884-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>【教學】動態改變MovieClip元件的註冊點</title><content type='html'>當我們使用程式產生MovieClip時，&lt;br /&gt;預設的註冊點是在物件的左上角座標(0,0)，&lt;br /&gt;如果想要動態改變註冊點(任一點)，&lt;br /&gt;可以再製作一個新的MovieClip來將原本的加入，&lt;br /&gt;之後再設定其相對位置即可，&lt;br /&gt;以下便是測試範例：&lt;br /&gt;&lt;pre class="javascript" name="code" &gt;&lt;br /&gt;package  &lt;br /&gt;{  &lt;br /&gt;  import flash.display.MovieClip;  &lt;br /&gt;  import flash.display.Shape;  &lt;br /&gt;  import flash.events.Event;  &lt;br /&gt;  import flash.events.MouseEvent;  &lt;br /&gt;&lt;br /&gt;  public class Registration_Sample extends MovieClip  &lt;br /&gt;  { &lt;br /&gt;    private var _Old_MC:MovieClip; &lt;br /&gt;    private var _New_MC:MovieClip; &lt;br /&gt;    private var act:Boolean; &lt;br /&gt;    private var line:Shape; &lt;br /&gt;&lt;br /&gt;    public function Registration_Sample() &lt;br /&gt;    { &lt;br /&gt;      act = false; &lt;br /&gt;      _Old_MC = new MovieClip();&lt;br /&gt;      _Old_MC.graphics.clear(); &lt;br /&gt;      _Old_MC.graphics.beginFill(0x555555,0.5); &lt;br /&gt;      _Old_MC.graphics.drawRect(0,0,100,100); &lt;br /&gt;      _Old_MC.graphics.endFill(); &lt;br /&gt;      _Old_MC.x = 0; &lt;br /&gt;      _Old_MC.y = 0; &lt;br /&gt;     &lt;br /&gt;      _New_MC = new MovieClip(); &lt;br /&gt;      _New_MC.x = stage.stageWidth/2; &lt;br /&gt;      _New_MC.y = stage.stageHeight/2; &lt;br /&gt;      _New_MC.addChild(_Old_MC); &lt;br /&gt;      addChild(_New_MC); &lt;br /&gt;      &lt;br /&gt;      line = new Shape(); &lt;br /&gt;      line.graphics.clear(); &lt;br /&gt;      line.graphics.lineStyle(1,0xFF0000,1); &lt;br /&gt;      line.graphics.moveTo(0,stage.stageHeight/2); &lt;br /&gt;      line.graphics.lineTo(stage.stageWidth,stage.stageHeight/2); &lt;br /&gt;      line.graphics.lineStyle(1,0x00FF00,1); &lt;br /&gt;      line.graphics.moveTo(stage.stageWidth/2,0); &lt;br /&gt;      line.graphics.lineTo(stage.stageWidth/2,stage.stageHeight); &lt;br /&gt;      addChild(line); &lt;br /&gt;      &lt;br /&gt;      stage.addEventListener(Event.ENTER_FRAME, onEnterFrameHandle); &lt;br /&gt;      stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUphandle); &lt;br /&gt;    } &lt;br /&gt;&lt;br /&gt;    private function onMouseUphandle(event:MouseEvent):void &lt;br /&gt;    { &lt;br /&gt;      if (!act) &lt;br /&gt;      { &lt;br /&gt;        _Old_MC.x = -(_Old_MC.width/2); &lt;br /&gt;        _Old_MC.y = -(_Old_MC.height/2); &lt;br /&gt;        act = true; &lt;br /&gt;      } &lt;br /&gt;      else &lt;br /&gt;      { &lt;br /&gt;        _Old_MC.x = 0; &lt;br /&gt;        _Old_MC.y = 0; &lt;br /&gt;        act = false; &lt;br /&gt;      } &lt;br /&gt;    } &lt;br /&gt;&lt;br /&gt;    private function onEnterFrameHandle(event:Event):void &lt;br /&gt;    { &lt;br /&gt;      _New_MC.rotation += 5; &lt;br /&gt;    } &lt;br /&gt;  } &lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;執行結果：&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SkpI1Al2QDI/AAAAAAAAALg/L7AfHqZT69s/s1600-h/demo.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5353171182612267058" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 295px" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SkpI1Al2QDI/AAAAAAAAALg/L7AfHqZT69s/s400/demo.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://7-12.idv.tw/DeyingData/Flash/AS3/Regist/Registration_Sample.html" target="_blank"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-636728674178416014?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/636728674178416014/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/06/movieclip.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/636728674178416014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/636728674178416014'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/06/movieclip.html' title='【教學】動態改變MovieClip元件的註冊點'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SkpI1Al2QDI/AAAAAAAAALg/L7AfHqZT69s/s72-c/demo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-5544691946681505038</id><published>2009-06-28T07:30:00.000-07:00</published><updated>2010-10-29T09:07:44.870-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>【教學】元件庫的MovieClip利用迴圈建立實體Object</title><content type='html'>當元件庫有mc0 ~ mcN的MovieClip時，&lt;br /&gt;想要利用迴圈來建立實體的流程：&lt;br /&gt;&lt;br /&gt;1.個別打開元件庫的MovieClip連結屬性，建立連結。&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SkeRMlKeaSI/AAAAAAAAAK4/GOhLZetTV_s/s1600-h/demo1.jpg"&gt;&lt;img style="WIDTH: 276px; HEIGHT: 392px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5352406327473629474" border="0" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SkeRMlKeaSI/AAAAAAAAAK4/GOhLZetTV_s/s400/demo1.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SkeRe744N5I/AAAAAAAAALA/ctx5vBo73lc/s1600-h/demo2.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 215px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5352406642811484050" border="0" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SkeRe744N5I/AAAAAAAAALA/ctx5vBo73lc/s400/demo2.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2.使用getDefinitionByName這個類，可以取得元件庫的Class。&lt;br /&gt;3.宣告ㄧ個陣列(準備存放建立的物件)。&lt;br /&gt;4.之後於迴圈內new class()並將值放入陣列。&lt;br /&gt;&lt;pre class="javascript" name="code" &gt;&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;  import flash.display.MovieClip;&lt;br /&gt;  import flash.utils.getDefinitionByName;&lt;br /&gt;&lt;br /&gt;  public class Multiple_Sample extends MovieClip&lt;br /&gt;  {&lt;br /&gt;    private var objArray:Array;&lt;br /&gt;    private var mcNum:int;&lt;br /&gt;    public function Multiple_Sample():void&lt;br /&gt;    {&lt;br /&gt;      mcCount=10;&lt;br /&gt;      objArray=new Array(mcCount);&lt;br /&gt;      for(var i:int=0; i&lt; mcCount; i++ )&lt;br /&gt;      {&lt;br /&gt;        var mclass:Class = getDefinitionByName("mc"+i.toString()) as Class;&lt;br /&gt;        objArray[i]=new mclass();&lt;br /&gt;        objArray[i].x=10+(i*(objArray[i].width+10));&lt;br /&gt;        objArray[i].y=100;&lt;br /&gt;        addChild(objArray[i]);&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;執行結果：&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SkeRlzPaJ-I/AAAAAAAAALI/HwXHxvpaLdQ/s1600-h/demo3.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 325px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5352406760749148130" border="0" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SkeRlzPaJ-I/AAAAAAAAALI/HwXHxvpaLdQ/s400/demo3.jpg" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-5544691946681505038?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/5544691946681505038/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/06/movieclipobject.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/5544691946681505038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/5544691946681505038'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/06/movieclipobject.html' title='【教學】元件庫的MovieClip利用迴圈建立實體Object'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SkeRMlKeaSI/AAAAAAAAAK4/GOhLZetTV_s/s72-c/demo1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-8486947294552959456</id><published>2009-06-26T20:09:00.000-07:00</published><updated>2010-10-29T09:27:46.266-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Director'/><title type='text'>【教學】Director 中使用Lingo 3D創建基本材質</title><content type='html'>這是ㄧ個基本材質球的範例&lt;br /&gt;&lt;br /&gt;Cast視窗：&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SkWRY5NwvEI/AAAAAAAAAI4/xyG49sRPdQI/s1600-h/pic1.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5351843589061131330" style="WIDTH: 328px; CURSOR: hand; HEIGHT: 294px" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SkWRY5NwvEI/AAAAAAAAAI4/xyG49sRPdQI/s400/pic1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Linog程式代碼：&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;---------- Movie Script:"Main"&lt;br /&gt;&lt;br /&gt;global resSphere  -- 球體模型資源   &lt;br /&gt;global modSphere  -- 球體模型&lt;br /&gt;global txtSphere  -- 球體基本貼圖&lt;br /&gt;global matSphere  -- 球體基本材質&lt;br /&gt;&lt;br /&gt;on startmovie&lt;br /&gt;&lt;br /&gt;  member("Scene3D").resetworld() &lt;br /&gt;  --建立球體模型資源&lt;br /&gt;  resSphere = member("Scene3D").newModelResource("SphereRes",#Sphere,#front)&lt;br /&gt;  --球體半徑&lt;br /&gt;  resSphere.radius = 50&lt;br /&gt;  --球體的起始角度&lt;br /&gt;  resSphere.startAngle = 0&lt;br /&gt;  --球體的結束角度&lt;br /&gt;  resSphere.endAngle = 360&lt;br /&gt;  --球體的解析度數(越高越平滑)&lt;br /&gt;  resSphere.resolution = 24&lt;br /&gt;  &lt;br /&gt;  --建立球體模型&lt;br /&gt;  modSphere = member("Scene3D").newModel("SphereRes")&lt;br /&gt;  modSphere.resource = resSphere&lt;br /&gt;  --球體位置&lt;br /&gt;  modSphere.transform.position = vector(0,0,0)&lt;br /&gt;  --球體旋轉&lt;br /&gt;  modSphere.transform.rotation = vector(0,0,0)&lt;br /&gt;   &lt;br /&gt;  --設定基本材質球顏色&lt;br /&gt;  --建立新的貼圖&lt;br /&gt;  txtSphere = member("Scene3D").newtexture("SphereTxt")&lt;br /&gt;  --建立標準材質&lt;br /&gt;  matSphere = member("Scene3D").newshader("SphereMat",#standard)&lt;br /&gt;  --設定材質球陰影色&lt;br /&gt;  matSphere.ambient = rgb(50,50,50)                   &lt;br /&gt;  --設定材質球基本色&lt;br /&gt;  matSphere.diffuse = rgb(255,0,0)&lt;br /&gt;  --設定材質球反光色&lt;br /&gt;  matSphere.specular = rgb(255,255,255)&lt;br /&gt;  --設定材質球發亮度&lt;br /&gt;  matSphere.emissive = rgb(0,50,0)&lt;br /&gt;  --設定反光範圍大小&lt;br /&gt;  matSphere.shininess = 50&lt;br /&gt;  --材質混合度&lt;br /&gt;  matSphere.blend = 100&lt;br /&gt;  --材質透明度&lt;br /&gt;  matSphere.transparent = 100&lt;br /&gt;  --描繪形式(#fill,##wire,#point)&lt;br /&gt;  matSphere.renderstyle = #fill&lt;br /&gt;  --設定貼圖&lt;br /&gt;  matSphere.texture = txtSphere&lt;br /&gt;  --將材質指定給模型&lt;br /&gt;  modSphere.shader = matSphere                 &lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;----------Frame Script:"Loop"&lt;br /&gt;on exitFrame me&lt;br /&gt;&lt;br /&gt;  go to the frame&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Score視窗：&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SkWRPANGbbI/AAAAAAAAAIo/nGZ9jbywE-U/s1600-h/pic3.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5351843419138715058" style="WIDTH: 352px; CURSOR: hand; HEIGHT: 326px" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SkWRPANGbbI/AAAAAAAAAIo/nGZ9jbywE-U/s400/pic3.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;執行結果：&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SkWRU5-Id_I/AAAAAAAAAIw/SrbMiTmnNvE/s1600-h/pic2.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5351843520544536562" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 238px" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SkWRU5-Id_I/AAAAAAAAAIw/SrbMiTmnNvE/s400/pic2.jpg" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-8486947294552959456?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/8486947294552959456/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/06/director-lingo-3d_5355.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/8486947294552959456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/8486947294552959456'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/06/director-lingo-3d_5355.html' title='【教學】Director 中使用Lingo 3D創建基本材質'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SkWRY5NwvEI/AAAAAAAAAI4/xyG49sRPdQI/s72-c/pic1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-7675237552503686291</id><published>2009-06-26T11:01:00.000-07:00</published><updated>2010-10-29T09:36:11.985-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Director'/><title type='text'>【教學】Director 中使用Lingo 3D創建基本貼圖</title><content type='html'>這是ㄧ個簡單的球體加上基本材質貼圖的範例&lt;br /&gt;&lt;br /&gt;Cast 視窗：&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SkV6gpEBB1I/AAAAAAAAAHw/zRluT1UVMRk/s1600-h/pic1.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5351818433396803410" style="WIDTH: 329px; CURSOR: hand; HEIGHT: 296px" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SkV6gpEBB1I/AAAAAAAAAHw/zRluT1UVMRk/s400/pic1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lingo程式代碼：&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;----------Movie Script:"Main"&lt;br /&gt;global resSphere    -- 球體模型資源&lt;br /&gt;global modSphere  -- 球體模型&lt;br /&gt;global txtSphere      -- 球體基本貼圖&lt;br /&gt;global matSphere   -- 球體基本材質&lt;br /&gt;&lt;br /&gt;on startmovie&lt;br /&gt;  --初始化3D環境&lt;br /&gt;  member("Scene3D").resetworld()&lt;br /&gt;  --建立球體模型資源&lt;br /&gt;  resSphere = member("Scene3D").newModelResource("SphereRes",#Sphere,#front)&lt;br /&gt;  --球體半徑&lt;br /&gt;  resSphere.radius = 50&lt;br /&gt;  --球體的起始角度&lt;br /&gt;  resSphere.startAngle = 0&lt;br /&gt;  --球體的結束角度&lt;br /&gt;  resSphere.endAngle = 360&lt;br /&gt;  --球體的解析度數(越高越平滑)&lt;br /&gt;  resSphere.resolution = 24  &lt;br /&gt;  --建立球體模型&lt;br /&gt;  modSphere = member("Scene3D").newModel("SphereRes")&lt;br /&gt;  modSphere.resource = resSphere&lt;br /&gt;  --球體位置&lt;br /&gt;  modSphere.transform.position = vector( 0, 0, 0 )&lt;br /&gt;  --球體旋轉&lt;br /&gt;  modSphere.transform.rotation = vector( 0, 0, 0 )&lt;br /&gt;  --設定基本材質球顏色&lt;br /&gt;  --貼圖&lt;br /&gt;  txtSphere = member("Scene3D").newTexture("SphereTxt",#fromCastmember,member("Ball"))&lt;br /&gt;  --建立標準材質#standard,#painter,#engraver,#newsprint&lt;br /&gt;  matSphere = member("Scene3D").newshader("SphereMat",#standard)&lt;br /&gt;  --設定材質球陰影色&lt;br /&gt;  matSphere.ambient = rgb(50,50,50)&lt;br /&gt;  --設定材質球基本色&lt;br /&gt;  matSphere.diffuse = rgb(100,100,100)&lt;br /&gt;  --設定材質球反光色&lt;br /&gt;  matSphere.specular = rgb(255,255,255)&lt;br /&gt;  --設定材質球發亮度&lt;br /&gt;  matSphere.emissive = rgb(50,50,50)&lt;br /&gt;  --設定反光範圍大小&lt;br /&gt;  matSphere.shininess = 70&lt;br /&gt;  --材質混合度&lt;br /&gt;  matSphere.blend = 70&lt;br /&gt;  --材質透明度&lt;br /&gt;  matSphere.transparent = 100&lt;br /&gt;  --描繪形式(#fill,#wire,#point )&lt;br /&gt;  matSphere.renderstyle = #fill&lt;br /&gt;  --貼圖旋轉方向&lt;br /&gt;  matSphere.texturetransform.rotate(0,0,0)&lt;br /&gt;  --貼圖重複0.2重複5次&lt;br /&gt;  matSphere.texturetransform.scale(1,1,1)&lt;br /&gt;  --設定貼圖&lt;br /&gt;  matSphere.texture = txtSphere&lt;br /&gt;  --將材質指定給模型     &lt;br /&gt;  modSphere.shader = matSphere               &lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;----------Frame Script:"Loop"&lt;br /&gt;on exitFrame me&lt;br /&gt;  go to the frame&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Scroe 視窗：&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SkV7G3KMuQI/AAAAAAAAAIA/_pF_2b108VA/s1600-h/pic3.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5351819090015860994" style="WIDTH: 352px; CURSOR: hand; HEIGHT: 326px" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SkV7G3KMuQI/AAAAAAAAAIA/_pF_2b108VA/s400/pic3.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;執行結果：&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SkV696NIRUI/AAAAAAAAAH4/r9Dk_xcWmV0/s1600-h/pic2.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5351818936214635842" style="WIDTH: 319px; CURSOR: hand; HEIGHT: 238px" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SkV696NIRUI/AAAAAAAAAH4/r9Dk_xcWmV0/s400/pic2.jpg" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-7675237552503686291?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/7675237552503686291/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/06/director-lingo-3d_26.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/7675237552503686291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/7675237552503686291'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/06/director-lingo-3d_26.html' title='【教學】Director 中使用Lingo 3D創建基本貼圖'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SkV6gpEBB1I/AAAAAAAAAHw/zRluT1UVMRk/s72-c/pic1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-3215045770272998846</id><published>2009-06-24T22:49:00.000-07:00</published><updated>2010-10-29T09:42:17.902-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Director'/><title type='text'>【教學】Director 中使用Lingo 3D創建網格面模型</title><content type='html'>這是ㄧ個運用基本三角面製作的範例&lt;br /&gt;&lt;br /&gt;Cast 視窗：&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SkV-jz2Rg1I/AAAAAAAAAII/O6-ydgai4JI/s1600-h/pic1.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5351822885878072146" style="WIDTH: 328px; CURSOR: hand; HEIGHT: 296px" alt="" src="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SkV-jz2Rg1I/AAAAAAAAAII/O6-ydgai4JI/s400/pic1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lingo程式代碼：&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;----------Movie Script:"Main"&lt;br /&gt;--三角面網格&lt;br /&gt;global mshTriangle &lt;br /&gt;--三角面模型&lt;br /&gt;global modTriangle  &lt;br /&gt;&lt;br /&gt;on startmovie&lt;br /&gt;&lt;br /&gt;  --3D環境初始&lt;br /&gt;  member("Scene3D").resetworld()&lt;br /&gt;&lt;br /&gt;  --建立網格&lt;br /&gt;  --參數1:網格名稱&lt;br /&gt;  --參數2:面數&lt;br /&gt;  --參數3:頂點數&lt;br /&gt;  --參數4:法向量&lt;br /&gt;  --參數5:顏色數&lt;br /&gt;  --參數6:貼圖座標&lt;br /&gt;  mshTriangle = member("Scene3D").newMesh("TriangleRes",1,3,1,3,0)&lt;br /&gt;&lt;br /&gt;  --頂點列表&lt;br /&gt;  mshTriangle.vertexList=[vector(0,50,0),vector(-50,-50,0),vector(50,-50,0)]&lt;br /&gt;&lt;br /&gt;  --顏色列表&lt;br /&gt;  mshTriangle.colorList = [rgb(255,0,0),rgb(0,255,0),rgb(0,0,255)]     &lt;br /&gt;&lt;br /&gt;  --面的頂點索引        &lt;br /&gt;  mshTriangle.face[1].vertices = [1,2,3]  &lt;br /&gt;&lt;br /&gt;  --面的顏色索引                                            &lt;br /&gt;  mshTriangle.face[1].colors = [1,2,3]      &lt;br /&gt;&lt;br /&gt;  --網格建立方式                                                &lt;br /&gt;  mshTriangle.generateNormals(#flat) &lt;br /&gt;&lt;br /&gt;  --建立網格                                             &lt;br /&gt;  mshTriangle.build()          &lt;br /&gt;                                                                      &lt;br /&gt;  --建立模型&lt;br /&gt;  modTriangle = member("Scene3D").newModel("TriangleRes")   &lt;br /&gt;&lt;br /&gt;  --設定大小          &lt;br /&gt;  modTriangle.scale(1,1,1)      &lt;br /&gt;&lt;br /&gt;  --設定模型資源                                                                &lt;br /&gt;  modTriangle.resource = mshTriangle  &lt;br /&gt;&lt;br /&gt;   --網格兩面顯示                                                 &lt;br /&gt;  modTriangle.visibility = #both  &lt;br /&gt;                                                               &lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;----------Frame Script:"Loop"&lt;br /&gt;--三角面模型&lt;br /&gt;global modTriangle  &lt;br /&gt;&lt;br /&gt;on exitFrame me&lt;br /&gt;&lt;br /&gt;  --循環播放&lt;br /&gt;  go to the frame   &lt;br /&gt;  --模型旋轉     &lt;br /&gt;  modTriangle.rotate(0,10,0)  &lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Score 視窗：&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SkV-tRSmUtI/AAAAAAAAAIY/kx7hvnGO7Ik/s1600-h/pic3.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5351823048400327378" style="WIDTH: 352px; CURSOR: hand; HEIGHT: 326px" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SkV-tRSmUtI/AAAAAAAAAIY/kx7hvnGO7Ik/s400/pic3.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;執行結果：&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SkV-otkSknI/AAAAAAAAAIQ/b0TJMM5nqHg/s1600-h/pic2.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5351822970091377266" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 239px" alt="" src="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SkV-otkSknI/AAAAAAAAAIQ/b0TJMM5nqHg/s400/pic2.jpg" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-3215045770272998846?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/3215045770272998846/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/06/director-lingo-3d.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/3215045770272998846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/3215045770272998846'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/06/director-lingo-3d.html' title='【教學】Director 中使用Lingo 3D創建網格面模型'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SkV-jz2Rg1I/AAAAAAAAAII/O6-ydgai4JI/s72-c/pic1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-663940553896641846</id><published>2009-06-24T08:49:00.001-07:00</published><updated>2010-10-29T10:07:20.621-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>【教學】入門篇 PV3D 創建基本模型 Cube</title><content type='html'>AS3程式代碼:&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;package &lt;br /&gt;{&lt;br /&gt;  // flash&lt;br /&gt;  import flash.events.Event;&lt;br /&gt; &lt;br /&gt;  // pv3d&lt;br /&gt;  import org.papervision3d.view.BasicView;&lt;br /&gt;  import org.papervision3d.materials.WireframeMaterial;&lt;br /&gt;  import org.papervision3d.materials.utils.MaterialsList;&lt;br /&gt;  import org.papervision3d.objects.primitives.Cube;&lt;br /&gt; &lt;br /&gt;  /**&lt;br /&gt;   * ...&lt;br /&gt;   * @author Max&lt;br /&gt;   */&lt;br /&gt;  // PV3DCube_Sample類繼承BasicView(基本3D框架)&lt;br /&gt;  public class PV3DCube_Sample extends BasicView&lt;br /&gt;  {&lt;br /&gt;    // 方體模型材質&lt;br /&gt;    private var CubeMat : WireframeMaterial; &lt;br /&gt;    // 方體模型材質列表&lt;br /&gt;    private var CubeMatList : MaterialsList;&lt;br /&gt;    // 方體模型&lt;br /&gt;    private var CubeMod : Cube;&lt;br /&gt;  &lt;br /&gt;    // 建構子&lt;br /&gt;    public function PV3DCube_Sample()&lt;br /&gt;    {&lt;br /&gt;      // 建置3D環境&lt;br /&gt;      init3D();&lt;br /&gt;    }&lt;br /&gt;        &lt;br /&gt;    // 建置3D環境&lt;br /&gt;    private function init3D():void&lt;br /&gt;    {&lt;br /&gt;      // 建立材質(線性材質)&lt;br /&gt;      // 參數1:顏色值&lt;br /&gt;      // 參數2:Alpha值&lt;br /&gt;      // 參數3:厚度&lt;br /&gt;      CubeMat = new WireframeMaterial( 0xFF0000, 100, 0);&lt;br /&gt;   &lt;br /&gt;      // 建立材質列表&lt;br /&gt;      CubeMatList = new MaterialsList(); &lt;br /&gt;   &lt;br /&gt;      // 將方體六面材質加入材質列表&lt;br /&gt;      CubeMatList.addMaterial( CubeMat, "front"  ); &lt;br /&gt;      CubeMatList.addMaterial( CubeMat, "back"   ); &lt;br /&gt;      CubeMatList.addMaterial( CubeMat, "left"   ); &lt;br /&gt;      CubeMatList.addMaterial( CubeMat, "right"  ); &lt;br /&gt;      CubeMatList.addMaterial( CubeMat, "top"    ); &lt;br /&gt;      CubeMatList.addMaterial( CubeMat, "bottom" ); &lt;br /&gt;   &lt;br /&gt;      // 建立模型(方體)&lt;br /&gt;      // 參數1:材質列表&lt;br /&gt;      // 參數2:方體寬度&lt;br /&gt;      // 參數3:方體深度&lt;br /&gt;      // 參數4:方體高度&lt;br /&gt;      // 參數5:寬度分隔節數&lt;br /&gt;      // 參數6:深度分隔節數&lt;br /&gt;      // 參數7:高度分隔節數 &lt;br /&gt;      CubeMod = new Cube( CubeMatList, 200, 200, 200, 3, 3, 3);&lt;br /&gt;   &lt;br /&gt;      // 將模型加入3D場景中&lt;br /&gt;      scene.addChild(CubeMod);&lt;br /&gt;   &lt;br /&gt;      // 開始渲染&lt;br /&gt;      startRendering();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // Loop(循環渲染)&lt;br /&gt;    override protected function onRenderTick(event:Event = null):void &lt;br /&gt;    {&lt;br /&gt;      // 方體繞X軸旋轉&lt;br /&gt;      CubeMod.pitch(1);&lt;br /&gt;      // 方體繞Y軸旋轉&lt;br /&gt;      CubeMod.yaw(2);&lt;br /&gt;      // 方體繞Z軸旋轉&lt;br /&gt;      CubeMod.roll(3);&lt;br /&gt;   &lt;br /&gt;      super.onRenderTick(event);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;執行結果:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SkJLr324w7I/AAAAAAAAAHo/ix-7bHWAEVw/s1600-h/demo.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5350922524370191282" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 350px" alt="" src="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SkJLr324w7I/AAAAAAAAAHo/ix-7bHWAEVw/s400/demo.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://7-12.idv.tw/swf/pv3d_demo_Cube_Sample.swf" Target="_blank"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-663940553896641846?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/663940553896641846/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/06/pv3d-cube.html#comment-form' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/663940553896641846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/663940553896641846'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/06/pv3d-cube.html' title='【教學】入門篇 PV3D 創建基本模型 Cube'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SkJLr324w7I/AAAAAAAAAHo/ix-7bHWAEVw/s72-c/demo.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-4951823963636701116</id><published>2009-06-24T08:24:00.000-07:00</published><updated>2010-10-29T10:42:24.760-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>【教學】入門篇 PV3D 創建基本模型  PaperPlane</title><content type='html'>AS3程式代碼:&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;package  &lt;br /&gt;{  &lt;br /&gt;  // flash  &lt;br /&gt;  import flash.events.Event;  &lt;br /&gt;   &lt;br /&gt;  // pv3d  &lt;br /&gt;  import org.papervision3d.view.BasicView;  &lt;br /&gt;  import org.papervision3d.materials.WireframeMaterial;  &lt;br /&gt;  import org.papervision3d.objects.primitives.PaperPlane; &lt;br /&gt;   &lt;br /&gt;  /** &lt;br /&gt;  * ... &lt;br /&gt;  * @author Max &lt;br /&gt;  */ &lt;br /&gt;  // PV3DPaperPlane_Sample類繼承BasicView(基本3D框架) &lt;br /&gt;  public class PV3DPaperPlane_Sample extends BasicView &lt;br /&gt;  {&lt;br /&gt;    // 摺紙模型材質 &lt;br /&gt;    private var PaperPlaneMat : WireframeMaterial; &lt;br /&gt;    // 摺紙模型 &lt;br /&gt;    private var PaperPlaneMod : PaperPlane; &lt;br /&gt;     &lt;br /&gt;    // 建構子 &lt;br /&gt;    public function PV3DPaperPlane_Sample() &lt;br /&gt;    {&lt;br /&gt;      // 建置3D環境 &lt;br /&gt;      init3D(); &lt;br /&gt;    } &lt;br /&gt;    &lt;br /&gt;    // 建置3D環境 &lt;br /&gt;    private function init3D():void &lt;br /&gt;    { &lt;br /&gt;      // 建立材質(線性材質) &lt;br /&gt;      // 參數1:顏色值 &lt;br /&gt;      // 參數2:Alpha值 &lt;br /&gt;      // 參數3:厚度 &lt;br /&gt;      PaperPlaneMat = new WireframeMaterial( 0xFF0000, 100, 0); &lt;br /&gt;&lt;br /&gt;      // 材質正反面都顯示 &lt;br /&gt;      PaperPlaneMat.doubleSided = true; &lt;br /&gt;      &lt;br /&gt;      // 建立模型(摺紙)&lt;br /&gt;      // 參數1:材質&lt;br /&gt;      // 參數2:比例 &lt;br /&gt;      PaperPlaneMod = new PaperPlane( PaperPlaneMat, 2.5 ); &lt;br /&gt;      &lt;br /&gt;      // 將模型加入3D場景中 &lt;br /&gt;      scene.addChild(PaperPlaneMod); &lt;br /&gt;       &lt;br /&gt;      // 開始渲染 &lt;br /&gt;      startRendering();&lt;br /&gt;    } &lt;br /&gt;&lt;br /&gt;    // Loop(循環渲染) &lt;br /&gt;    override protected function onRenderTick(event:Event = null):void &lt;br /&gt;    {&lt;br /&gt;      // 摺紙繞X軸旋轉 &lt;br /&gt;      PaperPlaneMod.pitch(5); &lt;br /&gt;      // 摺紙繞Y軸旋轉 &lt;br /&gt;      PaperPlaneMod.yaw(5); &lt;br /&gt;      // 摺紙繞Z軸旋轉 &lt;br /&gt;      PaperPlaneMod.roll(5); &lt;br /&gt;      super.onRenderTick(event); &lt;br /&gt;    } &lt;br /&gt;  } &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;執行結果:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SkJGmS-smHI/AAAAAAAAAHg/LLy4o8WJYgY/s1600-h/demo.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5350916931013351538" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 400px" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SkJGmS-smHI/AAAAAAAAAHg/LLy4o8WJYgY/s400/demo.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://7-12.idv.tw/swf/pv3d_demo_PaperPlane_Sample.swf" target="_blank"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-4951823963636701116?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/4951823963636701116/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/06/pv3d-paperplane.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/4951823963636701116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/4951823963636701116'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/06/pv3d-paperplane.html' title='【教學】入門篇 PV3D 創建基本模型  PaperPlane'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SkJGmS-smHI/AAAAAAAAAHg/LLy4o8WJYgY/s72-c/demo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-4738273993547622680</id><published>2009-06-24T07:55:00.000-07:00</published><updated>2010-10-29T10:21:40.732-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>【教學】入門篇 PV3D 創建基本模型 Sphere</title><content type='html'>AS3程式代碼:&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;package &lt;br /&gt;{&lt;br /&gt;  // flash&lt;br /&gt;  import flash.events.Event;&lt;br /&gt;&lt;br /&gt;  // pv3d&lt;br /&gt;  import org.papervision3d.view.BasicView;&lt;br /&gt;  import org.papervision3d.materials.WireframeMaterial;&lt;br /&gt;  import org.papervision3d.objects.primitives.Sphere;&lt;br /&gt; &lt;br /&gt;  /**&lt;br /&gt;  * ...&lt;br /&gt;  * @author Max&lt;br /&gt;  */&lt;br /&gt;  // PV3DSphere_Sample類繼承BasicView(基本3D框架)&lt;br /&gt;  public class PV3DSphere_Sample extends BasicView&lt;br /&gt;  {&lt;br /&gt;    // 球體模型材質&lt;br /&gt;    private var SphereMat : WireframeMaterial; &lt;br /&gt;    // 球體模型&lt;br /&gt;    private var SphereMod : Sphere;&lt;br /&gt;  &lt;br /&gt;    // 建構子&lt;br /&gt;    public function PV3DSphere_Sample()&lt;br /&gt;    {&lt;br /&gt;      // 建置3D環境&lt;br /&gt;      init3D();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // 建置3D環境&lt;br /&gt;    private function init3D():void&lt;br /&gt;    {&lt;br /&gt;      // 建立材質(線性材質)&lt;br /&gt;      // 參數1:顏色值&lt;br /&gt;      // 參數2:Alpha值&lt;br /&gt;      // 參數3:厚度&lt;br /&gt;      SphereMat = new WireframeMaterial( 0xFF0000, 100, 0);&lt;br /&gt;   &lt;br /&gt;      // 建立模型(球體)&lt;br /&gt;      // 參數1:材質&lt;br /&gt;      // 參數2:半徑&lt;br /&gt;      // 參數3:寬面分隔節數&lt;br /&gt;      // 參數4:高度分隔節數 &lt;br /&gt;      SphereMod = new Sphere( SphereMat, 200, 12, 12);&lt;br /&gt;   &lt;br /&gt;      // 將模型加入3D場景中&lt;br /&gt;      scene.addChild(SphereMod);&lt;br /&gt;   &lt;br /&gt;      // 開始渲染&lt;br /&gt;      startRendering();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // Loop(循環渲染)&lt;br /&gt;    override protected function onRenderTick(event:Event = null):void &lt;br /&gt;    {&lt;br /&gt;      // 球體繞Y軸旋轉&lt;br /&gt;      SphereMod.yaw(5);&lt;br /&gt;      super.onRenderTick(event);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;執行結果:&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SkI-889DoaI/AAAAAAAAAHI/jCiWX1vLYO0/s1600-h/demo.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5350908524144861602" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 400px" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SkI-889DoaI/AAAAAAAAAHI/jCiWX1vLYO0/s400/demo.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://7-12.idv.tw/swf/pv3d_demo_Sphere_Sample.swf" target="_blank"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-4738273993547622680?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/4738273993547622680/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/06/pv3d-sphere.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/4738273993547622680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/4738273993547622680'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/06/pv3d-sphere.html' title='【教學】入門篇 PV3D 創建基本模型 Sphere'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SkI-889DoaI/AAAAAAAAAHI/jCiWX1vLYO0/s72-c/demo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-8455104750353420159</id><published>2009-06-23T09:56:00.000-07:00</published><updated>2010-10-29T10:19:03.863-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>【教學】入門篇 PV3D 創建基本模型 Cylinder</title><content type='html'>AS3程式代碼:&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;package &lt;br /&gt;{&lt;br /&gt;  // flash&lt;br /&gt;  import flash.events.Event;&lt;br /&gt; &lt;br /&gt;  // pv3d&lt;br /&gt;  import org.papervision3d.view.BasicView;&lt;br /&gt;  import org.papervision3d.materials.WireframeMaterial;&lt;br /&gt;  import org.papervision3d.objects.primitives.Cylinder;&lt;br /&gt; &lt;br /&gt;  /**&lt;br /&gt;  * ...&lt;br /&gt;  * @author Max&lt;br /&gt;  */&lt;br /&gt;  // PV3DCylinder_Sample類繼承BasicView(基本3D框架)&lt;br /&gt;  public class PV3DCylinder_Sample extends BasicView&lt;br /&gt;  {&lt;br /&gt;    // 柱體模型材質&lt;br /&gt;    private var CylinderMat : WireframeMaterial; &lt;br /&gt;    // 柱體模型&lt;br /&gt;    private var CylinderMod : Cylinder;&lt;br /&gt;  &lt;br /&gt;    // 建構子&lt;br /&gt;    public function PV3DCylinder_Sample()&lt;br /&gt;    {&lt;br /&gt;      // 建置3D環境&lt;br /&gt;      init3D();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // 建置3D環境&lt;br /&gt;    private function init3D():void&lt;br /&gt;    {&lt;br /&gt;      // 建立材質(線性材質)&lt;br /&gt;      // 參數1:顏色值&lt;br /&gt;      // 參數2:Alpha值&lt;br /&gt;      // 參數3:厚度&lt;br /&gt;      CylinderMat = new WireframeMaterial( 0xFF0000, 100, 0);&lt;br /&gt;&lt;br /&gt;      // 建立模型(柱體)&lt;br /&gt;      // 參數1:材質&lt;br /&gt;      // 參數2:柱體半徑&lt;br /&gt;      // 參數3:柱體高度&lt;br /&gt;      // 參數4:行成圓的分隔數&lt;br /&gt;      // 參數5:高度分隔節數&lt;br /&gt;      // 參數6:頂部半徑&lt;br /&gt;      CylinderMod = new Cylinder( CylinderMat, 150, 250, 12, 3, 150);&lt;br /&gt;   &lt;br /&gt;      // 將模型加入3D場景中&lt;br /&gt;      scene.addChild(CylinderMod);&lt;br /&gt;&lt;br /&gt;      // 開始渲染&lt;br /&gt;      startRendering();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // Loop(循環渲染)&lt;br /&gt;    override protected function onRenderTick(event:Event = null):void &lt;br /&gt;    {&lt;br /&gt;      // 柱體繞X軸旋轉&lt;br /&gt;      CylinderMod.pitch(5);&lt;br /&gt;      // 柱體繞Y軸旋轉&lt;br /&gt;      CylinderMod.yaw(5);&lt;br /&gt;      super.onRenderTick(event);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;執行結果:&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SkEJxP3d4zI/AAAAAAAAAHA/RckW0e7iSD4/s1600-h/demo.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5350568573970277170" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 380px" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SkEJxP3d4zI/AAAAAAAAAHA/RckW0e7iSD4/s400/demo.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://7-12.idv.tw/swf/pv3d_demo_Cylinder_Sample.swf" target="_blank"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-8455104750353420159?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/8455104750353420159/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/06/pv3d-cylinder.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/8455104750353420159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/8455104750353420159'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/06/pv3d-cylinder.html' title='【教學】入門篇 PV3D 創建基本模型 Cylinder'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SkEJxP3d4zI/AAAAAAAAAHA/RckW0e7iSD4/s72-c/demo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-8627286664021118090</id><published>2009-06-23T08:41:00.000-07:00</published><updated>2010-10-29T10:16:42.016-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>【教學】入門篇 PV3D 創建基本模型 Arrow</title><content type='html'>AS3程式代碼:&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;package &lt;br /&gt;{&lt;br /&gt;  // flash&lt;br /&gt;  import flash.events.Event;&lt;br /&gt; &lt;br /&gt;  // pv3d&lt;br /&gt;  import org.papervision3d.view.BasicView;&lt;br /&gt;  import org.papervision3d.materials.WireframeMaterial;&lt;br /&gt;  import org.papervision3d.objects.primitives.Arrow;&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * ...&lt;br /&gt;   * @author Max&lt;br /&gt;   */&lt;br /&gt;  // PV3DArrow_Sample類繼承BasicView(基本3D框架)&lt;br /&gt;  public class PV3DArrow_Sample extends BasicView&lt;br /&gt;  {&lt;br /&gt;    // 箭頭模型材質&lt;br /&gt;    private var ArrowMat : WireframeMaterial; &lt;br /&gt;    // 箭頭模型&lt;br /&gt;    private var ArrowMod : Arrow;&lt;br /&gt;  &lt;br /&gt;    // 建構子&lt;br /&gt;    public function PV3DArrow_Sample()&lt;br /&gt;    {&lt;br /&gt;      // 建置3D環境&lt;br /&gt;      init3D();&lt;br /&gt;    }&lt;br /&gt;        &lt;br /&gt;    // 建置3D環境&lt;br /&gt;    private function init3D():void&lt;br /&gt;    {&lt;br /&gt;      // 建立材質(線性材質)&lt;br /&gt;      // 參數1:顏色值&lt;br /&gt;      // 參數2:Alpha值&lt;br /&gt;      // 參數3:厚度&lt;br /&gt;      ArrowMat = new WireframeMaterial( 0xFF0000, 100, 0);&lt;br /&gt;    &lt;br /&gt;      // 建立模型(箭頭)&lt;br /&gt;      // 參數1:材質&lt;br /&gt;      ArrowMod = new Arrow( ArrowMat );&lt;br /&gt;   &lt;br /&gt;      // 將模型加入3D場景中&lt;br /&gt;      scene.addChild(ArrowMod);&lt;br /&gt;   &lt;br /&gt;      // 開始渲染&lt;br /&gt;      startRendering();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // Loop(循環渲染)&lt;br /&gt;    override protected function onRenderTick(event:Event = null):void &lt;br /&gt;    {&lt;br /&gt;      // 箭頭繞X軸旋轉&lt;br /&gt;      ArrowMod.pitch(5);&lt;br /&gt;      // 箭頭繞Y軸旋轉&lt;br /&gt;      ArrowMod.yaw(5);&lt;br /&gt;      super.onRenderTick(event);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;執行結果:&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SkD7_LCOxDI/AAAAAAAAAGY/vmk-xo4GXqk/s1600-h/demo.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5350553420028625970" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 355px" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SkD7_LCOxDI/AAAAAAAAAGY/vmk-xo4GXqk/s400/demo.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://7-12.idv.tw/swf/pv3d_demo_Arrow_Sample.swf" target="_blank"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-8627286664021118090?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/8627286664021118090/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/06/pv3d-arrow.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/8627286664021118090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/8627286664021118090'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/06/pv3d-arrow.html' title='【教學】入門篇 PV3D 創建基本模型 Arrow'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SkD7_LCOxDI/AAAAAAAAAGY/vmk-xo4GXqk/s72-c/demo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-1532827277390412029</id><published>2009-06-22T07:14:00.000-07:00</published><updated>2010-10-29T10:14:00.720-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>【教學】入門篇 PV3D 創建基本模型 Cone</title><content type='html'>AS3程式代碼:&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;package &lt;br /&gt;{&lt;br /&gt;  // flash&lt;br /&gt;  import flash.events.Event;&lt;br /&gt; &lt;br /&gt;  // pv3d&lt;br /&gt;  import org.papervision3d.view.BasicView;&lt;br /&gt;  import org.papervision3d.materials.WireframeMaterial;&lt;br /&gt;  import org.papervision3d.objects.primitives.Cone;&lt;br /&gt; &lt;br /&gt;  /**&lt;br /&gt;   * ...&lt;br /&gt;   * @author Max&lt;br /&gt;   */&lt;br /&gt;  // PV3DCone_Sample類繼承BasicView(基本3D框架)&lt;br /&gt;  public class PV3DCone_Sample extends BasicView&lt;br /&gt;  {&lt;br /&gt;    // 錐體模型材質&lt;br /&gt;    private var ConeMat : WireframeMaterial; &lt;br /&gt;    // 錐體模型&lt;br /&gt;    private var ConeMod : Cone;&lt;br /&gt;  &lt;br /&gt;    // 建構子&lt;br /&gt;    public function PV3DCone_Sample()&lt;br /&gt;    {&lt;br /&gt;      // 建置3D環境&lt;br /&gt;      init3D();&lt;br /&gt;    }&lt;br /&gt;            &lt;br /&gt;    // 建置3D環境&lt;br /&gt;    private function init3D():void&lt;br /&gt;    {&lt;br /&gt;      // 建立材質(線性材質)&lt;br /&gt;      // 參數1:顏色值&lt;br /&gt;      // 參數2:Alpha值&lt;br /&gt;      // 參數3:厚度&lt;br /&gt;      ConeMat = new WireframeMaterial( 0xFF0000, 100, 0);&lt;br /&gt;    &lt;br /&gt;      // 建立模型(錐體)&lt;br /&gt;      // 參數1:材質&lt;br /&gt;      // 參數2:錐體半徑&lt;br /&gt;      // 參數3:柱體高度&lt;br /&gt;      // 參數4:行成圓的分隔數&lt;br /&gt;      // 參數5:高度分隔節數&lt;br /&gt;      ConeMod = new Cone( ConeMat, 200, 300, 12, 3);&lt;br /&gt;   &lt;br /&gt;      // 將模型加入3D場景中&lt;br /&gt;      scene.addChild(ConeMod);&lt;br /&gt;   &lt;br /&gt;      // 開始渲染&lt;br /&gt;      startRendering();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // Loop(循環渲染)&lt;br /&gt;    override protected function onRenderTick(event:Event = null):void &lt;br /&gt;    {&lt;br /&gt;      // 錐體繞X軸旋轉&lt;br /&gt;      ConeMod.pitch(5);&lt;br /&gt;      // 錐體繞Y軸旋轉&lt;br /&gt;      ConeMod.yaw(5);&lt;br /&gt;      super.onRenderTick(event);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;執行結果:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SkECBFRy60I/AAAAAAAAAGw/EWjWjKyT0YY/s1600-h/demo.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5350560049912802114" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 395px" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SkECBFRy60I/AAAAAAAAAGw/EWjWjKyT0YY/s400/demo.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://7-12.idv.tw/swf/pv3d_demo_Cone_Sample.swf" target="_blank"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-1532827277390412029?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/1532827277390412029/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/06/pv3d-cone.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/1532827277390412029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/1532827277390412029'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/06/pv3d-cone.html' title='【教學】入門篇 PV3D 創建基本模型 Cone'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SkECBFRy60I/AAAAAAAAAGw/EWjWjKyT0YY/s72-c/demo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-1807414046808570813</id><published>2009-06-20T11:13:00.000-07:00</published><updated>2010-10-29T10:11:26.463-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>【教學】入門篇 PV3D創建基本模型 Plane</title><content type='html'>AS3程式代碼:&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;package &lt;br /&gt;{&lt;br /&gt;  // flash&lt;br /&gt;  import flash.events.Event;&lt;br /&gt;&lt;br /&gt;  // pv3d&lt;br /&gt;  import org.papervision3d.view.BasicView;&lt;br /&gt;  import org.papervision3d.materials.WireframeMaterial;&lt;br /&gt;  import org.papervision3d.objects.primitives.Plane;&lt;br /&gt; &lt;br /&gt;  /**&lt;br /&gt;  * ...&lt;br /&gt;  * @author Max&lt;br /&gt;  */&lt;br /&gt;  // PV3DPlane_Sample類繼承BasicView(基本3D框架)&lt;br /&gt;  public class PV3DPlane_Sample extends BasicView &lt;br /&gt;  {&lt;br /&gt;    // 平面模型材質&lt;br /&gt;    private var PlaneMat:WireframeMaterial;&lt;br /&gt;  &lt;br /&gt;    // 平面模型&lt;br /&gt;    private var PlaneMod:Plane;  &lt;br /&gt;  &lt;br /&gt;    // 建構子&lt;br /&gt;    public function PV3DPlane_Sample()&lt;br /&gt;    {&lt;br /&gt;      // 建置3D環境&lt;br /&gt;      init3D();&lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    // 建置3D環境&lt;br /&gt;    private function init3D():void&lt;br /&gt;    {&lt;br /&gt;      // 建立材質(線性材質)&lt;br /&gt;      // 參數1:顏色值&lt;br /&gt;      // 參數2:Alpha值&lt;br /&gt;      // 參數3:厚度&lt;br /&gt;      PlaneMat = new WireframeMaterial( 0xFF0000, 100, 0);&lt;br /&gt;&lt;br /&gt;      // 材質兩面都顯現&lt;br /&gt;      PlaneMat.doubleSided = true;&lt;br /&gt;   &lt;br /&gt;      // 建立模型(平面)&lt;br /&gt;      // 參數1:材質&lt;br /&gt;      // 參數2:平面寬度&lt;br /&gt;      // 參數3:平面高度&lt;br /&gt;      // 參數4:寬度分隔數&lt;br /&gt;      // 參數5:高度分隔數&lt;br /&gt;      PlaneMod = new Plane( PlaneMat, 300, 300, 3, 3 );&lt;br /&gt;   &lt;br /&gt;      // 將平面模型加入3D場景中&lt;br /&gt;      scene.addChild(PlaneMod);&lt;br /&gt;   &lt;br /&gt;      // 開始渲染&lt;br /&gt;      startRendering();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // Loop(循環渲染)&lt;br /&gt;    override protected function onRenderTick(event:Event = null):void &lt;br /&gt;    {&lt;br /&gt;      // 平面模型繞Y軸自轉&lt;br /&gt;      PlaneMod.yaw(10);  &lt;br /&gt;      super.onRenderTick(event);&lt;br /&gt;    } &lt;br /&gt;  } &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;執行結果:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SkJCbMalEuI/AAAAAAAAAHY/nSV5eqcjfqw/s1600-h/demo.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5350912342226178786" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 390px" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SkJCbMalEuI/AAAAAAAAAHY/nSV5eqcjfqw/s400/demo.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://7-12.idv.tw/swf/pv3d_demo_Plane_Sample.swf" target="_blank"&gt;demo &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-1807414046808570813?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/1807414046808570813/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/06/pv3d-plane.html#comment-form' title='3 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/1807414046808570813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/1807414046808570813'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/06/pv3d-plane.html' title='【教學】入門篇 PV3D創建基本模型 Plane'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SkJCbMalEuI/AAAAAAAAAHY/nSV5eqcjfqw/s72-c/demo.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-429251072829037746</id><published>2009-06-18T20:51:00.000-07:00</published><updated>2009-06-23T11:57:01.715-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>ActionScript3 鍵盤控制</title><content type='html'>&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;AS3中的鍵盤事件可在任一個特定物件上偵聽，&lt;br /&gt;使用方式很簡單，&lt;br /&gt;只要先import flash.events.keyboardEvent類&lt;br /&gt;在想要接收鍵盤訊號的物件上加入鍵盤偵聽事件即可。&lt;br /&gt;鍵盤事件主要一般有&lt;br /&gt;按下(KEY_DOWN)、&lt;br /&gt;放開(KEY_UP)兩個事件。&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;span style="color:teal;"&gt;  1&lt;/span&gt; &lt;span style="color:#3333ff;"&gt;package&lt;/span&gt;&lt;br /&gt;&lt;span style="color:teal;"&gt;  2&lt;/span&gt; {&lt;br /&gt;&lt;span style="color:teal;"&gt;  3&lt;/span&gt;     &lt;span style="color:#3333ff;"&gt;import&lt;/span&gt; &lt;span style="color:#3333ff;"&gt;flash&lt;/span&gt;.&lt;span style="color:#3333ff;"&gt;display&lt;/span&gt;.&lt;span style="color:#3333ff;"&gt;Sprite&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:teal;"&gt;  4&lt;/span&gt;     &lt;span style="color:#3333ff;"&gt;import&lt;/span&gt; &lt;span style="color:#3333ff;"&gt;flash&lt;/span&gt;.&lt;span style="color:#3333ff;"&gt;events&lt;/span&gt;.&lt;span style="color:#3333ff;"&gt;KeyboardEvent&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:teal;"&gt;  5&lt;/span&gt;&lt;br /&gt;&lt;span style="color:teal;"&gt;  6&lt;/span&gt;     &lt;span style="color:green;"&gt;/**&lt;br /&gt;&lt;span style="color:teal;"&gt;  7&lt;/span&gt;      * ...&lt;br /&gt;&lt;span style="color:teal;"&gt;  8&lt;/span&gt;      * @author Max&lt;br /&gt;&lt;span style="color:teal;"&gt;  9&lt;/span&gt;      */&lt;/span&gt;&lt;br /&gt;&lt;span style="color:teal;"&gt; 10&lt;/span&gt;     &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; AS3KeyboardEvent &lt;span style="color:#3333ff;"&gt;extends&lt;/span&gt; &lt;span style="color:#3333ff;"&gt;Sprite&lt;/span&gt;&lt;br /&gt;&lt;span style="color:teal;"&gt; 11&lt;/span&gt;     {&lt;br /&gt;&lt;span style="color:teal;"&gt; 12&lt;/span&gt;         &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:#3333ff;"&gt;function&lt;/span&gt; AS3KeyboardEvent()&lt;br /&gt;&lt;span style="color:teal;"&gt; 13&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color:teal;"&gt; 14&lt;/span&gt;             initEvent();&lt;br /&gt;&lt;span style="color:teal;"&gt; 15&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color:teal;"&gt; 16&lt;/span&gt;         &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:#3333ff;"&gt;function&lt;/span&gt; initEvent():&lt;span style="color:blue;"&gt;void&lt;/span&gt;&lt;br /&gt;&lt;span style="color:teal;"&gt; 17&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color:teal;"&gt; 18&lt;/span&gt;             &lt;span style="color:#3333ff;"&gt;stage&lt;/span&gt;.&lt;span style="color:#3333ff;"&gt;addEventListener&lt;/span&gt;(&lt;span style="color:#3333ff;"&gt;KeyboardEvent&lt;/span&gt;.&lt;span style="color:#3333ff;"&gt;KEY_DOWN&lt;/span&gt;, onKeyboardEventHandle);&lt;br /&gt;&lt;span style="color:teal;"&gt; 19&lt;/span&gt;             &lt;span style="color:#3333ff;"&gt;stage&lt;/span&gt;.&lt;span style="color:#3333ff;"&gt;addEventListener&lt;/span&gt;(&lt;span style="color:#3333ff;"&gt;KeyboardEvent&lt;/span&gt;.&lt;span style="color:#3333ff;"&gt;KEY_UP&lt;/span&gt;,   onKeyboardEventHandle);&lt;br /&gt;&lt;span style="color:teal;"&gt; 20&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color:teal;"&gt; 21&lt;/span&gt;         &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:#3333ff;"&gt;function&lt;/span&gt; onKeyboardEventHandle(&lt;span style="color:#3333ff;"&gt;event&lt;/span&gt;:&lt;span style="color:#3333ff;"&gt;KeyboardEvent&lt;/span&gt;):&lt;span style="color:blue;"&gt;void&lt;/span&gt;&lt;br /&gt;&lt;span style="color:teal;"&gt; 22&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color:teal;"&gt; 23&lt;/span&gt;             &lt;span style="color:#3333ff;"&gt;trace&lt;/span&gt;(&lt;span style="color:#3333ff;"&gt;event&lt;/span&gt;.&lt;span style="color:#3333ff;"&gt;type&lt;/span&gt;);&lt;br /&gt;&lt;span style="color:teal;"&gt; 24&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color:teal;"&gt; 25&lt;/span&gt;     }&lt;br /&gt;&lt;span style="color:teal;"&gt; 26&lt;/span&gt; }&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;當按下任一鍵盤按鈕時會出現輸出訊息:&lt;br /&gt;keyDown&lt;br /&gt;&lt;br /&gt;當放開任一鍵盤按鈕時會出現輸出訊息:&lt;br /&gt;keyUp&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;如果說想知道哪鍵盤被按下或放開，&lt;br /&gt;需要鍵盤事件有關的資料。&lt;br /&gt;這資料就是字元碼(charCode)、鍵位碼(keyCode)兩個屬性。&lt;br /&gt;字元碼(charCode)屬性所表示的是被按下的字元，傳回ASCll碼。&lt;br /&gt;鍵位碼(keyCode)字元內含代表被按下實體鍵的一個數字。&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;span style="color:teal;"&gt;  1&lt;/span&gt; &lt;span style="color:blue;"&gt;package&lt;/span&gt;&lt;br /&gt;&lt;span style="color:teal;"&gt;  2&lt;/span&gt; {&lt;br /&gt;&lt;span style="color:teal;"&gt;  3&lt;/span&gt;     &lt;span style="color:blue;"&gt;import&lt;/span&gt; &lt;span style="color:#3333ff;"&gt;flash&lt;/span&gt;.&lt;span style="color:#3333ff;"&gt;display&lt;/span&gt;.&lt;span style="color:#3333ff;"&gt;Sprite&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:teal;"&gt;  4&lt;/span&gt;     &lt;span style="color:blue;"&gt;import&lt;/span&gt; &lt;span style="color:#3333ff;"&gt;flash&lt;/span&gt;.&lt;span style="color:#3333ff;"&gt;events&lt;/span&gt;.&lt;span style="color:#3333ff;"&gt;KeyboardEvent&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:teal;"&gt;  5&lt;/span&gt;     &lt;span style="color:blue;"&gt;import&lt;/span&gt; &lt;span style="color:#3333ff;"&gt;flash&lt;/span&gt;.&lt;span style="color:#3333ff;"&gt;ui&lt;/span&gt;.&lt;span style="color:#3333ff;"&gt;Keyboard&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:teal;"&gt;  6&lt;/span&gt;     &lt;span style="color:green;"&gt;/**&lt;br /&gt;&lt;span style="color:teal;"&gt;  7&lt;/span&gt;      * ...&lt;br /&gt;&lt;span style="color:teal;"&gt;  8&lt;/span&gt;      * @author Max&lt;br /&gt;&lt;span style="color:teal;"&gt;  9&lt;/span&gt;      */&lt;/span&gt;&lt;br /&gt;&lt;span style="color:teal;"&gt; 10&lt;/span&gt;     &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; AS3KeyCode &lt;span style="color:blue;"&gt;extends&lt;/span&gt; Sprite&lt;br /&gt;&lt;span style="color:teal;"&gt; 11&lt;/span&gt;     {&lt;br /&gt;&lt;span style="color:teal;"&gt; 12&lt;/span&gt;         &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;function&lt;/span&gt; AS3KeyCode()&lt;br /&gt;&lt;span style="color:teal;"&gt; 13&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color:teal;"&gt; 14&lt;/span&gt;            initKeyCode();&lt;br /&gt;&lt;span style="color:teal;"&gt; 15&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color:teal;"&gt; 16&lt;/span&gt;         &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;function&lt;/span&gt; initKeyCode():&lt;span style="color:blue;"&gt;void&lt;/span&gt;&lt;br /&gt;&lt;span style="color:teal;"&gt; 17&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color:teal;"&gt; 18&lt;/span&gt;             &lt;span style="color:#3333ff;"&gt;stage&lt;/span&gt;.&lt;span style="color:#3333ff;"&gt;addEventListener&lt;/span&gt;(&lt;span style="color:#3333ff;"&gt;KeyboardEvent&lt;/span&gt;.&lt;span style="color:#3333ff;"&gt;KEY_DOWN&lt;/span&gt;, onKeyboardEventHandle);&lt;br /&gt;&lt;span style="color:teal;"&gt; 19&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color:teal;"&gt; 20&lt;/span&gt;         &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;function&lt;/span&gt; onKeyboardEventHandle(&lt;span style="color:blue;"&gt;event&lt;/span&gt;:&lt;span style="color:#3333ff;"&gt;KeyboardEvent&lt;/span&gt;):&lt;span style="color:blue;"&gt;void&lt;/span&gt;&lt;br /&gt;&lt;span style="color:teal;"&gt; 21&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color:teal;"&gt; 22&lt;/span&gt;             &lt;span style="color:#3333ff;"&gt;trace&lt;/span&gt;(&lt;span style="color:maroon;"&gt;"charCode: "&lt;/span&gt; + &lt;span style="color:blue;"&gt;event&lt;/span&gt;.&lt;span style="color:#3333ff;"&gt;charCode&lt;/span&gt;);&lt;br /&gt;&lt;span style="color:teal;"&gt; 23&lt;/span&gt;             &lt;span style="color:#3333ff;"&gt;trace&lt;/span&gt;(&lt;span style="color:maroon;"&gt;"keyCode: "&lt;/span&gt;  + &lt;span style="color:blue;"&gt;event&lt;/span&gt;.&lt;span style="color:#3333ff;"&gt;keyCode&lt;/span&gt; );&lt;br /&gt;&lt;span style="color:teal;"&gt; 24&lt;/span&gt;     &lt;br /&gt;&lt;span style="color:teal;"&gt; 25&lt;/span&gt;             &lt;span style="color:blue;"&gt;switch&lt;/span&gt;(&lt;span style="color:blue;"&gt;event&lt;/span&gt;.&lt;span style="color:#3333ff;"&gt;keyCode&lt;/span&gt;)&lt;br /&gt;&lt;span style="color:teal;"&gt; 26&lt;/span&gt;             {&lt;br /&gt;&lt;span style="color:teal;"&gt; 27&lt;/span&gt;                 &lt;span style="color:blue;"&gt;case&lt;/span&gt; &lt;span style="color:#3333ff;"&gt;Keyboard&lt;/span&gt;.&lt;span style="color:#3333ff;"&gt;UP&lt;/span&gt;:&lt;br /&gt;&lt;span style="color:teal;"&gt; 28&lt;/span&gt;                 &lt;span style="color:#3333ff;"&gt;trace&lt;/span&gt;(&lt;span style="color:maroon;"&gt;"按下鍵盤上鍵"&lt;/span&gt;);&lt;br /&gt;&lt;span style="color:teal;"&gt; 29&lt;/span&gt;                 &lt;span style="color:blue;"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:teal;"&gt; 30&lt;/span&gt;         &lt;br /&gt;&lt;span style="color:teal;"&gt; 31&lt;/span&gt;                 &lt;span style="color:blue;"&gt;case&lt;/span&gt; &lt;span style="color:#3333ff;"&gt;Keyboard&lt;/span&gt;.&lt;span style="color:#3333ff;"&gt;DOWN&lt;/span&gt;:&lt;br /&gt;&lt;span style="color:teal;"&gt; 32&lt;/span&gt;                 &lt;span style="color:#3333ff;"&gt;trace&lt;/span&gt;(&lt;span style="color:maroon;"&gt;"按下鍵盤下鍵"&lt;/span&gt;);&lt;br /&gt;&lt;span style="color:teal;"&gt; 33&lt;/span&gt;                 &lt;span style="color:blue;"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:teal;"&gt; 34&lt;/span&gt;         &lt;br /&gt;&lt;span style="color:teal;"&gt; 35&lt;/span&gt;                 &lt;span style="color:blue;"&gt;case&lt;/span&gt; &lt;span style="color:#3333ff;"&gt;Keyboard&lt;/span&gt;.&lt;span style="color:#3333ff;"&gt;LEFT&lt;/span&gt;:&lt;br /&gt;&lt;span style="color:teal;"&gt; 36&lt;/span&gt;                 &lt;span style="color:#3333ff;"&gt;trace&lt;/span&gt;(&lt;span style="color:maroon;"&gt;"按下鍵盤左鍵"&lt;/span&gt;);&lt;br /&gt;&lt;span style="color:teal;"&gt; 37&lt;/span&gt;                 &lt;span style="color:blue;"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:teal;"&gt; 38&lt;/span&gt;         &lt;br /&gt;&lt;span style="color:teal;"&gt; 39&lt;/span&gt;                 &lt;span style="color:blue;"&gt;case&lt;/span&gt; &lt;span style="color:#3333ff;"&gt;Keyboard&lt;/span&gt;.&lt;span style="color:#3333ff;"&gt;RIGHT&lt;/span&gt;:&lt;br /&gt;&lt;span style="color:teal;"&gt; 40&lt;/span&gt;                 &lt;span style="color:#3333ff;"&gt;trace&lt;/span&gt;(&lt;span style="color:maroon;"&gt;"按下鍵盤右鍵"&lt;/span&gt;);&lt;br /&gt;&lt;span style="color:teal;"&gt; 41&lt;/span&gt;                 &lt;span style="color:blue;"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:teal;"&gt; 42&lt;/span&gt;             }&lt;br /&gt;&lt;span style="color:teal;"&gt; 43&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color:teal;"&gt; 44&lt;/span&gt;     }&lt;br /&gt;&lt;span style="color:teal;"&gt; 45&lt;/span&gt; }&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;按下"A"鍵的輸出訊息:&lt;br /&gt;charCode: 97&lt;br /&gt;keyCode: 65&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-429251072829037746?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/429251072829037746/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/06/actionscript3.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/429251072829037746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/429251072829037746'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/06/actionscript3.html' title='ActionScript3 鍵盤控制'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-5838848705502578120</id><published>2009-06-13T19:41:00.000-07:00</published><updated>2009-06-23T19:18:20.697-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>用程式碼做動畫</title><content type='html'>&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;用Flash的形狀(shape)或元件(symbol)做動畫，&lt;br /&gt;Flash不會為各影格建立及儲存新的點陣圖像，&lt;br /&gt;而連續影格的動畫，&lt;br /&gt;Flash為影格儲存的是舞台(stage)上各個物件的資訊&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;(位置、大小、顏色..等)。&lt;br /&gt;用程式碼(code)做動畫的流程：&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;初始化&lt;/li&gt;&lt;li&gt;重複動作&lt;/li&gt;&lt;li&gt;螢幕更新&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-5838848705502578120?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/5838848705502578120/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/06/blog-post.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/5838848705502578120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/5838848705502578120'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/06/blog-post.html' title='用程式碼做動畫'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-2867677596779855985</id><published>2009-06-13T02:23:00.000-07:00</published><updated>2009-06-23T19:45:53.115-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>【教學】PV3D 投影(Project)視圖(Viewport)</title><content type='html'>&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;PV3D2.0.883版本&lt;br /&gt;在org/papervision3d/core/rende/project路徑下，&lt;br /&gt;可以看到ProjectionPipeline這個類，&lt;br /&gt;從字面上來看(投影管線)就好像水管ㄧ樣，&lt;br /&gt;我們從管子的ㄧ方把資料放進去之後，&lt;br /&gt;在裡面會做一些加工，&lt;br /&gt;然後我們想要的東西就會從另ㄧ邊跑出來，&lt;br /&gt;就像一個進行流水作業的工廠ㄧ樣。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;ProjectionPipeline類別有一project的方法，&lt;br /&gt;參數為(renderSessionData:RenderSessionData)，&lt;br /&gt;在org/papervision3d/core/rende/project路徑下，&lt;br /&gt;還有一個BasicProjectionPipeline類覆寫了此方法，&lt;br /&gt;帶入renderSessionData這個參數，&lt;br /&gt;就是管線來源資料，&lt;br /&gt;透過處理得到我們的結果Viewport3D(視圖)。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;當我們使用的預設的投影與渲染，&lt;br /&gt;是將所有構成模型的三角面(Face)放在同一層，&lt;br /&gt;只不過以先後順序將三角面一個個放上去，&lt;br /&gt;才形成了遮擋，&lt;br /&gt;而通常被擋住的就不顯示，&lt;br /&gt;這種排列的缺點是，&lt;br /&gt;當兩個模型非常靠近時，&lt;br /&gt;他們的某些面會進行錯誤的排列，&lt;br /&gt;產生很難看的破面現象。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;而改用viewportLayer(視圖層級)，&lt;br /&gt;能把一個或幾個模型以手動的方式加入一個或數個視圖層，&lt;br /&gt;然後排列這些視圖層的前後順序。&lt;br /&gt;這樣做的好處是，&lt;br /&gt;可以對視圖層進行很多類似MovieClip的控制。&lt;br /&gt;例如對視圖層加入濾镜特效等等，&lt;br /&gt;甚至可以用来模擬镜頭焦距現象(Depth of Field)。&lt;br /&gt;使用viewportLayer要注意的是，&lt;br /&gt;一旦使用了layer，&lt;br /&gt;就要場景裡所有物体都使用，&lt;br /&gt;没有使用的物体都會被預設是排列在最底層，&lt;br /&gt;也就是說，&lt;br /&gt;沒有加入任何視圖層的模型都會被上面的視圖層蓋在最下面。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;在org/papervision3d/view/layer/util路徑下，&lt;br /&gt;有個視圖排列的類(ViewportLayerSortMode)，&lt;br /&gt;該類別提供三個靜態屬性：&lt;br /&gt;Z_SORT、INDEX_SORT、ORIGIN_SORT&lt;br /&gt;說明了視圖層排列的方式。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SjN5PIjS6QI/AAAAAAAAAGQ/sfHbSJyB-1A/s1600-h/demo_pic01.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5346750483519432962" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 155px" alt="" src="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SjN5PIjS6QI/AAAAAAAAAGQ/sfHbSJyB-1A/s400/demo_pic01.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;透過投影矩陣轉換之後，&lt;br /&gt;也就是3D轉成2D視圖，&lt;br /&gt;一般viewport就是2D視圖結果，&lt;br /&gt;所以像一些文字、圖片、Sprite、MovieClip...等，&lt;br /&gt;就可加入至此。&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-2867677596779855985?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/2867677596779855985/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/06/pv3d-projectviewport.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/2867677596779855985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/2867677596779855985'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/06/pv3d-projectviewport.html' title='【教學】PV3D 投影(Project)視圖(Viewport)'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SjN5PIjS6QI/AAAAAAAAAGQ/sfHbSJyB-1A/s72-c/demo_pic01.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-3262210866881473370</id><published>2009-06-07T22:59:00.000-07:00</published><updated>2010-11-08T21:29:53.716-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>【教學】PV3D 攝影機(Camera)</title><content type='html'>PV3D2.0.883版本在org/papervision3d/cameras路徑下，&lt;br /&gt;可以看到四個跟攝影機(Camera)有關的類(Class)：&lt;br /&gt;CameraType、Camera3D、DebugCamera3D、SpringCamera3D。&lt;br /&gt;&lt;br /&gt;主要先介紹CameraType這個類別，&lt;br /&gt;該類別提供四個公用屬性這四個公用屬性可用字串&lt;br /&gt;"Debug"(除錯)、"Free"(自由移動)、"Spring"(跟隨)、"Target"(目標)&lt;br /&gt;來表示攝影機的類型，&lt;br /&gt;一般我們在創建PV3D框架時所使用的camera類型，&lt;br /&gt;預設值都是"Target"，&lt;br /&gt;也就是攝影機的目標視點對準3D場景的世界座標中心(x:0,y:0,z:0)。&lt;br /&gt;要變更CameraType類型只要在BasicView衍生的子類裡，&lt;br /&gt;修改父類的參數值，&lt;br /&gt;如：super( 640, 480, true, false, CameraType.FREE)，&lt;br /&gt;第五個參數可換成&lt;br /&gt;CameraType.TARGET、CameraType.FREE、CameraType.DEBUG、CameraType.SPRING。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PV3D改變攝影機種類檔案程式代碼:&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;  import flash.events.Event;&lt;br /&gt;  import org.papervision3d.cameras.CameraType;&lt;br /&gt;  import org.papervision3d.view.BasicView;&lt;br /&gt;&lt;br /&gt;  public class PV3D_Sample_Camera extends BasicView&lt;br /&gt;  {&lt;br /&gt;    public function PV3D_Sample_Camera()&lt;br /&gt;    {&lt;br /&gt;      super( 640, 480, true, false, CameraType.DEBUG);&lt;br /&gt;      startRendering();&lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    override protected function onRenderTick(event:Event = null):void&lt;br /&gt;    { &lt;br /&gt;      renderer.renderScene(scene, _camera, viewport);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;當檔案執行成功時螢幕會自動出現debug文字訊息。&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/Si0vxl8NZTI/AAAAAAAAAFw/I36AMn_NK7g/s1600-h/pic01.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 155px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5344980861803390258" border="0" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/Si0vxl8NZTI/AAAAAAAAAFw/I36AMn_NK7g/s400/pic01.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Camera3D是繼承CameraObject3D而來。&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/Si0v5leVXCI/AAAAAAAAAF4/qOOEHh7PrcI/s1600-h/pic02.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 360px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5344980999117036578" border="0" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/Si0v5leVXCI/AAAAAAAAAF4/qOOEHh7PrcI/s400/pic02.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/Si0wAgQwkLI/AAAAAAAAAGA/jntmzhewZEU/s1600-h/pic03.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 126px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5344981117977006258" border="0" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/Si0wAgQwkLI/AAAAAAAAAGA/jntmzhewZEU/s400/pic03.jpg" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-3262210866881473370?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/3262210866881473370/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/06/pv3d-camera.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/3262210866881473370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/3262210866881473370'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/06/pv3d-camera.html' title='【教學】PV3D 攝影機(Camera)'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/Si0vxl8NZTI/AAAAAAAAAFw/I36AMn_NK7g/s72-c/pic01.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-6531850676452535593</id><published>2009-06-07T20:38:00.000-07:00</published><updated>2010-11-06T04:42:03.544-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>【教學】入門篇 PV3D 基本框架建置(一)</title><content type='html'>PV3D2.0.以前早期提供的基本3D環境框架較繁雜， &lt;br /&gt;主要需要自己建立一個基本3D環境類別(衍生Sprite)， &lt;br /&gt;內容包含所有的3D基本物件scene、camera、viewport、 &lt;br /&gt;renderer(由Scene3D、Camera3D、Viewport3D、 &lt;br /&gt;BasicRenderEngine類別建立)。&lt;br /&gt;&lt;br /&gt;主要是按照3D繪圖的流程來建立， &lt;br /&gt;先建立好一個3D場景， &lt;br /&gt;將任何3D物件(DisplayObject)加入， &lt;br /&gt;之後透過world-&gt;view-&gt;projection &lt;br /&gt;的一連串Transform(3D轉2D)產生viewport， &lt;br /&gt;最後將viewport循環render渲染。&lt;br /&gt;&lt;br /&gt;程式碼如下:&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;  //////////////////// 匯入類別&lt;br /&gt;  //Flash&lt;br /&gt;  import flash.display.Sprite;&lt;br /&gt;  import flash.events.Event;&lt;br /&gt;&lt;br /&gt;  //PV3D&lt;br /&gt;  import org.papervision3d.scenes.Scene3D;&lt;br /&gt;  import org.papervision3d.cameras.Camera3D;&lt;br /&gt;  import org.papervision3d.view.Viewport3D;&lt;br /&gt;  import org.papervision3d.render.BasicRenderEngine;&lt;br /&gt; &lt;br /&gt;  //////////////////// PV3D基本框架類別&lt;br /&gt;  public class PV3D_Framework extends Sprite&lt;br /&gt;  {&lt;br /&gt;    //場景3d，用來放置所有的3d物件 &lt;br /&gt;    private var scene:Scene3D;&lt;br /&gt;    //Camera3D 物件&lt;br /&gt;    private var camera:Camera3D;&lt;br /&gt;    //Viewport3D，3D轉成2D後的呈現畫面  &lt;br /&gt;    private var viewport:Viewport3D;&lt;br /&gt;    //渲染(算圖)引擎 &lt;br /&gt;    private var renderer:BasicRenderEngine;&lt;br /&gt;    &lt;br /&gt;    //建構函式&lt;br /&gt;    public function PV3D_Framework()&lt;br /&gt;    {&lt;br /&gt;      //初始化   &lt;br /&gt;      init3D();&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    //////////////////// 初始化3D&lt;br /&gt;    private function init3D():void&lt;br /&gt;    {&lt;br /&gt;      //建立scene3D物件&lt;br /&gt;      scene = new Scene3D;&lt;br /&gt;      //建立camera物件 &lt;br /&gt;      camera = new Camera3D;&lt;br /&gt;      //建立viewport物件(寬，高，是否自動對齊場景中間，是否可與mouse互動)&lt;br /&gt;      viewport = new Viewport3D( 550, 400, true, false);&lt;br /&gt;      //將viewport物件加入。 &lt;br /&gt;      this.addChild(viewport);&lt;br /&gt;      //建立渲染引擎&lt;br /&gt;      renderer = new BasicRenderEngine;&lt;br /&gt;      //加入時間軸(Loop)偵聽事件    &lt;br /&gt;      this.addEventListener(Event.ENTER_FRAME, onEventRender3D);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    //////////////////// 進入時間軸(Loop)&lt;br /&gt;    private function onEventRender3D(event:Event):void&lt;br /&gt;    {&lt;br /&gt;      //渲染 &lt;br /&gt;      renderer.renderScene( scene, camera, viewport); &lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;當檔案執行成功時輸出視窗會自動秀出下列訊息：&lt;br /&gt;INFO: Papervision3D Public Beta 2.0 - Great White (December 3rd, 2008)INFO: Viewport&lt;br /&gt;autoScaleToStage : Papervision has changed the Stage scale mode.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-6531850676452535593?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/6531850676452535593/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/06/pv3d.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/6531850676452535593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/6531850676452535593'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/06/pv3d.html' title='【教學】入門篇 PV3D 基本框架建置(一)'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-1712332172150379032</id><published>2009-06-03T07:27:00.000-07:00</published><updated>2011-05-05T07:38:41.338-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>PV3D 格鬥遊戲3D碰撞測試</title><content type='html'>&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;這個範例主要是運用DAEMC這個類別來控制角色的動畫，&lt;br /&gt;如等待、行走、攻擊..等。&lt;br /&gt;此外加入3D物件碰撞偵測，&lt;br /&gt;使出拳跟踢腳能判定是否碰撞，&lt;br /&gt;再依據碰撞結果扣除血量。&lt;br /&gt;不過目前是以出拳的最長點為判定屬點的判別，&lt;br /&gt;將做方體(也就是整隻手的碰撞)，&lt;br /&gt;及身體各部位碰撞體來做判斷應該會更準確。&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SiaIjDAo9yI/AAAAAAAAAFo/VithLusccU4/s1600-h/demo.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5343108143606462242" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 290px" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SiaIjDAo9yI/AAAAAAAAAFo/VithLusccU4/s400/demo.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://igmax.myweb.hinet.net/demo_action/FightDemo.html" target="_blank"&gt;demo&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;操控方式；&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;角色1：W、A、D鍵控制移動，G、H鍵攻擊&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;角色2：上、左、右鍵控制移動，K、L鍵攻擊&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-1712332172150379032?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/1712332172150379032/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/06/pv3d-3d.html#comment-form' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/1712332172150379032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/1712332172150379032'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/06/pv3d-3d.html' title='PV3D 格鬥遊戲3D碰撞測試'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SiaIjDAo9yI/AAAAAAAAAFo/VithLusccU4/s72-c/demo.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-1415240191943054525</id><published>2009-05-28T07:07:00.000-07:00</published><updated>2009-05-28T07:08:33.237-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>ActionScript 3.0 官方說明文件</title><content type='html'>ActionScript 3.0 官方說明文件參考：&lt;br /&gt;&lt;a href="http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/"&gt;http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-1415240191943054525?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/1415240191943054525/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/05/actionscript-30_28.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/1415240191943054525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/1415240191943054525'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/05/actionscript-30_28.html' title='ActionScript 3.0 官方說明文件'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-3142448856388121296</id><published>2009-05-27T08:39:00.000-07:00</published><updated>2009-05-27T08:40:27.502-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>ActionScript 3.0 錯誤訊息對照表</title><content type='html'>ActionScript 3.0 錯誤訊息都可以由下面查得: &lt;a href="http://help.adobe.com/zh_TW/AS3LCR/Flash_10.0/runtimeErrors.html" target="_blank"&gt;http://help.adobe.com/zh_TW/AS3LCR/Flash_10.0/runtimeErrors.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-3142448856388121296?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/3142448856388121296/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/05/actionscript-30.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/3142448856388121296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/3142448856388121296'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/05/actionscript-30.html' title='ActionScript 3.0 錯誤訊息對照表'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-3899509504880722949</id><published>2009-05-27T08:35:00.000-07:00</published><updated>2009-05-27T08:38:02.087-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>BulkLoader 下載類別</title><content type='html'>這是&lt;a href="http://code.google.com/p/bulk-loader/" target="_blank"&gt;BulkLoader&lt;/a&gt;下載(loader)類別的說明文件:&lt;br /&gt;&lt;a href="http://www.stimuli.com.br:8080/media/projects/bulk-loader/docs/"&gt;http://www.stimuli.com.br:8080/media/projects/bulk-loader/docs/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-3899509504880722949?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/3899509504880722949/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/05/bulkloader.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/3899509504880722949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/3899509504880722949'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/05/bulkloader.html' title='BulkLoader 下載類別'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-3818506961401006378</id><published>2009-05-27T08:23:00.000-07:00</published><updated>2009-05-27T08:39:26.817-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>PV3D 官方說明文件</title><content type='html'>PV3D官方說明文件:&lt;br /&gt;&lt;a href="http://papervision3d.googlecode.com/svn/trunk/as3/trunk/docs/index.html"&gt;http://papervision3d.googlecode.com/svn/trunk/as3/trunk/docs/index.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-3818506961401006378?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/3818506961401006378/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/05/pv3d_27.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/3818506961401006378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/3818506961401006378'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/05/pv3d_27.html' title='PV3D 官方說明文件'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-1248423005821350649</id><published>2009-05-21T03:21:00.000-07:00</published><updated>2010-11-06T04:52:24.735-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>【教學】入門篇 PV3D 基本框架建置(二)</title><content type='html'>PV3D2.0.883版本提供了的基本整合框架BasicView類別，&lt;br /&gt;由於本身是繼承AbstractView類別，&lt;br /&gt;而該類別又是從Sprite類別衍生而來，&lt;br /&gt;所以可以加入任何DisplayObject。&lt;br /&gt;BasicView類別主要封裝了BasicRenderEngine、Scene3D、Camera3D…等類別，&lt;br /&gt;運用此類別能快速建立一個PV3D的環境。&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;package  &lt;br /&gt;{&lt;br /&gt;  import flash.events.Event;  &lt;br /&gt;  import org.papervision3d.view.BasicView;  &lt;br /&gt;&lt;br /&gt;  public class PV3D_Sample_BasicView extends BasicView  &lt;br /&gt;  {&lt;br /&gt;    public function PV3D_Sample_BasicView()&lt;br /&gt;    {&lt;br /&gt;      startRendering(); &lt;br /&gt;    } &lt;br /&gt;&lt;br /&gt;    override protected function onRenderTick(event:Event = null):void&lt;br /&gt;    {&lt;br /&gt;      renderer.renderScene(scene, _camera, viewport); &lt;br /&gt;    } &lt;br /&gt;  } &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;當檔案執行成功時輸出視窗會自動秀出下列訊息：&lt;br /&gt;INFO: Papervision3D Public Beta 2.0 - Great White (December 3rd, 2008)&lt;br /&gt;INFO: Viewport autoScaleToStage : Papervision has changed the Stage scale mode.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-1248423005821350649?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/1248423005821350649/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/05/pv3d_21.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/1248423005821350649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/1248423005821350649'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/05/pv3d_21.html' title='【教學】入門篇 PV3D 基本框架建置(二)'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-9213684003358084133</id><published>2009-05-16T00:45:00.000-07:00</published><updated>2011-05-05T07:40:57.307-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>PV3D 滑鼠操控角色 + 鏡頭切換</title><content type='html'>&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;以前用C#&amp;amp;XNA寫過類似的Demo，&lt;br /&gt;在C#中對矩陣跟向量的操作個人認為比較容易，&lt;br /&gt;反倒是PV3D在使用上較不靈活。&lt;br /&gt;這是繼鍵盤操控3D角色(老鼠跑步)後，&lt;br /&gt;又一新的測試，&lt;br /&gt;利用外部載入地形與人物角色，&lt;br /&gt;加上滑鼠偵測3D場景中網格面座標，&lt;br /&gt;使人物能跟隨所設定的標記移動，&lt;br /&gt;由於地形是平面的，&lt;br /&gt;暫時用三角函數解決旋轉角度的問題，&lt;br /&gt;有試著用兩向量內積的方式求角度，&lt;br /&gt;也可得出角度，&lt;br /&gt;不過仍需判定角色前方射線與標記所在象限，&lt;br /&gt;這個問題比較麻煩，&lt;br /&gt;不過要計算高低不平的地形，&lt;br /&gt;還是需要用到，&lt;br /&gt;有空會繼續研究。&lt;br /&gt;可按"Ctrl"&amp;amp;"Shift"鍵去切換鏡頭跟隨。&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/Sg5vVgh8BeI/AAAAAAAAAFg/xa0FNYnbAz8/s1600-h/demo.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5336325023780832738" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 290px" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/Sg5vVgh8BeI/AAAAAAAAAFg/xa0FNYnbAz8/s400/demo.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://igmax.myweb.hinet.net/demo_manwalk/ManWalk.html" target="_blank"&gt;Demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-9213684003358084133?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/9213684003358084133/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/05/pv3d_16.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/9213684003358084133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/9213684003358084133'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/05/pv3d_16.html' title='PV3D 滑鼠操控角色 + 鏡頭切換'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/Sg5vVgh8BeI/AAAAAAAAAFg/xa0FNYnbAz8/s72-c/demo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-1022094385927211392</id><published>2009-05-14T20:45:00.000-07:00</published><updated>2009-05-14T20:50:06.506-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3DMax'/><title type='text'>PV3D應用DAE模型格式避免破面的幾種方法</title><content type='html'>&lt;span style="font-family:courier new;"&gt;目前在3DMax裡製作了一個機器人模型，輸出給Director來製作操控機器人行走的Demo，輸出W3D格式時，在Director環境下測試正常，想另外輸出(export)DAE模型格式給PV3D使用，結果套用到PV3D時發生了嚴重的破面問題，查了一些網路上的資訊，也試了許多方式，歸納出DAE模型格式避免破面的幾種方法:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;ol&gt;&lt;li&gt;所有匯入PV3D的模型，未避免破面只有在3D製作軟體裡控制好模型的頂點數與面數。就拿Director與PV3D來比較，PV3D的模型點數與面數一定要再簡化(優化)。&lt;/li&gt;&lt;li&gt;所有模型在建模時，儘量使用Low Polygon的作法，直接使用EditMesh編輯，避免使用布林運算，因為布林往往會產生無法控制的面和線段，並儘量保持模型在四邊形面的基礎上。&lt;/li&gt;&lt;li&gt;在PV3D裡只要是距離太近的面也會行成破面，所以要掌握各頂點間的距離，不宜太近。&lt;/li&gt;&lt;li&gt;PV3D中使用QuadrantRenderEngine，不過最好還是在建模時就避免掉。&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-1022094385927211392?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/1022094385927211392/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/05/pv3ddae.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/1022094385927211392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/1022094385927211392'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/05/pv3ddae.html' title='PV3D應用DAE模型格式避免破面的幾種方法'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-5675940681453378941</id><published>2009-05-14T10:33:00.000-07:00</published><updated>2009-06-23T11:46:28.578-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>PV3D &amp; Plane選單應用範例(三)</title><content type='html'>&lt;a href="http://lh4.ggpht.com/_a8EDl0Lwf_Q/SgxWTtR1mrI/AAAAAAAAAFY/djcW43U1ymU/s1600-h/demo.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5335734555099110066" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 285px" alt="" src="http://lh4.ggpht.com/_a8EDl0Lwf_Q/SgxWTtR1mrI/AAAAAAAAAFY/djcW43U1ymU/s400/demo.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://7-12.idv.tw/DeyingData/Flash/PV3D/demo_menu03/PlaneWall.html" target="_blank"&gt;Demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-5675940681453378941?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/5675940681453378941/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/05/pv3d-plane.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/5675940681453378941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/5675940681453378941'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/05/pv3d-plane.html' title='PV3D &amp; Plane選單應用範例(三)'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_a8EDl0Lwf_Q/SgxWTtR1mrI/AAAAAAAAAFY/djcW43U1ymU/s72-c/demo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-864868664881582451</id><published>2009-05-14T10:30:00.000-07:00</published><updated>2009-06-23T11:47:29.054-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>PV3D &amp; Plane選單應用範例(二)</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SgxVcbkQ9KI/AAAAAAAAAFQ/G71oFgLpYpg/s1600-h/demo.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5335733605451756706" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 290px" alt="" src="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SgxVcbkQ9KI/AAAAAAAAAFQ/G71oFgLpYpg/s400/demo.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://7-12.idv.tw/DeyingData/Flash/PV3D/demo_menu02/MenuDemo_01.html" target="_blank"&gt;Demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-864868664881582451?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/864868664881582451/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/05/pvd.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/864868664881582451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/864868664881582451'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/05/pvd.html' title='PV3D &amp; Plane選單應用範例(二)'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SgxVcbkQ9KI/AAAAAAAAAFQ/G71oFgLpYpg/s72-c/demo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-5386527325207699806</id><published>2009-05-14T10:28:00.000-07:00</published><updated>2009-06-23T11:48:07.080-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>PV3D &amp; Plane選單應用範例(一)</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SgxVFeoq5pI/AAAAAAAAAFI/NQXgRkM9HvQ/s1600-h/demo.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5335733211138549394" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 290px" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SgxVFeoq5pI/AAAAAAAAAFI/NQXgRkM9HvQ/s400/demo.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://7-12.idv.tw/DeyingData/Flash/PV3D/demo_menu01/demo_menu01.html" target="_blank"&gt;Demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-5386527325207699806?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/5386527325207699806/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/05/pv3d_14.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/5386527325207699806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/5386527325207699806'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/05/pv3d_14.html' title='PV3D &amp; Plane選單應用範例(一)'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SgxVFeoq5pI/AAAAAAAAAFI/NQXgRkM9HvQ/s72-c/demo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-2999473358896611032</id><published>2009-05-14T09:50:00.000-07:00</published><updated>2011-05-05T07:40:29.941-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>PV3D 在3D物體表面上畫圖</title><content type='html'>&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;這是一個利用pv3d裡InteractiveScene3DEvent與&lt;br /&gt;InteractiveUtils這兩個類加上匯入的DAE模型所做出來的範例，&lt;br /&gt;可即時在3D的物體上Draw，&lt;br /&gt;也測試了基本球體Sphere跟方體Cube，&lt;br /&gt;InteractiveUtils這個類非常方便，&lt;br /&gt;能幫我們處理了3D座標轉換的問題，&lt;br /&gt;這使得PV3D在一些3D專案的應用上又有更多花樣了。&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SgxMGEgzViI/AAAAAAAAAFA/fG9umG0rYsQ/s1600-h/demo.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5335723325701445154" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 290px" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SgxMGEgzViI/AAAAAAAAAFA/fG9umG0rYsQ/s400/demo.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://igmax.myweb.hinet.net/demo_oil/Draw3DOilExmaple.html" target="_blank"&gt;Demo &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-2999473358896611032?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/2999473358896611032/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/05/pv3d-3d.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/2999473358896611032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/2999473358896611032'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/05/pv3d-3d.html' title='PV3D 在3D物體表面上畫圖'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SgxMGEgzViI/AAAAAAAAAFA/fG9umG0rYsQ/s72-c/demo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-182602496754844638</id><published>2009-05-11T09:09:00.000-07:00</published><updated>2010-10-29T10:00:04.758-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Director'/><title type='text'>【教學】Director 中使用Lingo 3D創建基本分子模型</title><content type='html'>Cast視窗:&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/Skc7YeoEa5I/AAAAAAAAAJo/9nXObtmnKts/s1600-h/pic1.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5352311973877148562" style="WIDTH: 329px; CURSOR: hand; HEIGHT: 296px" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/Skc7YeoEa5I/AAAAAAAAAJo/9nXObtmnKts/s400/pic1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lingo程式代碼：&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;----------Movie Script:"Main"&lt;br /&gt;global resParticle    -- 分子模型資源   &lt;br /&gt;global modParticle    -- 分子模型&lt;br /&gt;global txtParticle    -- 分子貼圖&lt;br /&gt;&lt;br /&gt;on startMovie&lt;br /&gt;  member("Scene3D").resetworld()&lt;br /&gt;  --建立分子貼圖&lt;br /&gt;  txtParticle = member("Scene3D").newTexture("particleTxt",#fromCastmember,member("txt1"))&lt;br /&gt;  txtParticle.renderformat = #rgba8888           --以32bit的模式繪圖&lt;br /&gt;  --建立分子模型資源 &lt;br /&gt;  resParticle = member("Scene3D").newModelResource("ParticleRes",#Particle)&lt;br /&gt;  resParticle.texture = txtParticle              --分子的貼圖&lt;br /&gt;  resParticle.lifetime = 2000                    --分子存在的時間&lt;br /&gt;  resParticle.drag = 1                           --分子的摩擦力0-100&lt;br /&gt;  resParticle.Gravity = vector(0,0,0)            --分子地心引力&lt;br /&gt;  resParticle.Wind = vector(0,0,0)               --分子風力&lt;br /&gt;  resParticle.tweenmode = #age                   --分子顏色漸變方式(#velocity,#age)&lt;br /&gt;  resParticle.colorRange.start = rgb(255,255,255)--分子開始的顏色&lt;br /&gt;  resParticle.colorRange.end = rgb(0,0,0)        --分子結束的顏色&lt;br /&gt;  resParticle.blendrange.start = 100             --分子開始的透明度&lt;br /&gt;  resParticle.blendrange.end = 100               --分子結束的透明度&lt;br /&gt;  resParticle.sizerange.start = 5                --分子開始的大小&lt;br /&gt;  resParticle.sizerange.end = 1                  --分子結束的大小&lt;br /&gt;  resParticle.emitter.numParticles = 1000        --分子數量&lt;br /&gt;  resParticle.emitter.mode = #stream             --分子發射方式(#burst一次,#stream部分)&lt;br /&gt;  resParticle.emitter.loop = true                --分子是否重複&lt;br /&gt;  resParticle.emitter.direction = vector(0,0,0)  --分子發射方向&lt;br /&gt;  resParticle.emitter.angle = 180                --分子發射角度(0-180)&lt;br /&gt;  resParticle.emitter.distribution = #linear     --分子散發方式(#gaussian,#linear)  &lt;br /&gt;  resParticle.emitter.region = [vector(0,0,0)]   --分子發射區域&lt;br /&gt;  resParticle.emitter.path = [vector(0,0,0)]     --分子的前進路徑&lt;br /&gt;  resParticle.emitter.pathStrength = 0.0         --分子是否緊靠path前進&lt;br /&gt;  resParticle.emitter.minspeed = 40              --分子最小前進速度&lt;br /&gt;  resParticle.emitter.maxspeed = 80              --分子最大前進速度  &lt;br /&gt;  --建立分子模型&lt;br /&gt;  modParticle = member("Scene3D").newModel("ParticleRes")&lt;br /&gt;  modParticle.resource = resParticle &lt;br /&gt;  modParticle.transform.position = vector( 0, 0, 0 )  --分子位置&lt;br /&gt;  modParticle.transform.rotation = vector( 0, 0, 0 )  --分子旋轉&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;----------Frame Script:"Loop"&lt;br /&gt;on exitFrame me&lt;br /&gt;  go to the frame&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Score視窗:&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/Skc7T2-4NTI/AAAAAAAAAJg/dwmFM8eMc6E/s1600-h/pic2.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5352311894515922226" style="WIDTH: 352px; CURSOR: hand; HEIGHT: 326px" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/Skc7T2-4NTI/AAAAAAAAAJg/dwmFM8eMc6E/s400/pic2.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;執行結果:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/Skc7PZXpSDI/AAAAAAAAAJY/pyfRDCqwpbw/s1600-h/pic3.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5352311817847261234" style="WIDTH: 320px; CURSOR: hand;HEIGHT: 240px" alt="" src="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/Skc7PZXpSDI/AAAAAAAAAJY/pyfRDCqwpbw/s400/pic3.jpg" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-182602496754844638?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/182602496754844638/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/05/director-lingo-3d_4114.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/182602496754844638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/182602496754844638'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/05/director-lingo-3d_4114.html' title='【教學】Director 中使用Lingo 3D創建基本分子模型'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/Skc7YeoEa5I/AAAAAAAAAJo/9nXObtmnKts/s72-c/pic1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-3157387664317030546</id><published>2009-05-11T09:02:00.000-07:00</published><updated>2010-10-29T09:55:14.471-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Director'/><title type='text'>【教學】Director 中使用Lingo 3D創建基本柱體模型</title><content type='html'>Cast視窗：&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SkddUMHM2QI/AAAAAAAAAKw/RhZMhs0t_cs/s1600-h/pic1.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5352349283583318274" style="WIDTH: 329px; CURSOR: hand; HEIGHT: 296px" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SkddUMHM2QI/AAAAAAAAAKw/RhZMhs0t_cs/s400/pic1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lingo程式代碼：&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;----------Movie Script:"Main"&lt;br /&gt;global resCylinder    -- 柱體體模型資源   &lt;br /&gt;global modCylinder  -- 柱體模型&lt;br /&gt;&lt;br /&gt;on startmovie&lt;br /&gt;  member("Scene3D").resetworld()&lt;br /&gt;  --建立柱體模型資源 &lt;br /&gt;  resCylinder = member("Scene3D").newModelResource("CylinderRes",#Cylinder,#front)&lt;br /&gt;  resCylinder.height = 100          --柱體高度&lt;br /&gt;  resCylinder.topRadius = 25        --柱體的頂面半徑 &lt;br /&gt;  resCylinder.bottomRadius = 25     --柱體的底面半徑&lt;br /&gt;  resCylinder.startAngle = 0        --柱體的起始角度&lt;br /&gt;  resCylinder.endAngle = 360        --柱體的結束角度&lt;br /&gt;  resCylinder.topCap = true         --柱體的頂面是否封閉&lt;br /&gt;  resCylinder.bottomCap = true      --柱體的底面是否封閉&lt;br /&gt;  resCylinder.resolution = 24       --柱體的解析度數(越高越平滑)&lt;br /&gt;  resCylinder.numSegments = 2       --柱體的區段數&lt;br /&gt;  --建立柱體模型&lt;br /&gt;  modCylinder = member("Scene3D").newModel("CylinderRes")&lt;br /&gt;  modCylinder.resource = resCylinder &lt;br /&gt;  modCylinder.transform.position = vector( 0, 0, 0 )     --柱體位置&lt;br /&gt;  modCylinder.transform.rotation = vector( 30, 15, 15 )  --柱體旋轉&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;----------Frame Script:"Loop"&lt;br /&gt;on exitFrame me&lt;br /&gt;  go to the frame&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Score視窗：&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/Skdc7edfekI/AAAAAAAAAKo/kMQ2ljY9y0s/s1600-h/pic2.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5352348859011922498" style="WIDTH: 352px; CURSOR: hand; HEIGHT: 326px" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/Skdc7edfekI/AAAAAAAAAKo/kMQ2ljY9y0s/s400/pic2.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;執行結果：&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SkdcthWOUQI/AAAAAAAAAKg/M4l2pw9onDc/s1600-h/pic3.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5352348619268575490" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 239px" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SkdcthWOUQI/AAAAAAAAAKg/M4l2pw9onDc/s400/pic3.jpg" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-3157387664317030546?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/3157387664317030546/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/05/1-movie-scriptmain-2-global-rescylinder.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/3157387664317030546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/3157387664317030546'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/05/1-movie-scriptmain-2-global-rescylinder.html' title='【教學】Director 中使用Lingo 3D創建基本柱體模型'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SkddUMHM2QI/AAAAAAAAAKw/RhZMhs0t_cs/s72-c/pic1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-529400398040775918</id><published>2009-05-11T08:14:00.000-07:00</published><updated>2010-10-29T09:52:20.649-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Director'/><title type='text'>【教學】Director 中使用Lingo 3D創建基本球體模型</title><content type='html'>Cast視窗：&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SkdZqO699KI/AAAAAAAAAKY/-WgNrbSKdq4/s1600-h/pic1.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5352345264247927970" style="WIDTH: 328px; CURSOR: hand; HEIGHT: 294px" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SkdZqO699KI/AAAAAAAAAKY/-WgNrbSKdq4/s400/pic1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lingo程式代碼:&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;----------Movie Script:"main"&lt;br /&gt;global resSphere    -- 球體模型資源   &lt;br /&gt;global modSphere    -- 球體模型&lt;br /&gt;on startmovie&lt;br /&gt;  member("Scene3D").resetworld()&lt;br /&gt;  --建立球體模型資源&lt;br /&gt;  resSphere = member("Scene3D").newModelResource( "SphereRes", #Sphere, #front )&lt;br /&gt;  resSphere.radius = 50           --球體半徑&lt;br /&gt;  resSphere.startAngle = 0        --球體的起始角度 &lt;br /&gt;  resSphere.endAngle = 360        --球體的結束角度&lt;br /&gt;  resSphere.resolution = 24       --球體的解析度數(越高越平滑)&lt;br /&gt;  --建立球體模型&lt;br /&gt;  modSphere = member("Scene3D").newModel("SphereRes")&lt;br /&gt;  modSphere.resource = resSphere&lt;br /&gt;  modSphere.transform.position = vector( 0, 0, 0 )  --球體位置&lt;br /&gt;  modSphere.transform.rotation = vector( 0, 0, 0 )  --球體旋轉&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;----------Frame Script:"Loop"&lt;br /&gt;on exitFrame me&lt;br /&gt;  go to the frame&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Score視窗：&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SkdZeswuPJI/AAAAAAAAAKQ/sySXnbiy0iM/s1600-h/pic2.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5352345066099588242" style="WIDTH: 352px; CURSOR: hand; HEIGHT: 326px" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SkdZeswuPJI/AAAAAAAAAKQ/sySXnbiy0iM/s400/pic2.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;執行結果：&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SkdZOUm9ShI/AAAAAAAAAKI/gvNZd9ozUso/s1600-h/pic3.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5352344784738273810" style="WIDTH: 319px; CURSOR: hand; HEIGHT: 239px" alt="" src="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SkdZOUm9ShI/AAAAAAAAAKI/gvNZd9ozUso/s400/pic3.jpg" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-529400398040775918?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/529400398040775918/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/05/director-lingo-3d_7035.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/529400398040775918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/529400398040775918'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/05/director-lingo-3d_7035.html' title='【教學】Director 中使用Lingo 3D創建基本球體模型'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SkdZqO699KI/AAAAAAAAAKY/-WgNrbSKdq4/s72-c/pic1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-3785824228568429646</id><published>2009-05-11T07:34:00.000-07:00</published><updated>2010-10-29T09:49:16.121-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Director'/><title type='text'>【教學】Director 中使用Lingo 3D創建基本方體模型</title><content type='html'>Cast視窗：&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SkWUnzvUAJI/AAAAAAAAAJQ/3JCenh9Mwn8/s1600-h/pic1.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5351847143824162962" style="WIDTH: 329px; CURSOR: hand; HEIGHT: 296px" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SkWUnzvUAJI/AAAAAAAAAJQ/3JCenh9Mwn8/s400/pic1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lingo程式代碼：&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;-----Movie Script:"Main"&lt;br /&gt;global resBox    -- 方體模型資源   &lt;br /&gt;global modBox    -- 方體模型&lt;br /&gt;&lt;br /&gt;on startmovie&lt;br /&gt;  member("Scene3D").resetworld()&lt;br /&gt;  --建立方塊模型資源&lt;br /&gt;  resBox = member("Scene3D").newModelResource( "BoxRes", #Box, #front )&lt;br /&gt;  resBox.length = 60           --方體長度&lt;br /&gt;  resBox.width = 60            --方體寬的 &lt;br /&gt;  resBox.height = 60           --方體高度&lt;br /&gt;  resBox.lengthVertices = 2    --方體長向的頂點數&lt;br /&gt;  resBox.widthVertices = 2     --方體寬向的頂點數&lt;br /&gt;  resBox.heightVertices = 2    --方體高向的頂點數&lt;br /&gt;  resBox.top = true            --設定頂面為封閉&lt;br /&gt;  resBox.bottom = true         --設定下面為封閉&lt;br /&gt;  resBox.left = true           --設定左面為封閉&lt;br /&gt;  resBox.right = true          --設定右面為封閉&lt;br /&gt;  resBox.front = true          --設定前面為封閉&lt;br /&gt;  resBox.back = true           --設定後面為封閉&lt;br /&gt;  --建立方塊模型&lt;br /&gt;  modBox = member("Scene3D").newModel("BoxRes")&lt;br /&gt;  modBox.resource = resBox&lt;br /&gt;  modBox.transform.position = vector( 0, 0, 0 )&lt;br /&gt;  modBox.transform.rotation = vector( 20, 30, 20 )&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;-----Frame Script:"Loop"&lt;br /&gt;on exitFrame me&lt;br /&gt;  go to the frame&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Score視窗：&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SkWUircuDSI/AAAAAAAAAJI/OS7g5ji8XwQ/s1600-h/pic2.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5351847055699348770" style="WIDTH: 352px; CURSOR: hand; HEIGHT: 326px" alt="" src="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SkWUircuDSI/AAAAAAAAAJI/OS7g5ji8XwQ/s400/pic2.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;執行結果：&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SkWUdPqPtzI/AAAAAAAAAJA/Rv9RBeua3P8/s1600-h/pic3.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5351846962340542258" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 240px" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SkWUdPqPtzI/AAAAAAAAAJA/Rv9RBeua3P8/s400/pic3.jpg" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-3785824228568429646?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/3785824228568429646/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/05/director-lingo-3d_11.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/3785824228568429646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/3785824228568429646'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/05/director-lingo-3d_11.html' title='【教學】Director 中使用Lingo 3D創建基本方體模型'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SkWUnzvUAJI/AAAAAAAAAJQ/3JCenh9Mwn8/s72-c/pic1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-612495746010212302</id><published>2009-05-10T09:45:00.000-07:00</published><updated>2010-10-29T09:45:56.719-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Director'/><title type='text'>【教學】Director 中使用Lingo 3D創建基本平面模型</title><content type='html'>Cast視窗：&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SkdJN_Uc8MI/AAAAAAAAAKA/ZTYkSQ5cJAo/s1600-h/demo_pic1.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5352327186837467330" style="WIDTH: 330px; CURSOR: hand; HEIGHT: 298px" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SkdJN_Uc8MI/AAAAAAAAAKA/ZTYkSQ5cJAo/s400/demo_pic1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lingo程式代碼：&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;----------Movie Script:"main"&lt;br /&gt;global resPlane  -- 平面模型資源   &lt;br /&gt;global modPlane -- 平面模型&lt;br /&gt;&lt;br /&gt;on startmovie&lt;br /&gt;  member("Scene3D").resetworld()&lt;br /&gt;  --建立平面模型資源&lt;br /&gt;  resPlane = member("Scene3D").newModelResource( "PlaneRes", #Plane, #both )&lt;br /&gt;  resPlane.length = 120           --平面長度&lt;br /&gt;  resPlane.width = 120            --平面寬的 &lt;br /&gt;  resPlane.lengthVertices = 2  --長的頂點數&lt;br /&gt;  resPlane.widthVertices = 2   --寬的頂點數&lt;br /&gt;  --建立平面模型&lt;br /&gt;  modPlane = member("Scene3D").newModel("PlaneRes")&lt;br /&gt;  modPlane.resource = resPlane&lt;br /&gt;  modPlane.transform.position = vector( 0, 0, 0 )&lt;br /&gt;  modPlane.transform.rotation = vector( 0, 0, 0 )&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;&lt;br /&gt;----------Frame Script:"Loop"&lt;br /&gt;on exitFrame me&lt;br /&gt;  go to the frame&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Score視窗：&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SkdJJtnmFtI/AAAAAAAAAJ4/KsLgNynhtmw/s1600-h/demo_pic2.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5352327113366443730" style="WIDTH: 352px; CURSOR: hand; HEIGHT: 326px" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SkdJJtnmFtI/AAAAAAAAAJ4/KsLgNynhtmw/s400/demo_pic2.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;執行結果：&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SkdJFN14xeI/AAAAAAAAAJw/chQWznRplH0/s1600-h/demo_pic3.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5352327036116977122" style="WIDTH: 316px; CURSOR: hand; HEIGHT: 238px" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SkdJFN14xeI/AAAAAAAAAJw/chQWznRplH0/s400/demo_pic3.jpg" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-612495746010212302?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/612495746010212302/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/05/director-lingo-3d.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/612495746010212302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/612495746010212302'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/05/director-lingo-3d.html' title='【教學】Director 中使用Lingo 3D創建基本平面模型'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SkdJN_Uc8MI/AAAAAAAAAKA/ZTYkSQ5cJAo/s72-c/demo_pic1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-9120982486623220461</id><published>2009-05-08T08:57:00.000-07:00</published><updated>2009-06-23T20:14:55.088-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>學習3D程式的經驗</title><content type='html'>&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;很多新手都會問，&lt;br /&gt;該如何進入3D的開發領域呢？&lt;br /&gt;其實並不難，&lt;br /&gt;就像看場棒球賽，&lt;br /&gt;總要先了解棒球的遊戲規則，&lt;br /&gt;才能享受棒球比賽的樂趣，&lt;br /&gt;這裡提供出個人的學習3D程式的經驗流程，&lt;br /&gt;希望能對大家有所幫助：&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;首先要找一套能提供3DAPI或支援3D引擎的程式開發工具，&lt;br /&gt;如(Director Lingo3D、FlashActionScript Papervision3D、&lt;br /&gt;C# XNA、VC++ DirectX等..)。&lt;br /&gt;程式語言只是開發工具，&lt;br /&gt;任選一種適合自己的來學習。&lt;br /&gt;要開發3D的專案，&lt;br /&gt;基本的程式基礎是要會的(例如變數、陣列、函式、迴圈..等)，&lt;br /&gt;由於現在支援3D的程式語言都已是物件導向，&lt;br /&gt;所以具備這樣的觀念是必須的。&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;學習3D最好能先學會一種3D建模的工具軟體，&lt;br /&gt;如﹝3DMax、Maya..等﹞，&lt;br /&gt;因為建模當中，&lt;br /&gt;很多3D的觀念是相通的，&lt;br /&gt;像是頂點Vertices、邊線Edge、網格Mesh、模型Model、&lt;br /&gt;群組Group、3D空間座標、材質Material、貼圖Texture、&lt;br /&gt;燈光Light、攝影機Camera等，&lt;br /&gt;學會基本建模的概念對日後撰寫3D程式絕對有加分作用。&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;這裡提供大家一個觀念，&lt;br /&gt;"3D"本身只是一個觀念(規則)，&lt;br /&gt;跟你用甚麼語言來開發其實沒多大的關係，&lt;br /&gt;瞭解3D圖學的數學運算原理，&lt;br /&gt;如(向量運算、矩陣運算...等)，&lt;br /&gt;這裡不用擔心它太複雜，&lt;br /&gt;因為現在任何的3D引擎或API都已經提供相當完整的函式，&lt;br /&gt;只要知道如何運用就可，&lt;br /&gt;運算過程就交給程式去處理.&lt;br /&gt;也就是要知道如何"套"比較重要，&lt;br /&gt;因為有了觀念，&lt;br /&gt;去學任何一種程式開發工具，&lt;br /&gt;就能很快知道要如何"套"跟怎麼"套"了。&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;接下來就可找一些範例來實作，&lt;br /&gt;開始可先套用，&lt;br /&gt;再慢慢理解別人的code，&lt;br /&gt;到後來就是看到效果就知如何下手，&lt;br /&gt;當然這個過程可是非常漫長，&lt;br /&gt;經驗是慢慢累積的，&lt;br /&gt;多看多問是學習的不二法門。&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-9120982486623220461?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/9120982486623220461/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/05/3d.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/9120982486623220461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/9120982486623220461'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/05/3d.html' title='學習3D程式的經驗'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-1932058666799610379</id><published>2009-05-06T07:54:00.000-07:00</published><updated>2009-07-25T02:11:00.611-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>PV3D &amp; Jiglib 物理引擎範例</title><content type='html'>&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;特別研究了一下好用的Jiglib物理引擎，&lt;br /&gt;他與PV3D做搭配非常簡易，&lt;br /&gt;只需設定JBOX與PhysicsSystem&lt;br /&gt;就能輕輕鬆鬆為建立好的模型加上物理性質，&lt;br /&gt;本例主要測試的是JBOX，&lt;br /&gt;所以自己做了一個簡易的骰子，&lt;br /&gt;讓他與桌面都設上物理性質，&lt;br /&gt;便可產生模擬物理碰撞的效果，&lt;br /&gt;此外額外增加拖曳骰子跟基本點數判斷。&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SgGnqatF2KI/AAAAAAAAAE4/laXDkE87THo/s1600-h/demo.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5332727780948170914" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 300px" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SgGnqatF2KI/AAAAAAAAAE4/laXDkE87THo/s400/demo.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://7-12.idv.tw/DeyingData/Flash/PV3D/demo_dice/DiceSample.html" target="_blank"&gt;Demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-1932058666799610379?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/1932058666799610379/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/05/pv3d-jiglib.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/1932058666799610379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/1932058666799610379'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/05/pv3d-jiglib.html' title='PV3D &amp; Jiglib 物理引擎範例'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SgGnqatF2KI/AAAAAAAAAE4/laXDkE87THo/s72-c/demo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-8968163694028773155</id><published>2009-05-05T09:39:00.000-07:00</published><updated>2009-07-25T02:07:10.244-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>PV3D &amp; as3dmod翻書效果模擬</title><content type='html'>&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;網路上一些翻書的範例大多都是2D的，&lt;br /&gt;運用遮罩的方式去模擬，&lt;br /&gt;研究了PV3D一陣子，&lt;br /&gt;想測試PV3D與as3dmod，&lt;br /&gt;利用as3dmod變形類別來修改物件的Mesh，&lt;br /&gt;已達到真正的3D翻書,&lt;br /&gt;以下是測試結果：&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SgBsZ2MSK-I/AAAAAAAAAEw/kAPID3K1TFI/s1600-h/demo.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5332381150106233826" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 285px" alt="" src="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SgBsZ2MSK-I/AAAAAAAAAEw/kAPID3K1TFI/s400/demo.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://7-12.idv.tw/DeyingData/Flash/PV3D/demo_book/BookDemo.html" target="_blank"&gt;Demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-8968163694028773155?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/8968163694028773155/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/05/pv3d_05.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/8968163694028773155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/8968163694028773155'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/05/pv3d_05.html' title='PV3D &amp; as3dmod翻書效果模擬'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SgBsZ2MSK-I/AAAAAAAAAEw/kAPID3K1TFI/s72-c/demo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-3029891167162189308</id><published>2009-05-04T09:11:00.000-07:00</published><updated>2011-05-05T07:35:53.690-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>PV3D &amp; DAE應用範例(四)</title><content type='html'>&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;這是使用Low Polygon的建模作法，&lt;br /&gt;樹幹使用三角面，&lt;br /&gt;樹葉部份是使用Plane貼上png透空貼圖。&lt;br /&gt;測試3D場景內樹木的作法，&lt;br /&gt;測試外部載入Flash內，&lt;br /&gt;之後打造更大場景時，&lt;br /&gt;可當作元件匯入：&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/Sf8T-xBhg4I/AAAAAAAAAEo/aLjbjIOYjXc/s1600-h/demo.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5332002452862501762" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 290px" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/Sf8T-xBhg4I/AAAAAAAAAEo/aLjbjIOYjXc/s400/demo.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://igmax.myweb.hinet.net/demo_tree/TreeExample.html" target="_blank"&gt;Demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-3029891167162189308?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/3029891167162189308/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/05/pv3d-dae_04.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/3029891167162189308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/3029891167162189308'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/05/pv3d-dae_04.html' title='PV3D &amp; DAE應用範例(四)'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_a8EDl0Lwf_Q/Sf8T-xBhg4I/AAAAAAAAAEo/aLjbjIOYjXc/s72-c/demo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-3981701766297654116</id><published>2009-05-02T08:17:00.000-07:00</published><updated>2011-05-05T07:35:36.617-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>PV3D &amp; DAE應用範例(三)</title><content type='html'>&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;這個範例是載入自己在3DMax裡花了兩天所拉出的房子模型，&lt;br /&gt;模型面數掌握在1000面以內，&lt;br /&gt;﹝Vertext:479，Face:961﹞，&lt;br /&gt;以便Flash在執行上能不吃太多CPU，&lt;br /&gt;以下是測試結果：&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SfxsrfLYi2I/AAAAAAAAAEg/6qkIkc6hx9Y/s1600-h/demo.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5331255553259244386" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 285px" alt="" src="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SfxsrfLYi2I/AAAAAAAAAEg/6qkIkc6hx9Y/s400/demo.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://igmax.myweb.hinet.net/demo_house/demo_house.html" target="_blank"&gt;Demo&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-3981701766297654116?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/3981701766297654116/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/05/pv3d-dae.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/3981701766297654116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/3981701766297654116'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/05/pv3d-dae.html' title='PV3D &amp; DAE應用範例(三)'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SfxsrfLYi2I/AAAAAAAAAEg/6qkIkc6hx9Y/s72-c/demo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-3769518051968166647</id><published>2009-05-01T22:47:00.000-07:00</published><updated>2009-06-21T05:01:57.399-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>【教學】入門篇 PV3D 下載與安裝設定</title><content type='html'>&lt;span style="font-family:arial;"&gt;Step1：&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;1.先連上&lt;a href="http://code.google.com/p/papervision3d/updates/list" target="_blank"&gt;http://code.google.com/p/papervision3d/updates/list&lt;/a&gt;。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;2.在上列選取第二個﹝Downloads﹞，出現如下畫面。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;3.找到Papervision3d最新版本來下載。&lt;/span&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SfvnaZ2FRXI/AAAAAAAAADQ/obOprveOTW4/s1600-h/pic1.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5331109024723453298" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 353px" alt="" src="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SfvnaZ2FRXI/AAAAAAAAADQ/obOprveOTW4/s400/pic1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Step2：&lt;br /&gt;1.點選最新版本Papervision3D_2.0.883.zip(目前為止最新版).準備下載。&lt;/span&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SfvnuU6XjwI/AAAAAAAAADY/NpUb3i7pr5s/s1600-h/pic2.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5331109366996635394" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 335px" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SfvnuU6XjwI/AAAAAAAAADY/NpUb3i7pr5s/s400/pic2.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Step3：&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;1.選取欲下載儲存PV3D檔案的資料夾路徑﹝D：﹞&lt;/span&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/Sfvn2qllQ1I/AAAAAAAAADg/MwVUirlEeFY/s1600-h/pic3.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5331109510253986642" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 255px" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/Sfvn2qllQ1I/AAAAAAAAADg/MwVUirlEeFY/s400/pic3.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Step4：&lt;br /&gt;1.下載至﹝D：﹞。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;2.PV3D壓縮檔﹝ZIP﹞準備解壓縮至自訂資料夾。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;3.自訂資料夾﹝PV3D_2.0.883﹞資料名稱可自取。&lt;/span&gt;&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SfvoQObTysI/AAAAAAAAADo/kMX9cNVI83E/s1600-h/pic5.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5331109949371304642" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 320px" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SfvoQObTysI/AAAAAAAAADo/kMX9cNVI83E/s400/pic5.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Step5：&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;1.開啟自訂資料夾。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;2.查看裡面內容，完成下載。&lt;/span&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SfvoY6CfUMI/AAAAAAAAADw/BK49kQxwpxY/s1600-h/pic6.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5331110098517315778" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 315px" alt="" src="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SfvoY6CfUMI/AAAAAAAAADw/BK49kQxwpxY/s400/pic6.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Step6：&lt;br /&gt;1.準備設定Flash內的連結，打開Flash。&lt;br /&gt;&lt;/span&gt;&lt;a href="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SfvoevvMWPI/AAAAAAAAAD4/JSuDPJj0A_U/s1600-h/pic7.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5331110198831241458" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 310px" alt="" src="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SfvoevvMWPI/AAAAAAAAAD4/JSuDPJj0A_U/s400/pic7.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Step7：&lt;br /&gt;1.開一個新檔案。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;2.選取編輯-&gt;偏好設定。&lt;br /&gt;&lt;/span&gt;&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/Sfvolzn80eI/AAAAAAAAAEA/mD0Ddh9BMIg/s1600-h/pic8.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5331110320133689826" style="WIDTH: 327px; CURSOR: hand; HEIGHT: 400px" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/Sfvolzn80eI/AAAAAAAAAEA/mD0Ddh9BMIg/s400/pic8.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Step8：&lt;br /&gt;1.類別選取ActionScript。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;2.語言選取ActionScript3.0設定...。&lt;br /&gt;&lt;/span&gt;&lt;a href="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/Sfvor-LbNsI/AAAAAAAAAEI/HgTRB_q_AIQ/s1600-h/pic9.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5331110426046052034" style="WIDTH: 381px; CURSOR: hand; HEIGHT: 400px" alt="" src="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/Sfvor-LbNsI/AAAAAAAAAEI/HgTRB_q_AIQ/s400/pic9.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Step9：&lt;br /&gt;1.在包含ActionScript類別檔案的資料夾，先點選"+"。&lt;br /&gt;2.再點選瀏覽資料夾。&lt;br /&gt;3.選取我們剛剛下載的自訂資料夾(PV3D_2.0.883)。&lt;br /&gt;4.按下確定。&lt;br /&gt;&lt;/span&gt;&lt;a href="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SfvoxtN4j8I/AAAAAAAAAEQ/cjhq84236rc/s1600-h/pic10.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5331110524572176322" style="WIDTH: 337px; CURSOR: hand; HEIGHT: 400px" alt="" src="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SfvoxtN4j8I/AAAAAAAAAEQ/cjhq84236rc/s400/pic10.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Step10：&lt;br /&gt;1.完成PV3D下載及安裝設定。&lt;br /&gt;&lt;/span&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/Sfvo3p0CCvI/AAAAAAAAAEY/M6KQp3Ca0aY/s1600-h/pic11.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5331110626737654514" style="WIDTH: 337px; CURSOR: hand; HEIGHT: 400px" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/Sfvo3p0CCvI/AAAAAAAAAEY/M6KQp3Ca0aY/s400/pic11.jpg" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-3769518051968166647?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/3769518051968166647/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/05/pv3d.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/3769518051968166647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/3769518051968166647'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/05/pv3d.html' title='【教學】入門篇 PV3D 下載與安裝設定'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_a8EDl0Lwf_Q/SfvnaZ2FRXI/AAAAAAAAADQ/obOprveOTW4/s72-c/pic1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-2017505670655474695</id><published>2009-04-30T18:58:00.000-07:00</published><updated>2009-06-24T21:27:06.504-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Director'/><title type='text'>Director 中使用ActiveX控制項介紹</title><content type='html'>&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;安裝在Windows作業系統下的ActiveX控制項，&lt;br /&gt;可以由控制附加程式(Control Xtra)嵌入Director的電影(movie)中，&lt;br /&gt;透過這項技術我們可執行ActiveX所賦予的功能。&lt;br /&gt;在使用ActiveX 控制項前，&lt;br /&gt;一定要先確定該控制項已經完整(註冊)安裝在系統中。&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;ActiveX控制項Property的使用：&lt;br /&gt;ActiveX控制項以屬性來描述它的資訊與定義它的狀態。&lt;/span&gt;&lt;br /&gt;&lt;table width="400" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Lingo語法:&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;set the 屬性名稱 of sprtite 編號 to 設定值&lt;/strong&gt;&lt;br /&gt;或&lt;br /&gt;&lt;strong&gt;sprite(編號).屬性編號 = 設定值&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;ActiveX 控制項 Method的使用：&lt;br /&gt;ActiveX控制項使用方法﹝Method﹞來描述它的機能,也就是一個函式。&lt;/span&gt;&lt;br /&gt;&lt;table width="400" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Lingo語法:&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;&lt;strong&gt;put 方法名稱(sprite編號,引數1,...) into 變數名稱&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;註:變數可存放傳回值&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;ActiveX 控制項 Event的使用：&lt;br /&gt;ActiveX控制項的事件(event)與 Director的事件是可以看作一樣的，&lt;br /&gt;只要在Director的電影中建立相對應的處理函式就可以偵聽到事件。&lt;/span&gt;&lt;br /&gt;&lt;table width="400" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Lingo語法:&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;on 事件名稱 &lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;敘述...&lt;br /&gt;end&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-2017505670655474695?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/2017505670655474695/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/04/director-activex.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/2017505670655474695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/2017505670655474695'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/04/director-activex.html' title='Director 中使用ActiveX控制項介紹'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-5719554869924288865</id><published>2009-04-29T09:43:00.000-07:00</published><updated>2009-06-23T19:15:11.455-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Director'/><title type='text'>Director 的Lingo語言物件導向程式介紹</title><content type='html'>&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Director的Lingo程式語言提供了&lt;br /&gt;(OOP：ObjectOrientedProgramming)，&lt;br /&gt;物件導向的程式設計使用物件的觀念來設計專案，&lt;br /&gt;可以節省很多時間，&lt;br /&gt;並在程式的維護上更有效率。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;物件Object是資料與使用這些資料的介面的包裝，&lt;br /&gt;是用類別所宣告的實體Instance。介面包括：&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;屬性(Properties)&lt;br /&gt;&lt;/strong&gt;是物件資料的存取介面，用來讀取物件資料或設定物件的特性。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;方法(Method)&lt;br /&gt;&lt;/strong&gt;對應Lingo裡的Handle，是改變物件資料的介面。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;事件(Event)&lt;br /&gt;&lt;/strong&gt;是物件與環境互動的介面，用來提供物件對外界訊息的反應。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;類別Class是物件的原型，&lt;br /&gt;它的屬性、行為及事件都會被用這個原型的物件所擁有，&lt;br /&gt;此外類別可以繼承Inhert別的類別或是被別的類別繼承。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Lingo與其他物件導向語言對照表&lt;/strong&gt;&lt;br /&gt;&lt;table style="WIDTH: 416px; HEIGHT: 208px" width="416" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="192"&gt;&lt;div align="center"&gt;&lt;strong&gt;Lingo語言&lt;/strong&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="192"&gt;&lt;div align="center"&gt;&lt;strong&gt;其他語言&lt;/strong&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Ancestor Scripts(祖系腳本)&lt;/td&gt;&lt;td&gt;Super Class 或 Base Class&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Parent Scripts(父系腳本)&lt;/td&gt;&lt;td&gt;類別Class&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Child Objects(子系物件)&lt;/td&gt;&lt;td&gt;實體Instance&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Propert Variables(屬性變數)&lt;/td&gt;&lt;td&gt;Insatance Variables&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Handles(方法處理函式)&lt;/td&gt;&lt;td&gt;方法Methods&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-5719554869924288865?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/5719554869924288865/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/04/director-lingo.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/5719554869924288865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/5719554869924288865'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/04/director-lingo.html' title='Director 的Lingo語言物件導向程式介紹'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-4193932963152166226</id><published>2009-04-29T05:03:00.000-07:00</published><updated>2009-04-29T08:34:28.815-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Director'/><title type='text'>Director 3D基本環境建置</title><content type='html'>&lt;span style="font-family:arial;"&gt;&lt;strong&gt;步驟1:&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;1.&lt;/span&gt;選取File。&lt;br /&gt;&lt;span style="font-family:arial;"&gt;2.&lt;/span&gt;開新檔案(New一個Movie檔)。&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SfhoUX5dHrI/AAAAAAAAAB4/yV32IJvuiw4/s1600-h/pic1.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5330124858214653618" style="WIDTH: 390px; CURSOR: hand; HEIGHT: 250px" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SfhoUX5dHrI/AAAAAAAAAB4/yV32IJvuiw4/s400/pic1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;strong&gt;步驟2：&lt;/strong&gt;&lt;br /&gt;1.在castmember視窗中選取member(1)。&lt;br /&gt;2.選取Menu上的Insert 。&lt;br /&gt;3.下拉選單中選取Media Element。&lt;br /&gt;4.下拉選單中選取ShockWave 3D。&lt;/span&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/Sfhod-bO7MI/AAAAAAAAACA/Vc0aNPOhx7Q/s1600-h/pic2.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5330125023175699650" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 320px" alt="" src="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/Sfhod-bO7MI/AAAAAAAAACA/Vc0aNPOhx7Q/s400/pic2.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;strong&gt;步驟3：&lt;/strong&gt;&lt;br /&gt;1.出現Shockwave3D視窗，輸入Member名稱"3DWorld”。&lt;/span&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/Sfhokc35QuI/AAAAAAAAACI/FOhgj0fBMXY/s1600-h/pic3.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5330125134428193506" style="WIDTH: 360px; CURSOR: hand; HEIGHT: 400px" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/Sfhokc35QuI/AAAAAAAAACI/FOhgj0fBMXY/s400/pic3.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;strong&gt;步驟4：&lt;/strong&gt;&lt;br /&gt;1.此時Cast視窗內即出現Member("3DWorld")。&lt;br /&gt;&lt;/span&gt;&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SfhpVPZ2T-I/AAAAAAAAADI/b-vPVNz6V-Y/s1600-h/pic4.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5330125972626100194" style="WIDTH: 340px; CURSOR: hand; HEIGHT: 200px" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SfhpVPZ2T-I/AAAAAAAAADI/b-vPVNz6V-Y/s400/pic4.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;strong&gt;步驟5：&lt;/strong&gt;&lt;br /&gt;1.將Cast視窗內Member(1)拖曳至Stage視窗內。&lt;/span&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SfhpQtNqExI/AAAAAAAAADA/YEIHkoR8Exw/s1600-h/pic5.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5330125894728684306" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 310px" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SfhpQtNqExI/AAAAAAAAADA/YEIHkoR8Exw/s400/pic5.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;strong&gt;步驟6：&lt;/strong&gt;&lt;br /&gt;1.於Score視窗內的Frame Script Channel上點擊滑鼠右鍵，&lt;br /&gt;於彈出視窗內選擇FrameScript，按滑鼠左鍵確定。&lt;/span&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SfhpLmRU57I/AAAAAAAAAC4/yVmG3UpfeKU/s1600-h/pic6.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5330125806965680050" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 300px" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SfhpLmRU57I/AAAAAAAAAC4/yVmG3UpfeKU/s400/pic6.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;strong&gt;步驟7：&lt;/strong&gt;&lt;br /&gt;1.隨即彈出Script編輯視窗，輸入Member名稱”Loop”，於視窗內輸入&lt;br /&gt;go to the frame。(讓程式不斷執行)&lt;br /&gt;&lt;/span&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SfhpGSfOM-I/AAAAAAAAACw/gr0T--YBLfE/s1600-h/pic7.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5330125715755906018" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 200px" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SfhpGSfOM-I/AAAAAAAAACw/gr0T--YBLfE/s400/pic7.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;strong&gt;步驟8：&lt;/strong&gt;&lt;br /&gt;1.Cast視窗內即出現Member("Loop")。於member(3)內雙擊滑鼠。&lt;/span&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SfhpCghWsNI/AAAAAAAAACo/z05eGngg0m8/s1600-h/pic8.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5330125650803470546" style="WIDTH: 340px; CURSOR: hand; HEIGHT: 150px" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SfhpCghWsNI/AAAAAAAAACo/z05eGngg0m8/s400/pic8.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;strong&gt;步驟9：&lt;/strong&gt;&lt;br /&gt;1.彈出Script編輯視窗,點擊Script視窗內”+號”，新增一個Script。&lt;br /&gt;2.於Propert視窗內將Script的屬性更改為Movie。&lt;/span&gt;&lt;a href="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/Sfho-KvFmlI/AAAAAAAAACg/EJY-tokJoxA/s1600-h/pic9.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5330125576236014162" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 200px" alt="" src="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/Sfho-KvFmlI/AAAAAAAAACg/EJY-tokJoxA/s400/pic9.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;strong&gt;步驟10：&lt;/strong&gt;&lt;br /&gt;1.將Cast視窗內Member(3)的名稱輸入為"Main”，繼續編輯該內容。&lt;/span&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/Sfho4qa3GrI/AAAAAAAAACY/wghaoIkwxA4/s1600-h/pic10.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5330125481661897394" style="WIDTH: 340px; CURSOR: hand; HEIGHT: 200px" alt="" src="http://4.bp.blogspot.com/_a8EDl0Lwf_Q/Sfho4qa3GrI/AAAAAAAAACY/wghaoIkwxA4/s400/pic10.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;strong&gt;步驟11：&lt;br /&gt;&lt;/strong&gt;1.於Script視窗內輸入member(“3DWorld”).resetworld()，即完成基本3D環境創建。&lt;/span&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SfhozZhpHmI/AAAAAAAAACQ/ShRgLd2ULfY/s1600-h/pic11.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5330125391227592290" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 200px" alt="" src="http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SfhozZhpHmI/AAAAAAAAACQ/ShRgLd2ULfY/s400/pic11.jpg" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-4193932963152166226?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/4193932963152166226/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/04/director-3d.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/4193932963152166226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/4193932963152166226'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/04/director-3d.html' title='Director 3D基本環境建置'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_a8EDl0Lwf_Q/SfhoUX5dHrI/AAAAAAAAAB4/yV32IJvuiw4/s72-c/pic1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-4187682476133891525</id><published>2009-04-28T09:59:00.000-07:00</published><updated>2009-06-23T11:26:32.690-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Director'/><title type='text'>Director Lingo 3D概述</title><content type='html'>&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Director是一套功能強大的多媒體編輯工具。&lt;br /&gt;早期在多媒體光碟上應用很廣，&lt;br /&gt;很多CAI的互動教材都是由Director製作，&lt;br /&gt;也能製作遊戲...等。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Director跟Flash很像的就是Flash有ActionScript程式語言，&lt;br /&gt;而Director有Lingo程式語言作為編輯，&lt;br /&gt;而在Director 8版以後，&lt;br /&gt;能讓Director產生的影片能在網際網路上執行，&lt;br /&gt;(Shockwave就是讓Director產生的格式可以在網路上播放的關鍵)，&lt;br /&gt;在Director 8.5版以後革命性的產生變化，&lt;br /&gt;增加了3D功能(Directtor的3D功能是支援3D硬體加速的)，&lt;br /&gt;這項和intel合作的技術，&lt;br /&gt;以網路3D為號召，&lt;br /&gt;讓開發者在設計製作專案時，&lt;br /&gt;可以發揮3D素材的優勢(虛擬實境，3D游戲，3D互動網頁)，&lt;br /&gt;目前Director 11.5的版本已經支援DirectX9.0，&lt;br /&gt;可以說在3D的效能上大大的提升。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3D模型(Model)構成了大多數程式的基礎。&lt;br /&gt;大多數的遊戲幾乎都是使用模型來表現在遊戲世界中的一切。&lt;br /&gt;瞭解3D模型運作的原理與細節，&lt;br /&gt;將有助於製作出極佳的3D專案。&lt;br /&gt;簡單的來說，3D模型是頂點(Vertices)的集合，&lt;br /&gt;兩個點可以行成線(Edge)，&lt;br /&gt;三個點就可以構成一個三角面(Face)，&lt;br /&gt;而兩個三角面即可組成一個四邊形(Polygon)，&lt;br /&gt;多個面就組成一個幾何物件(Mesh)。&lt;br /&gt;其實萬物歸幾何，&lt;br /&gt;透過觀察和幾何分析，&lt;br /&gt;將真實世界所有的事物分解成複雜程度不一的幾何圖形。&lt;br /&gt;就能透過電腦3D運算來模擬真實世界。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;而Director裡3D格式就是Shockwave3D格式，&lt;br /&gt;3D模型檔案包含每一頂點的一些附加屬性&lt;br /&gt;(該頂點相對應的材質座標、該頂點的法向量等等)。&lt;br /&gt;所有的模型資訊都儲存在檔案裡。&lt;br /&gt;而每個3D編輯器都有不同的檔案格式；&lt;br /&gt;像3DMax軟體就支援外掛輸出Shockwave3D檔案格[*.W3D]，&lt;br /&gt;可以在編輯軟體中製作好模型在輸出給Director運用。&lt;br /&gt;也可利用Lingo語言內建的3D Library來建立。&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-4187682476133891525?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/4187682476133891525/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/04/3d-model-3d-program-3d-3d-3d-3d.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/4187682476133891525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/4187682476133891525'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/04/3d-model-3d-program-3d-3d-3d-3d.html' title='Director Lingo 3D概述'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-5019748104521281258</id><published>2009-04-23T10:42:00.000-07:00</published><updated>2011-05-05T07:35:05.643-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>PV3D &amp; DAE應用範例(二)</title><content type='html'>&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;之前看過國外的網站有人拿自己的頭部模型，&lt;br /&gt;存成DAE檔匯入至PV3D中，&lt;br /&gt;利用滑鼠控制頭部的轉動方向，&lt;br /&gt;覺得很有趣，&lt;br /&gt;自己嘗試用3DMax也拉了顆頭部模型，&lt;br /&gt;頂點數不多，&lt;br /&gt;而貼圖使用素材的照片，&lt;br /&gt;測試了PV3D內的Blur filter跟InteractiveScene3DEvent，&lt;br /&gt;以下是測試結果：&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SfW9gYuhmHI/AAAAAAAAABw/rR0pgLSgJZk/s1600-h/demo.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5329374098153904242" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 293px" alt="" src="http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SfW9gYuhmHI/AAAAAAAAABw/rR0pgLSgJZk/s400/demo.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://igmax.myweb.hinet.net/demo_head/HeadDemo.html" target="_blank"&gt;Demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-5019748104521281258?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/5019748104521281258/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/04/pv3d-dae.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/5019748104521281258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/5019748104521281258'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/04/pv3d-dae.html' title='PV3D &amp; DAE應用範例(二)'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_a8EDl0Lwf_Q/SfW9gYuhmHI/AAAAAAAAABw/rR0pgLSgJZk/s72-c/demo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2200661281887379041.post-4793851213255702995</id><published>2009-04-21T09:05:00.000-07:00</published><updated>2011-05-05T07:34:46.649-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>PV3D &amp; DAE應用範例(一)</title><content type='html'>&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;最近研究了一下PV3D，&lt;br /&gt;發現載入外部模型(DAE格式)非常方便，&lt;br /&gt;在3DMax軟體中製作模型角色(骨骼動畫)，&lt;br /&gt;配合外掛輸出DAE檔格式，&lt;br /&gt;運用DAEMC這個Class，&lt;br /&gt;可輕鬆製作角色動畫控制，&lt;br /&gt;以下就是實作的範例。&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SfW9AFXbpkI/AAAAAAAAABo/T-tgnrWHtHk/s1600-h/demo.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 303px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5329373543200958018" border="0" alt="" src="http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SfW9AFXbpkI/AAAAAAAAABo/T-tgnrWHtHk/s400/demo.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://igmax.myweb.hinet.net/demo_mouse/DAEANIMATION.html" target="_blank"&gt;Demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2200661281887379041-4793851213255702995?l=ig-max.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ig-max.blogspot.com/feeds/4793851213255702995/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://ig-max.blogspot.com/2009/04/pv3d.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/4793851213255702995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2200661281887379041/posts/default/4793851213255702995'/><link rel='alternate' type='text/html' href='http://ig-max.blogspot.com/2009/04/pv3d.html' title='PV3D &amp; DAE應用範例(一)'/><author><name>Max</name><uri>http://www.blogger.com/profile/18109744422621874374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SmXvQCmXrTI/AAAAAAAAAQ4/X65YJy6GhVo/S220/%E5%A4%A7%E9%A0%AD1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_a8EDl0Lwf_Q/SfW9AFXbpkI/AAAAAAAAABo/T-tgnrWHtHk/s72-c/demo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
