<?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-9146467412288508136</id><updated>2011-08-13T20:14:52.013+08:00</updated><category term='Binaural Beats'/><category term='Python'/><category term='blender'/><category term='PixelBender'/><category term='GAE'/><category term='ANN'/><category term='Alchemy'/><category term='技巧'/><category term='PV3D'/><category term='haxe'/><title type='text'>查理在雲端 （ Charlie in Cloud）</title><subtitle type='html'>在這裡分享我的研究心得--Papervision3D,Python,Blender,haXe</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>41</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-1824012919465648964</id><published>2010-06-16T04:09:00.016+08:00</published><updated>2010-06-16T05:21:42.418+08:00</updated><title type='text'>Testing a sprite to use as the "command line" for Adobe Alchemy</title><content type='html'>&lt;a href="http://labs.adobe.com/wiki/index.php/Alchemy:Documentation:Developing_with_Alchemy:AS3_API"&gt;Alchemy:Documentation:Developing with Alchemy:AS3 API &lt;/a&gt;提到setSprite()&lt;br /&gt;可以將Sprite模擬成Command Shell,本範例測試Alchemy是否能使用C語言常用&lt;br /&gt;的輸出入函數將資料導到STDIN、STDOUT、 STDERR&lt;br /&gt;&lt;br /&gt;以下程式改自Alchemy samples其中的stringecho範例&lt;br /&gt;這是C程式&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 65%;"&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;quot;AS3.h&amp;quot;&lt;br /&gt;&lt;br /&gt;static AS3_Val echo(void* self, AS3_Val args)&lt;br /&gt;{&lt;br /&gt;    &lt;br /&gt;    char* val = NULL;&lt;br /&gt;    AS3_ArrayValue( args, &amp;quot;StrType&amp;quot;, &amp;amp;val );&lt;br /&gt;    &lt;br /&gt;    if(val == NULL)&lt;br /&gt;    {&lt;br /&gt;        char* nullString = &amp;quot;null&amp;quot;;&lt;br /&gt;        //return the string &amp;quot;null&amp;quot;&lt;br /&gt;        return AS3_String(nullString);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    printf(&amp;quot;*****Test printf() OK!!!*****\n&amp;quot;);&lt;br /&gt;    fprintf(stderr, &amp;quot;*****%s Test fprintf(stderr,...) OK!!!*****\n&amp;quot;,val);&lt;br /&gt;    fprintf(stdout, &amp;quot;*****%s Test fprintf(stdout,...) OK!!!*****\n&amp;quot;,val);&lt;br /&gt;&lt;br /&gt;    return AS3_String(val);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;    AS3_Val echoMethod = AS3_Function( NULL, echo );&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    AS3_Val result = AS3_Object( &amp;quot;echo: AS3ValType&amp;quot;, echoMethod );&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    AS3_Release( echoMethod );&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    AS3_LibInit( result );&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;這是as3程式&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 65%;"&gt;package {&lt;br /&gt;    import flash.display.Sprite;&lt;br /&gt;    import flash.text.TextField;&lt;br /&gt;    import flash.events.Event;&lt;br /&gt;    import flash.events.MouseEvent;&lt;br /&gt;&lt;br /&gt;    import cmodule.stringecho.CLibInit;&lt;br /&gt;&lt;br /&gt;    public class EchoTest extends Sprite&lt;br /&gt;    {&lt;br /&gt;        protected var alchemyLib            : Object;&lt;br /&gt;&lt;br /&gt;        public function EchoTest()&lt;br /&gt;        {&lt;br /&gt;            addEventListener( Event.ADDED_TO_STAGE, addedToStageHandler );&lt;br /&gt;            &lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        protected function addedToStageHandler( event : Event ) : void&lt;br /&gt;        {&lt;br /&gt;            removeEventListener( Event.ADDED_TO_STAGE, addedToStageHandler );&lt;br /&gt;            var loader:CLibInit = new CLibInit;&lt;br /&gt;            loader.setSprite(this);&lt;br /&gt;            alchemyLib= loader.init();&lt;br /&gt;            trace(alchemyLib.echo(&amp;quot;foo0&amp;quot;));&lt;br /&gt;            alchemyLib.echo(&amp;quot;foo1&amp;quot;);&lt;br /&gt;            throw Error(alchemyLib.echo(&amp;quot;foo2&amp;quot;));&lt;br /&gt;        }&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;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 65%;"&gt;*****foo1 Test fprintf(stderr,...) OK!!!*****&lt;br /&gt;*****foo2 Test fprintf(stderr,...) OK!!!*****&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;經過用力的測測測........&lt;br /&gt;目前只有fprintf(stderr,...)能成功輸出&lt;br /&gt;Alchemy名字取的真好&lt;br /&gt;可真是"煉金術"啊&lt;br /&gt;讓我可以體會自古以來西方鍊金術士鍊金過程的辛苦&lt;br /&gt;發思古之幽情........&lt;br /&gt;&lt;br /&gt;這是swf檔&lt;br /&gt;&lt;a href="http://cubeparks.appspot.com/demo/effects/EchoTest.swf"&gt;[Demo]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-1824012919465648964?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/1824012919465648964/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2010/06/testing-sprite-to-use-as-command-line.html#comment-form' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/1824012919465648964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/1824012919465648964'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2010/06/testing-sprite-to-use-as-command-line.html' title='Testing a sprite to use as the &quot;command line&quot; for Adobe Alchemy'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-3993835159427494270</id><published>2010-06-11T02:40:00.013+08:00</published><updated>2010-06-11T03:31:31.880+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Alchemy'/><title type='text'>Plasma Effect--Adobe Alchemy初體驗</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://cubeparks.appspot.com/demo/effects/PlasmaTest.swf"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 148px;" src="http://2.bp.blogspot.com/_2wvFlfBxuDQ/TBEzp-YzlVI/AAAAAAAAAD4/XYTVoGf7GfU/s400/plasma.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5481219017701299538" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;本來看過Adobe Labs的&lt;a href="http://labs.adobe.com/wiki/index.php/Alchemy:Documentation:Getting_Started"&gt;Alchemy:Documentation:Getting Started&lt;/a&gt;"落落長"的內容有點猶豫不前,&lt;br /&gt;想不到Adobe Alchemy在Ubuntu一下子就裝好了,接著搜尋到一些超炫Plasma Effect想說實驗看看&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.student.kuleuven.be/~m0216922/CG/plasma.html"&gt;這裡&lt;/a&gt;有C語言實作的詳解,還有&lt;a href="http://www.rozengain.com/blog/2009/04/01/alchemy-plasma-experiment/"&gt;這篇Alchemy plasma experiment文章&lt;/a&gt;也有Alchemy實作的原始碼&lt;br /&gt;&lt;br /&gt;以下是我修改後的C原始碼&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 65%;"&gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;math.h&amp;gt;&lt;br /&gt;#include &amp;quot;AS3.h&amp;quot;&lt;br /&gt;&lt;br /&gt;int* palette;&lt;br /&gt;int* plasma;&lt;br /&gt;int* newPlasma;&lt;br /&gt;int width;&lt;br /&gt;int height;&lt;br /&gt;&lt;br /&gt;AS3_Val generatePlasma(void* self, AS3_Val args)&lt;br /&gt;{&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;    AS3_ArrayValue(args, &amp;quot;IntType, IntType&amp;quot;, &amp;amp;width, &amp;amp;height); &lt;br /&gt;&lt;br /&gt;    palette = malloc(256 * sizeof(int));&lt;br /&gt;    plasma = malloc(width * height * sizeof(int));&lt;br /&gt;    newPlasma = malloc(width * height * sizeof(int));&lt;br /&gt;&lt;br /&gt;    genPalette();&lt;br /&gt;    plasma_pattern();&lt;br /&gt;    return AS3_Ptr( plasma );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;AS3_Val shiftPlasma(void* self, AS3_Val args)&lt;br /&gt;{&lt;br /&gt;    int shift, x, y, index, paletteIndex;&lt;br /&gt;    AS3_ArrayValue(args, &amp;quot;IntType&amp;quot;, &amp;amp;shift);&lt;br /&gt;&lt;br /&gt;    for(x=0; x&amp;lt;width; x++)&lt;br /&gt;    {&lt;br /&gt;        for(y=0; y&amp;lt;height; y++)&lt;br /&gt;        {&lt;br /&gt;            paletteIndex = (unsigned int)(plasma[index] + shift) % 256;&lt;br /&gt;            newPlasma[index] = palette[paletteIndex];&lt;br /&gt;            index++;&lt;br /&gt;        }&lt;br /&gt;    }            &lt;br /&gt;&lt;br /&gt;    return AS3_Ptr(newPlasma);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void genPaletteHSV()&lt;br /&gt;{&lt;br /&gt;    int x;&lt;br /&gt;    for(x=0; x&amp;lt;256; x++)&lt;br /&gt;    {&lt;br /&gt;            palette[x] = HSVtoRGB(x, 255, 255);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void plasma_pattern()&lt;br /&gt;{&lt;br /&gt;    int x, y, index;&lt;br /&gt;    for(x=0; x&amp;lt;width; x++)&lt;br /&gt;    {&lt;br /&gt;        for(y=0; y&amp;lt;height; y++)&lt;br /&gt;        {&lt;br /&gt;            int color = (&lt;br /&gt;                128.0 + ( 128.0 * sin( x / 16.0 ) ) +&lt;br /&gt;                128.0 + ( 128.0 * sin( y / 8.0 ) ) +&lt;br /&gt;                128.0 + ( 128.0 * sin( ( x + y ) / 16.0 ) ) +&lt;br /&gt;                128.0 + ( 128.0 * sin( sqrt( x * x + y * y ) / 8.0 ) )&lt;br /&gt;            ) / 4;&lt;br /&gt;            plasma[index++] = 0xff &amp;lt;&amp;lt; 24 &amp;#124; color;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;    AS3_Val generatePlasmaMethod = AS3_Function( NULL, generatePlasma );&lt;br /&gt;    AS3_Val shiftPlasmaMethod = AS3_Function( NULL, shiftPlasma );&lt;br /&gt;    AS3_Val result = AS3_Object(&lt;br /&gt;        &amp;quot;generatePlasma: AS3ValType,shiftPlasma: AS3ValType&amp;quot;,&lt;br /&gt;        generatePlasmaMethod, shiftPlasmaMethod&lt;br /&gt;    );&lt;br /&gt;    AS3_Release( generatePlasmaMethod );&lt;br /&gt;    AS3_Release( shiftPlasmaMethod );&lt;br /&gt;    AS3_LibInit( result );&lt;br /&gt;&lt;br /&gt;    return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;效果很炫&lt;br /&gt;CPU也不怎麼操&lt;br /&gt;看來書櫃裡塵封已久的C語言參考書將重見天日了&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-3993835159427494270?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/3993835159427494270/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2010/06/plasma-effect-adobe-alchemy.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/3993835159427494270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/3993835159427494270'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2010/06/plasma-effect-adobe-alchemy.html' title='Plasma Effect--Adobe Alchemy初體驗'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_2wvFlfBxuDQ/TBEzp-YzlVI/AAAAAAAAAD4/XYTVoGf7GfU/s72-c/plasma.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-2279390404980276550</id><published>2010-03-26T04:22:00.013+08:00</published><updated>2010-03-31T04:11:50.295+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='haxe'/><title type='text'>Very simple haXe coding tool</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://cubeparks.appspot.com/demo/haxe/hx_reflection.swf"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 265px;" src="http://2.bp.blogspot.com/_2wvFlfBxuDQ/S65LhXPAB2I/AAAAAAAAADw/47QR7tBOMOs/s400/hx_reflection.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5453379235336947554" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;目前以文字編輯器寫haXe code好像只能做到初步語法檢查&lt;br /&gt;所以我寫程式時總要在文字編輯器與haXe API Documentation之間不斷切換&lt;br /&gt;這實在非常困擾我!!!&lt;br /&gt;只好參考haXe Reflection API寫了個很陽春的haXe程式碼編寫工具&lt;br /&gt;目前沒有語法檢查只有簡單的Code Asist功能&lt;br /&gt;按'.'會跳出物件的Fields/Methods視窗&lt;br /&gt;然後再用這工具編輯工具本身的程式碼&lt;br /&gt;&lt;br /&gt;原本UI架構想採用&lt;a href="http://www.aswing.org/"&gt;AsWing&lt;/a&gt;或&lt;a href="http://haxegui.blogspot.com/"&gt;haxegui&lt;/a&gt;但嘗試haXe coding時很不順手,&lt;br /&gt;後來還是改採簡簡單單的&lt;a href="http://code.google.com/p/minimalcomps/"&gt;minimalcomps&lt;/a&gt;元件&lt;br /&gt;&lt;br /&gt;目前的心得是haXe上手並不難&lt;br /&gt;但是開發複雜一點的程式有點為難&lt;br /&gt;希望我這個小工具可以幫上忙&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cubeparks.appspot.com/demo/haxe/hx_reflection.swf"&gt;Demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-2279390404980276550?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/2279390404980276550/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2010/03/haxe.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/2279390404980276550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/2279390404980276550'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2010/03/haxe.html' title='Very simple haXe coding tool'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_2wvFlfBxuDQ/S65LhXPAB2I/AAAAAAAAADw/47QR7tBOMOs/s72-c/hx_reflection.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-3243090069959755960</id><published>2010-03-11T20:08:00.000+08:00</published><updated>2010-03-12T03:20:31.769+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PixelBender'/><title type='text'>Fast computing floating-point arrays using the Pixel Bender</title><content type='html'>前一陣子為了寫整合3D與Dynamic Sound相關套件的Flash程式,但是發覺只要加入的音頻越多的話,&lt;br /&gt;常常會爆出破音甚至在IE上執行時會當掉,想說可能是&lt;a href="http://away3d.com/"&gt;Away3D&lt;/a&gt;吃掉太多資源所致,&lt;br /&gt;也試著以&lt;a href="http://away3d.com/away3d-lite-v1-0-fastest-and-smallest-3d-engine-in-flash"&gt;Away3DLite&lt;/a&gt;改寫後情況也沒好到哪裡,最近剛好找到這篇文章&lt;a  href="http://www.flashmagazine.com/Tutorials/detail/using_pixel_bender_to_calculate_information/"&gt;Using Pixel Bender to calculate information&lt;/a&gt;&lt;br /&gt;提到因為Flash是單一執行緒程式,當處理大量吃重的運算常效能不彰,&lt;br /&gt;可利用Pixel Bender的多工處理的特性將某些吃重的運算挪到PBJ上面執行&lt;br /&gt;&lt;br /&gt;於是參考這幾篇文章發表的程式碼後&lt;br /&gt;&lt;a href="http://www.kaourantin.net/2008/10/audio-mixing-with-pixel-bender.html"&gt;Audio mixing with Pixel Bender&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.adobe.com/devnet/flex/articles/flashbuilder4_pixelbender.html"&gt;Using Pixel Bender with Flash Builder 4 beta as a number crunching engine&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;牛刀小試的改寫成了以下的程式碼&lt;br /&gt;&lt;br /&gt;這是PBK程式碼,可多工平行運算用來加總兩個陣列的每個Item的值&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 65%;"&gt;&amp;lt;languageVersion : 1.0;&amp;gt;&lt;br /&gt;kernel SumCalculator&lt;br /&gt;&amp;lt; &lt;br /&gt;   namespace : &amp;quot;PixelBender&amp;quot;;&lt;br /&gt;   vendor : &amp;quot;Charlie&amp;quot;;&lt;br /&gt;   version : 1;&lt;br /&gt;   description : &amp;quot;SumCalculator&amp;quot;;&lt;br /&gt;&amp;gt; &lt;br /&gt;{&lt;br /&gt;   input image1 src;&lt;br /&gt;   input image1 src2;&lt;br /&gt;   &lt;br /&gt;   output pixel3 result;&lt;br /&gt; &lt;br /&gt;   void evaluatePixel()&lt;br /&gt;   {&lt;br /&gt;      float x = pixel1( sample(src, outCoord()) );&lt;br /&gt;      float y = pixel1( sample(src2, outCoord()) );&lt;br /&gt;      &lt;br /&gt;      float z = x+y;&lt;br /&gt;      &lt;br /&gt;      result = pixel3( z, 0.0, 0.0);&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;這是AS3程式碼&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 65%"&gt;package&lt;br /&gt;{&lt;br /&gt;    &lt;br /&gt;    import com.bit101.components.*;&lt;br /&gt;    &lt;br /&gt;    import flash.display.*;&lt;br /&gt;    import flash.events.*;&lt;br /&gt;    import flash.utils.*;&lt;br /&gt;    &lt;br /&gt;    public class FastSumManyArray extends Sprite&lt;br /&gt;    {&lt;br /&gt;        [Embed(source=&amp;quot;./pbks/SumCalculator.pbj&amp;quot;, mimeType=&amp;quot;application/octet-stream&amp;quot;)]&lt;br /&gt;        private var KernelClass:Class; &lt;br /&gt;        &lt;br /&gt;        const arraylength:int=5000;&lt;br /&gt;        private var array1:Array=new Array(arraylength);&lt;br /&gt;        private var array2:Array=new Array(arraylength);&lt;br /&gt;        private var array_result:Array=new Array();&lt;br /&gt;        private var text3:Text;&lt;br /&gt;        private var result:ByteArray;&lt;br /&gt;        &lt;br /&gt;        public function FastSumManyArray()&lt;br /&gt;        {    &lt;br /&gt;            stage.align=&amp;quot;TL&amp;quot;&lt;br /&gt;            initArray(array1);&lt;br /&gt;            initArray(array2);&lt;br /&gt;            var text1:Text=new Text(this,0,0,array1.toString());&lt;br /&gt;            text1.height=16;&lt;br /&gt;            text1.width=1000;&lt;br /&gt;            addChild(text1);&lt;br /&gt;            var text2:Text=new Text(this,0,30,array2.toString());&lt;br /&gt;            text2.height=16;&lt;br /&gt;            text2.width=1000;&lt;br /&gt;            addChild(text2);&lt;br /&gt;            text3=new Text(this,0,60);&lt;br /&gt;            text3.height=16;&lt;br /&gt;            text3.width=1000;&lt;br /&gt;            addChild(text3);&lt;br /&gt;            addChild(new PushButton(this,0,100,&amp;quot;Start&amp;quot;,clickHandler));&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        private function initArray(array:Array)&lt;br /&gt;        {&lt;br /&gt;            for(var i=0;i&amp;lt;array.length;i++)&lt;br /&gt;            {&lt;br /&gt;                array[i]=Math.random();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        private function clickHandler(event:MouseEvent):void&lt;br /&gt;        {&lt;br /&gt;            initializeHandler(array1,array2);&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        protected function initializeHandler(list:Array, list2:Array):void&lt;br /&gt;        {&lt;br /&gt;                 var byteArray:ByteArray = new ByteArray();&lt;br /&gt;                 var byteArray2:ByteArray = new ByteArray();&lt;br /&gt;                 var shader:Shader = new Shader(new KernelClass());&lt;br /&gt;                 var shaderJob:ShaderJob;&lt;br /&gt;                 var height:int;&lt;br /&gt;                 var width:int;&lt;br /&gt;                 byteArray = convertListToByteArray( list );&lt;br /&gt;                 byteArray2 = convertListToByteArray( list2 );&lt;br /&gt;                 width = byteArray.length &amp;gt;&amp;gt; 2;&lt;br /&gt;                 height = 1;&lt;br /&gt;               &lt;br /&gt;                 shader.data.src.width = width;&lt;br /&gt;                 shader.data.src.height = height;&lt;br /&gt;                 shader.data.src.input = byteArray;&lt;br /&gt;    &lt;br /&gt;                 shader.data.src2.width = width;&lt;br /&gt;                 shader.data.src2.height = height;&lt;br /&gt;                 shader.data.src2.input = byteArray2;&lt;br /&gt;   &lt;br /&gt;                 result = new ByteArray();&lt;br /&gt;                 result.endian = Endian.LITTLE_ENDIAN;&lt;br /&gt;  &lt;br /&gt;                 shaderJob = new ShaderJob(shader, result, width, height);&lt;br /&gt;                 shaderJob.addEventListener(Event.COMPLETE, onComplete);&lt;br /&gt;                 shaderJob.start();&lt;br /&gt;         }&lt;br /&gt;         &lt;br /&gt;         protected function onComplete(event:Event):void&lt;br /&gt;           {&lt;br /&gt;                 var length:int = result.length;&lt;br /&gt;                 var num:Number;&lt;br /&gt;                 var i:int;&lt;br /&gt;                 result.position = 0;&lt;br /&gt;                 for(i = 0; i &amp;lt; length; i += 4)&lt;br /&gt;                 {&lt;br /&gt;                     num = result.readFloat();&lt;br /&gt;                     if(i % 3 == 0)&lt;br /&gt;                       array_result.push(num);             &lt;br /&gt;                 }         &lt;br /&gt;                 text3.text=array_result.toString();&lt;br /&gt;           }&lt;br /&gt;           &lt;br /&gt;                &lt;br /&gt;           &lt;br /&gt;           private static function convertListToByteArray(list:Array):ByteArray&lt;br /&gt;           {&lt;br /&gt;              var retVal:ByteArray = new ByteArray();&lt;br /&gt;              var number:Number;&lt;br /&gt;              var len:int = list.length;&lt;br /&gt;              var i:int;&lt;br /&gt;              &lt;br /&gt;              retVal.endian = Endian.LITTLE_ENDIAN;&lt;br /&gt;&lt;br /&gt;              for (i; i&amp;lt;len; i++)&lt;br /&gt;              {&lt;br /&gt;                 retVal.writeFloat( Number(list[i]) );&lt;br /&gt;              }&lt;br /&gt;               &lt;br /&gt;              retVal.position = 0;    &lt;br /&gt;               &lt;br /&gt;              return retVal;            &lt;br /&gt;           }     &lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;也可利用工具將PBJ反組譯成Assembly language,看看是否有改進的空間,再以&lt;a href="http://haxe.org/"&gt;HaXe&lt;/a&gt;重新組譯,&lt;br /&gt;壓榨出最大的效能!!!&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;version : 1&lt;br /&gt;name : 'SumCalculator'&lt;br /&gt;  meta namespace : 'PixelBender'&lt;br /&gt;  meta vendor : 'Charlie'&lt;br /&gt;  meta version : 1&lt;br /&gt;  meta description : 'SumCalculator'&lt;br /&gt;  param in  f0.rg float2    _OutCoord&lt;br /&gt;  text0 1-channels    src&lt;br /&gt;  text1 1-channels    src2&lt;br /&gt;  param out f1.rgb float3    result&lt;br /&gt;code :&lt;br /&gt;  sampleLinear f0.a, text0[f0.rg]&lt;br /&gt;  mov f0.b, f0.a&lt;br /&gt;  mov f0.a, f0.b&lt;br /&gt;  sampleLinear f1.a, text1[f0.rg]&lt;br /&gt;  mov f0.b, f1.a&lt;br /&gt;  mov f1.a, f0.b&lt;br /&gt;  mov f0.b, f0.a&lt;br /&gt;  add f0.b, f1.a&lt;br /&gt;  mov f2.r, f0.b&lt;br /&gt;  mov f2.g, f2.r&lt;br /&gt;  loadfloat f0.b, 0&lt;br /&gt;  mov f2.b, f0.b&lt;br /&gt;  loadfloat f0.b, 0&lt;br /&gt;  mov f2.a, f0.b&lt;br /&gt;  mov f1.rgb, f2.gba&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;這是執行結果的畫面&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://cubeparks.appspot.com/demo/FastSumManyArrayUsingPixelBender/FastSumManyArrayUsingPixelBender.swf"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 640px; height: 220px;" src="http://4.bp.blogspot.com/_2wvFlfBxuDQ/S5kjOsVGexI/AAAAAAAAADg/k23bzzGiMpw/s320/FastSumManyArrayUsingPixelBender.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5447423959606131474" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cubeparks.appspot.com/demo/FastSumManyArrayUsingPixelBender/FastSumManyArrayUsingPixelBender.swf"&gt;Demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-3243090069959755960?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/3243090069959755960/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2010/03/fast-computing-floating-point-arrays.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/3243090069959755960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/3243090069959755960'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2010/03/fast-computing-floating-point-arrays.html' title='Fast computing floating-point arrays using the Pixel Bender'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_2wvFlfBxuDQ/S5kjOsVGexI/AAAAAAAAADg/k23bzzGiMpw/s72-c/FastSumManyArrayUsingPixelBender.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-2385137378388317575</id><published>2010-01-29T09:58:00.000+08:00</published><updated>2010-01-29T10:50:57.671+08:00</updated><title type='text'>Away3D Tenorion</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://cubeparks.appspot.com/demo/BeatMatrix/BeatMatrix.swf"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 294px;" src="http://2.bp.blogspot.com/_2wvFlfBxuDQ/S2JD2UfoMCI/AAAAAAAAADY/oNdBYHsVReA/s320/teno.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5431978701055602722" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;最近嘗試以Away3D改寫Tenorion程式&lt;br /&gt;將程式碼剪剪貼貼一下子就完成了&lt;br /&gt;有一部分的程式碼是參考&lt;a href="http://www.flashmagazine.com/Tutorials/detail/away3d_basics_5_-_primitives_part_1/"&gt;flashmagazine&lt;/a&gt;&lt;br /&gt;不過3D+Dynamic Sound運作起來似乎不怎麼流暢&lt;br /&gt;或許因為倉促完成&lt;br /&gt;程式碼寫得不是很有效率&lt;br /&gt;找時間再改改&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cubeparks.appspot.com/demo/BeatMatrix/BeatMatrix.swf"&gt;App&lt;/a&gt;&lt;br /&gt;&lt;a href="http://cubeparks.appspot.com/demo/BeatMatrix/BeatMatrix.as"&gt;source code&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-2385137378388317575?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/2385137378388317575/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2010/01/away3d-tenorion.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/2385137378388317575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/2385137378388317575'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2010/01/away3d-tenorion.html' title='Away3D Tenorion'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_2wvFlfBxuDQ/S2JD2UfoMCI/AAAAAAAAADY/oNdBYHsVReA/s72-c/teno.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-865985518837657847</id><published>2010-01-03T13:47:00.000+08:00</published><updated>2010-01-13T16:53:53.537+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Binaural Beats'/><title type='text'>A Simple Binaural Beats Generator</title><content type='html'>目前FP10可以不載入聲音檔的情況下動態產生聲音&lt;br /&gt;以下是簡單的FP10's Dynamic Sound 程式碼&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 65%;"&gt;package&lt;br /&gt;{&lt;br /&gt;  import flash.display.Sprite;&lt;br /&gt;  import flash.events.SampleDataEvent;&lt;br /&gt;  import flash.media.Sound;&lt;br /&gt;  import flash.media.SoundChannel;&lt;br /&gt;  public class Main extends Sprite&lt;br /&gt;  {&lt;br /&gt;     private var sound:Sound;&lt;br /&gt;     private var channel:SoundChannel;&lt;br /&gt;     public function Main():void&lt;br /&gt;     {&lt;br /&gt;         sound = new Sound();&lt;br /&gt;         sound.addEventListener(SampleDataEvent.SAMPLE_DATA, writeSampleData);&lt;br /&gt;         channel = sound.play();&lt;br /&gt;     }&lt;br /&gt; &lt;br /&gt;    private function writeSampleData(e:SampleDataEvent):void&lt;br /&gt;    {&lt;br /&gt;        for(var i:Number = 0; i&amp;lt;8192; i++)&lt;br /&gt;        {&lt;br /&gt;              e.data.writeFloat(Math.random()*0.5);&lt;br /&gt;              e.data.writeFloat(Math.random()*0.5);&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;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://cubeparks.appspot.com/demo/BinauralBeatsGenerator/MindStateMaker.swf"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 237px;" src="http://1.bp.blogspot.com/_2wvFlfBxuDQ/S02Cc-zauNI/AAAAAAAAADQ/orqQDLPMY8g/s320/BinauralBeatsGenerator.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5426136560457922770" /&gt;&lt;/a&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;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;上面這個flash範例是運用雙耳波差(&lt;a href="http://en.wikipedia.org/wiki/Binaural_beats"&gt;Binaural Beats&lt;/a&gt;)的原理製作的簡單程式&lt;br /&gt;需戴上耳機聆聽才有效果&lt;br /&gt;Carrier可設定為(100 - 800Hz)的範圍&lt;br /&gt;Beats則為想誘導的腦波頻率&lt;br /&gt;β波（16 - 24Hz）為意識專注，身體呈緊張狀態&lt;br /&gt;α波（8 - 12Hz）為意識清醒，身體放鬆&lt;br /&gt;θ波（4 - 8Hz）為意識中斷，身體深沉放鬆&lt;br /&gt;δ波（1 - 4Hz）為深度熟睡，無意識狀態&lt;br /&gt;請享用^ ^&lt;br /&gt;&lt;a href="http://cubeparks.appspot.com/demo/BinauralBeatsGenerator/MindStateMaker.swf"&gt;A Simple Binaural Beats Generator&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;警告:聆聽前請將音量調小,請勿在從事需集中注意力之事務之前或當下使用&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-865985518837657847?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/865985518837657847/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2010/01/simple-binaural-beats-generator.html#comment-form' title='3 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/865985518837657847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/865985518837657847'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2010/01/simple-binaural-beats-generator.html' title='A Simple Binaural Beats Generator'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_2wvFlfBxuDQ/S02Cc-zauNI/AAAAAAAAADQ/orqQDLPMY8g/s72-c/BinauralBeatsGenerator.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-5214896932103885067</id><published>2009-08-27T17:40:00.000+08:00</published><updated>2009-08-27T18:55:34.284+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ANN'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Artificial Neural Network--Random Learning Perceptron</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;&lt;code&gt;&lt;br /&gt;import random, math&lt;br /&gt;import string&lt;br /&gt;&lt;br /&gt;from sympy import *&lt;br /&gt;&lt;br /&gt;def hardlims(inputM,weightM,bias):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp    n=(weightM*inputM)[0].evalf()-bias&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp    if n&lt;0:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp        a = -1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp    if n&gt;=0:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp        a = 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp    return a&lt;br /&gt;&lt;br /&gt;def sum_array(a):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp    acc = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp    for i in a:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp      acc += i&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp   return acc&lt;br /&gt;&lt;br /&gt;class NN:&lt;br /&gt;    def __init__(self):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp        self.w1 = [random.random() for x in range(10)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp        self.w2 = [random.random() for x in range(10)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp        self.w3 = [random.random() for x in range(10)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp        self.bias = 0&lt;br /&gt;&lt;br /&gt;    def learn(self,input,target):        &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp        errorAbsSum = 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp        epsilon = 1e-6&lt;br /&gt;        &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp        iterations = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp        while abs(errorAbsSum) &gt; epsilon:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp            iterations +=1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp            errorAbsSum = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp            counter = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp            tmp1 = (sum_array(self.w1) / len(self.w1))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp            tmp2 = (sum_array(self.w2) / len(self.w2))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp            tmp3 = (sum_array(self.w3) / len(self.w3))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp            for i,x in enumerate(input):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp                activation = hardlims(Matrix(3,1,x),Matrix(1,3,[tmp1,tmp2,tmp3]),self.bias)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp                error = target[i] - activation&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp                learningRate = random.random() / 10&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp                tmp1 += (error * learningRate * x[0])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp                tmp2 += (error * learningRate * x[1])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp                tmp3 += (error * learningRate * x[2])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp                errorAbsSum += abs(error)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp                print 'Learning:w1=%f w2=%f w3=%f learningRate=%f error=%f activation=%f' % ( tmp1, tmp2,tmp3,learningRate,error,activation)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp            del self.w1[0], self.w2[0],self.w3[0]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp            self.w1.append(tmp1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp            self.w2.append(tmp2)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp            self.w3.append(tmp3)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp        print 'Iterations: %d \n w1=%f w2=%f w3=%f' % (iterations, tmp1, tmp2,tmp3)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    def test(self,x):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp        tmp1 = (sum_array(self.w1) / len(self.w1))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp        tmp2 = (sum_array(self.w2) / len(self.w2))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp        tmp3 = (sum_array(self.w3) / len(self.w3))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp        activation = hardlims(Matrix(3,1,x),Matrix(1,3,[tmp1,tmp2,tmp3]),self.bias)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp        print 'test(%s):result=%d w1=%f w2=%f w3=%f' % (x, activation, tmp1, tmp2,tmp3)&lt;br /&gt;        &lt;br /&gt;&lt;br /&gt;if __name__ == '__main__':&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp    input =[[-1,-1,-1],[1,1,1],[1,-1,-1]]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp    target = [-1,1,1]&lt;br /&gt;    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp    nn=NN();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp    nn.learn(input,target)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp    nn.test([1,1,1])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp    nn.test([1,1,-1])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp    nn.test([1,-1,1])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp    nn.test([1,-1,-1])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp    nn.test([-1,1,1])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp    nn.test([-1,1,-1])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp    nn.test([-1,-1,1])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp    nn.test([-1,-1,-1])&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;驗收訓練成果&lt;br /&gt;&lt;code&gt;&lt;br /&gt;test([1, 1, 1]):result=1 w1=0.663924 w2=0.276574 w3=0.333518&lt;br /&gt;test([1, 1, -1]):result=1 w1=0.663924 w2=0.276574 w3=0.333518&lt;br /&gt;test([1, -1, 1]):result=1 w1=0.663924 w2=0.276574 w3=0.333518&lt;br /&gt;test([1, -1, -1]):result=1 w1=0.663924 w2=0.276574 w3=0.333518&lt;br /&gt;test([-1, 1, 1]):result=-1 w1=0.663924 w2=0.276574 w3=0.333518&lt;br /&gt;test([-1, 1, -1]):result=-1 w1=0.663924 w2=0.276574 w3=0.333518&lt;br /&gt;test([-1, -1, 1]):result=-1 w1=0.663924 w2=0.276574 w3=0.333518&lt;br /&gt;test([-1, -1, -1]):result=-1 w1=0.663924 w2=0.276574 w3=0.333518&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;縮排有點亂&lt;br /&gt;有誰能指點一下?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-5214896932103885067?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/5214896932103885067/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2009/08/artificial-neural-network-perceptron.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/5214896932103885067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/5214896932103885067'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2009/08/artificial-neural-network-perceptron.html' title='Artificial Neural Network--Random Learning Perceptron'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-8814531062971453941</id><published>2009-08-18T04:30:00.001+08:00</published><updated>2009-08-18T05:09:27.743+08:00</updated><title type='text'>FP10 Native 3D Diffuse Shading demo(STOK3D Filters)</title><content type='html'>我的Banner目前以FP10 Native 3D改寫&lt;br /&gt;而濾鏡則用&lt;a href="http://code.google.com/p/stok3d/"&gt;stok3d&lt;/a&gt;所提供的以Pixel Bender開發的各式濾鏡&lt;br /&gt;改天試試看PV3D+Pixel Bender&lt;br /&gt;不過自從Flash Player 10加上Native 3D特性後&lt;br /&gt;用不用PV3D倒不是那麼重要了&lt;br /&gt;不過還是很感謝PV3D相關開發人員的無私奉獻!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-8814531062971453941?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/8814531062971453941/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2009/08/fp10-native-3d-diffuse-shading-demo.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/8814531062971453941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/8814531062971453941'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2009/08/fp10-native-3d-diffuse-shading-demo.html' title='FP10 Native 3D Diffuse Shading demo(STOK3D Filters)'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-222198329631116388</id><published>2009-08-05T17:15:00.000+08:00</published><updated>2009-08-06T06:28:44.779+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GAE'/><title type='text'>GAE--使用Memcache Python API</title><content type='html'>隨著股票看盤程式固定時間間隔要抓取的資料變多&lt;br /&gt;資料回應的時間也越來越慢了,甚至每次程式啟動時都需要等上10幾秒&lt;br /&gt;該是加入Memcache(快取)的時候了 &lt;br /&gt;很簡單,只要加入下列幾行code即可&lt;br /&gt;&lt;code&gt;from google.appengine.api import memcache&lt;br /&gt;&lt;br /&gt;class getQuote(webapp.RequestHandler):&lt;br /&gt;&amp;nbsp; &amp;nbsp;  def get(self):&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;    data = memcache.get(stkno_string)&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;    if data is None:&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;     data = self.query_for_data()&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;     #快取將資料保留20秒&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;     memcache.add(stkno_string, data, 20)&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;      self.response.out.write(data)&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-222198329631116388?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/222198329631116388/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2009/08/gae-memcache-python-api.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/222198329631116388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/222198329631116388'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2009/08/gae-memcache-python-api.html' title='GAE--使用Memcache Python API'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-4647757552911018819</id><published>2009-08-02T04:57:00.000+08:00</published><updated>2009-08-02T05:44:54.240+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GAE'/><title type='text'>GAE--在 Python 使用 Cron 排程工作</title><content type='html'>在寫股價看盤軟體時需要上一個營業日的收盤價才能計算漲跌幅&lt;br /&gt;所以必須在開盤前更新最新的收盤價才能算出正確的漲跌幅&lt;br /&gt;這時Google App Engine提供的Cron Service就派上用場了，可以定期設定排程工作,&lt;br /&gt;Cron會在每天的指定時間啟動網址，但還是與一般 HTTP request一樣有時間的限制。&lt;br /&gt;&lt;br /&gt;一開始很高興的寫一大堆code撈DataStore的資料,&lt;br /&gt;但是經過幾次request timeout後,只好乖乖的將一些繁雜的工作,&lt;br /&gt;切成好幾分轉給其他的URL負責,讓cron啟動的URL只負責簡單的資料清空的動作&lt;br /&gt;整個程式就可以正常運行了&lt;br /&gt;&lt;br /&gt;下列是 cron.yaml 檔案的範例：&lt;br /&gt;&lt;code&gt;&lt;br /&gt;cron:&lt;br /&gt;- description: daily update job&lt;br /&gt;  url: /tasks/updatedata&lt;br /&gt;  schedule: every 24 hours&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-4647757552911018819?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/4647757552911018819/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2009/08/gae-python-cron.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/4647757552911018819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/4647757552911018819'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2009/08/gae-python-cron.html' title='GAE--在 Python 使用 Cron 排程工作'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-8165444704159725974</id><published>2009-07-24T11:36:00.000+08:00</published><updated>2009-08-18T05:15:38.089+08:00</updated><title type='text'>3D股價看盤軟體</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://cubeparks.appspot.com/demo/stock/stockx.swf"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 78px;" src="http://3.bp.blogspot.com/_2wvFlfBxuDQ/Smk25WUe9kI/AAAAAAAAADA/mvK9wxhEhKQ/s320/stocktool.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5361877190233224770" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;最近台股上攻七千點&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;1.隱藏文字功能--當滑鼠離開時會隱藏文字&lt;br /&gt;2.自選股記憶功能--當程式重啟時,不需再次輸入自選股代號&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cubeparks.appspot.com/demo/stock/stockx.swf"&gt;[demo]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-8165444704159725974?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/8165444704159725974/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2009/07/pv3d.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/8165444704159725974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/8165444704159725974'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2009/07/pv3d.html' title='3D股價看盤軟體'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_2wvFlfBxuDQ/Smk25WUe9kI/AAAAAAAAADA/mvK9wxhEhKQ/s72-c/stocktool.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-3144477791849321754</id><published>2009-07-07T17:50:00.000+08:00</published><updated>2009-08-05T18:13:12.577+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>PV3D--Box2DFlash Jigsaw Puzzle</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://cubeparks.appspot.com/demo/JigsawPuzzle/Box2DPV3DJigsawPuzzle.swf"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 188px;" src="http://2.bp.blogspot.com/_2wvFlfBxuDQ/SlMcDMhQGUI/AAAAAAAAACw/i2sm2mwwa4E/s200/thesonofman.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5355655223099529538" /&gt;&lt;/a&gt;&lt;br /&gt;這個拼圖積木是參考以下兩個網站改寫的&lt;br /&gt;http://www.lamberta.org/blog/paperbox2d/&lt;br /&gt;http://pv3d.org/tag/box2dflash/&lt;br /&gt;比較麻煩的是如何將小方塊組成有凹凸狀的積木,而且小方塊一多效率就變慢了&lt;br /&gt;&lt;a href="http://cubeparks.appspot.com/demo/JigsawPuzzle/Box2DPV3DJigsawPuzzle.swf"&gt;[demo]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-3144477791849321754?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/3144477791849321754/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2009/07/pv3d-box2dflash-jigsaw-puzzle.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/3144477791849321754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/3144477791849321754'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2009/07/pv3d-box2dflash-jigsaw-puzzle.html' title='PV3D--Box2DFlash Jigsaw Puzzle'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_2wvFlfBxuDQ/SlMcDMhQGUI/AAAAAAAAACw/i2sm2mwwa4E/s72-c/thesonofman.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-836308338226692492</id><published>2009-07-02T17:01:00.000+08:00</published><updated>2009-07-07T18:07:36.190+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技巧'/><title type='text'>如何讓Flex's swf減肥</title><content type='html'>當FLEX專案最後產出 swf  的時候，可以在 &lt;br /&gt;「功能表選單 =&gt; Project =&gt; Properties =&gt; Flex Compiler 」將「 -locale en_US 」改成「-locale en_US -debug=false 」&lt;br /&gt;可讓每個 swf 減少100KB。但是這樣做會把除錯訊息整個隱藏。&lt;br /&gt;&lt;br /&gt;如果是Actionscript專案,好像也能減肥大約10KB左右,不無小補^ ^&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-836308338226692492?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/836308338226692492/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2009/07/flexs-swf.html#comment-form' title='3 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/836308338226692492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/836308338226692492'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2009/07/flexs-swf.html' title='如何讓Flex&apos;s swf減肥'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-829573217298946453</id><published>2009-06-25T05:01:00.000+08:00</published><updated>2009-06-26T15:25:50.302+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>PV3d--jiglibflash  Jigsaw Puzzle拼圖積木</title><content type='html'>雖然新版本的&lt;a href="http://code.google.com/p/jiglibflash/"&gt;jiglibflash&lt;/a&gt;套用了 &lt;a href="http://en.wikipedia.org/wiki/Facade_pattern"&gt;"門面樣式"Facade pattern&lt;/a&gt;隱藏許多實作的細節讓寫code時少了好幾行,&lt;br /&gt;不過拉皮整形後的jiglibflash目前似乎還只能拿來當玩具玩玩,物體還是不小心就穿牆而過,&lt;br /&gt;提供的幾個Constraint類別鬆垮垮的好像快斷的橡皮筋,&lt;br /&gt;不過如果未來能做到DAE類別的碰撞偵測,jiglibflash還是大有可為的&lt;br /&gt;&lt;br /&gt;以下是拼圖積木測試&lt;br /&gt;&lt;a href="http://cubeparks.appspot.com/demo/JigsawPuzzle/JigsawPuzzle.swf"&gt;[demo]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-829573217298946453?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/829573217298946453/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2009/06/pv3d-jiglibflash-jigsaw-puzzle.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/829573217298946453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/829573217298946453'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2009/06/pv3d-jiglibflash-jigsaw-puzzle.html' title='PV3d--jiglibflash  Jigsaw Puzzle拼圖積木'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-7839729606173434907</id><published>2009-06-17T14:54:00.000+08:00</published><updated>2009-06-17T15:53:12.830+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GAE'/><title type='text'>有關Google App Engine的Datastore</title><content type='html'>最近在研究GAE Datastore&lt;br /&gt;發覺這真是搞OO的夢幻逸品啊!!!&lt;br /&gt;想當年被EJB、DataModel、OR MAPING等等搞得焦頭爛額時&lt;br /&gt;掙扎於理想(OO)與現實(DB)之間&lt;br /&gt;為了能讓整個專案能順利進行&lt;br /&gt;也曾將資料實體(Entity)塞到類似Dictionary的資料結構中&lt;br /&gt;再序列化(Serialize)存至檔案&lt;br /&gt;網頁及相關商業邏輯都可以即時demo給客戶看&lt;br /&gt;不過以往大型專案沒有擺個Oracle或Informix的大型資料庫是無法讓主管及業主信任的&lt;br /&gt;光是出報表套印就無法過關&lt;br /&gt;還好有雲端運算的支持&lt;br /&gt;類似GAE Datastore的理念應該會越普及吧!!!&lt;br /&gt;&lt;br /&gt;備忘一下,維護本地端datastore可到&lt;br /&gt;http://localhost:8080/_ah/admin/datastore&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-7839729606173434907?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/7839729606173434907/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2009/06/google-app-enginedatastore.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/7839729606173434907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/7839729606173434907'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2009/06/google-app-enginedatastore.html' title='有關Google App Engine的Datastore'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-3747381261820085510</id><published>2009-06-13T03:18:00.000+08:00</published><updated>2009-06-15T14:25:35.750+08:00</updated><title type='text'>PV3D-- Guestbook( 訪客登記簿)</title><content type='html'>很久以前就想用PV3D寫個留言板&lt;br /&gt;但是因為對後端&lt;a href="http://code.google.com/intl/en/appengine/"&gt;Google App Engine&lt;/a&gt;的Python不熟&lt;br /&gt;所以僅止於想想而已&lt;br /&gt;一直沒有付諸行動&lt;br /&gt;直到最近看了&lt;a href="http://pyamf.org/"&gt;pyAMF&lt;/a&gt;一些範例&lt;br /&gt;覺得Flash+Python似乎沒想像中那麼難&lt;br /&gt;於是動手寫了左邊的訪客登記簿&lt;br /&gt;目前只完成到預期功能的10%&lt;br /&gt;&lt;br /&gt;翻頁的效果目前不是很優&lt;br /&gt;有空再改改....&lt;br /&gt;&lt;br /&gt;ps.原本用as3寫大小只有200K,改成mxml後暴增為500K,要如何減肥啊?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-3747381261820085510?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/3747381261820085510/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2009/06/3d-guestbook.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/3747381261820085510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/3747381261820085510'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2009/06/3d-guestbook.html' title='PV3D-- Guestbook( 訪客登記簿)'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-4395463089226833092</id><published>2009-06-03T06:49:00.000+08:00</published><updated>2009-07-02T15:51:55.236+08:00</updated><title type='text'>Papervision3D-Lens Flare</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://cubeparks.appspot.com/demo/effects/Flares.swf"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 183px; height: 200px;" src="http://2.bp.blogspot.com/_2wvFlfBxuDQ/SiW-V9IfBoI/AAAAAAAAACo/FXRJt08X5D4/s200/flares.jpg" alt="" id="BLOGGER_PHOTO_ID_5342885817341642370" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;很久之前就知道PV3D的LensFlare特效但一直找不到時間測試&lt;br /&gt;上網找到最早的一篇範例在&lt;a href="http://blog.zupko.info/index.php?s=bitmap&amp;amp;paged=3"&gt;http://blog.zupko.info/&lt;/a&gt;&lt;br /&gt;但上面提供的原始碼有點老舊&lt;br /&gt;好不容易找到這篇&lt;a href="http://www.codedazur.nl/blog/2009/03/08/papervision-2-great-white-lens-flares/"&gt;Papervision 2 Great White Lens Flares&lt;/a&gt;&lt;br /&gt;根據此文作者提供的程式段落做一番修改後&lt;br /&gt;再使用&lt;a href="http://www.gimp.org/"&gt;GIMP&lt;/a&gt;做幾個鏡頭眩光圖&lt;br /&gt;這樣子PV3D的LensFlare特效就可以順利跑起來了&lt;br /&gt;&lt;code&gt;&lt;br /&gt; private function init():void { &lt;br /&gt;       &lt;br /&gt;                &lt;br /&gt;          light = new PointLight3D(true);&lt;br /&gt;          light.x = 0;&lt;br /&gt;  light.z = 100;&lt;br /&gt;  light.y = 400;&lt;br /&gt;&lt;br /&gt;  light.autoCalcScreenCoords=true;&lt;br /&gt;       &lt;br /&gt;          view.scene.addChild(light);&lt;br /&gt;       &lt;br /&gt;                &lt;br /&gt;        //create some halos&lt;br /&gt;        var h:Bitmap = new Halo();&lt;br /&gt;        var h1:Bitmap = new Halo1();&lt;br /&gt;        var h2:Bitmap = new Halo2();&lt;br /&gt;&lt;br /&gt;        var flareArray:Array = [h,h2,h1 ];&lt;br /&gt;        lensFlare = new LensFlare(light,  flareArray,300,300);&lt;br /&gt; &lt;br /&gt;         &lt;br /&gt;        var lightLayer : ViewportLayer = view.viewport.getChildLayer(light);&lt;br /&gt;  lightLayer.addLayer(lensFlare);&lt;br /&gt;  lightLayer.layerIndex = 1;&lt;br /&gt;          &lt;br /&gt;           addEventListener( Event.ENTER_FRAME, enterFrameHandler );&lt;br /&gt;&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;private function enterFrameHandler( event : Event ):void {  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  lensFlare.updateFlare(true);&lt;br /&gt;  view.singleRender();&lt;br /&gt;       }&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;a href="http://cubeparks.appspot.com/demo/effects/Flares.swf"&gt;[demo]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-4395463089226833092?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/4395463089226833092/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2009/06/lens-flare.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/4395463089226833092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/4395463089226833092'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2009/06/lens-flare.html' title='Papervision3D-Lens Flare'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_2wvFlfBxuDQ/SiW-V9IfBoI/AAAAAAAAACo/FXRJt08X5D4/s72-c/flares.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-922978700234377392</id><published>2009-05-20T06:29:00.000+08:00</published><updated>2009-06-17T15:48:48.404+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>PV3D-中文VECTORVISION範例</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://cubeparks.appspot.com/demo/Font3DTest1/Text3DExample.swf"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 130px;" src="http://4.bp.blogspot.com/_2wvFlfBxuDQ/ShM01ypTIUI/AAAAAAAAACg/hyrEolGrSuw/s320/vectorvisionchinese.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5337668082096873794" /&gt;&lt;/a&gt;&lt;br /&gt;這個程式改自PV3D-VECTORVISION套件自帶範例&lt;br /&gt;中文Font3D字型類別則以自己改寫的AIR程式轉出&lt;br /&gt;百多個中文字須轉很久不是很有效率&lt;br /&gt;還在改寫中&lt;br /&gt;&lt;br /&gt;swf檔案大小:260K&lt;br /&gt;ps.銀幕解析度須調到1024*768以上才能看到右邊的控制項&lt;br /&gt;&lt;a href="http://cubeparks.appspot.com/demo/Font3DTest1/Text3DExample.swf"&gt;[demo]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-922978700234377392?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/922978700234377392/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2009/05/pv3d-vectorvision.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/922978700234377392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/922978700234377392'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2009/05/pv3d-vectorvision.html' title='PV3D-中文VECTORVISION範例'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_2wvFlfBxuDQ/ShM01ypTIUI/AAAAAAAAACg/hyrEolGrSuw/s72-c/vectorvisionchinese.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-1071698466889748520</id><published>2009-05-10T01:34:00.000+08:00</published><updated>2009-05-15T00:26:48.093+08:00</updated><title type='text'>PV3D --Man In Hat + Font3D</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://cubeparks.appspot.com/demo/Quaternion/maninhat.swf"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 306px; height: 320px;" src="http://4.bp.blogspot.com/_2wvFlfBxuDQ/SgW_0JQI9HI/AAAAAAAAACY/82mddKRqu_g/s320/MIH.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5333880236247938162" /&gt;&lt;/a&gt;&lt;br /&gt;花了一些時間用Blender做了個黑帽人&lt;br /&gt;配上簡單的骨骼系統&lt;br /&gt;PV3D顯示中文字也不再需要搭配耗記憶體的字型檔&lt;br /&gt;整個SWF共179K&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cubeparks.appspot.com/demo/Quaternion/maninhat.swf"&gt;[demo]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-1071698466889748520?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/1071698466889748520/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2009/05/man-in-hat.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/1071698466889748520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/1071698466889748520'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2009/05/man-in-hat.html' title='PV3D --Man In Hat + Font3D'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_2wvFlfBxuDQ/SgW_0JQI9HI/AAAAAAAAACY/82mddKRqu_g/s72-c/MIH.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-2947230999155453092</id><published>2009-04-29T17:05:00.000+08:00</published><updated>2009-04-29T17:27:37.332+08:00</updated><title type='text'>簡單的FK(Forward Kinematics)Algorithm</title><content type='html'>這是從討論以FK轉換化學鍵方位的文章看來的公式&lt;br /&gt;[X',Y',Z',1]t=Mrt(i,theta)[X,Y,Z,1]t&lt;br /&gt;&lt;br /&gt;[X',Y',Z',1]t為轉換後的頂點&lt;br /&gt;Mrt為旋轉平移矩陣&lt;br /&gt;[X,Y,Z,1]t為轉換後的頂點&lt;br /&gt;i代表各根骨頭&lt;br /&gt;theta為各Bone Joint的旋轉角度&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-2947230999155453092?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/2947230999155453092/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2009/04/fkforward-kinematicsalgorithm.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/2947230999155453092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/2947230999155453092'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2009/04/fkforward-kinematicsalgorithm.html' title='簡單的FK(Forward Kinematics)Algorithm'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-4477661841852780314</id><published>2009-04-29T08:09:00.000+08:00</published><updated>2009-04-29T08:59:49.103+08:00</updated><title type='text'>PV3D Bone FK(Forward Kinematics)試作--回眸轉臂</title><content type='html'>經過好幾天眼睛幾乎快脫窗的測試&lt;br /&gt;終於確認原本的四元數(Quaternion)旋轉矩陣運算程式碼無誤&lt;br /&gt;需要在Blender建模階段將骨頭(Bone)與頂點(Vertex)對應關係處理好&lt;br /&gt;正向運動(Forward Kinematics)才能順利運轉&lt;br /&gt;&lt;br /&gt;當初搞不定PV3D的DAE類別&lt;br /&gt;一來可能就是產生的檔案太大(50frames動輒超出1M)&lt;br /&gt;二來就是建模階段的對應關係沒處理好(有時會出現骨頭位置喬好後,切換到編輯模式竟然會跑出Mesh的範圍)&lt;br /&gt;所以才無法正常運作&lt;br /&gt;&lt;br /&gt;目前關節部位(Joints)的旋轉還要加上權重值的運算才不會產生扭曲&lt;br /&gt;以下是展示程式&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;頂點:1146&lt;br /&gt;面數:2268&lt;br /&gt;SWF檔案:169K&lt;br /&gt;&lt;a href="http://cubeparks.appspot.com/demo/Quaternion/beautymonster1.swf"&gt;[Demo]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-4477661841852780314?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/4477661841852780314/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2009/04/pv3d-bone-fkforward-kinematics.html#comment-form' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/4477661841852780314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/4477661841852780314'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2009/04/pv3d-bone-fkforward-kinematics.html' title='PV3D Bone FK(Forward Kinematics)試作--回眸轉臂'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-4324475730295773403</id><published>2009-04-22T05:45:00.000+08:00</published><updated>2009-04-22T06:19:04.651+08:00</updated><title type='text'>PV3D Bone FK(Forward Kinematics)試作-美女變怪獸</title><content type='html'>最近嘗試實作FK(Forward Kinematics)&lt;br /&gt;本來的想法是讓美女彎個腰&lt;br /&gt;移動Spine牽動Neck再牽動Head&lt;br /&gt;可惜在Blender建立骨頭與頂點對應關係時沒處理好&lt;br /&gt;美女就變成怪獸了&lt;br /&gt;&lt;br /&gt;頂點:762&lt;br /&gt;面數:1500&lt;br /&gt;SWF檔案:157K&lt;br /&gt;&lt;a href="http://cubeparks.appspot.com/demo/Quaternion/beautymonster.swf"&gt;[Demo]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-4324475730295773403?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/4324475730295773403/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2009/04/blog-post.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/4324475730295773403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/4324475730295773403'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2009/04/blog-post.html' title='PV3D Bone FK(Forward Kinematics)試作-美女變怪獸'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-4506436146214758860</id><published>2009-04-02T04:02:00.000+08:00</published><updated>2009-07-02T16:07:26.044+08:00</updated><title type='text'>PV3D Bone Rotation and Quaternion</title><content type='html'>PV3D的DAE類別測試了許久&lt;br /&gt;總是會遇到一些大大小小的障礙&lt;br /&gt;搜遍了NABBLE的討論文章&lt;br /&gt;也找不到適合我的解決之道&lt;br /&gt;無奈只好捲起袖子試著"重新發明輪子"&lt;br /&gt;K了一些硬梆梆的有關數學及三D理論的網路文章&lt;br /&gt;硬著頭皮寫下這個很粗糙的程式碼&lt;br /&gt;主要是將人物四肢所屬的頂點索引塞到不同的Group&lt;br /&gt;再分別以不同的四元數(Quaternion)旋轉之&lt;br /&gt;當然還有很多細節還沒處理好&lt;br /&gt;不過時間有限&lt;br /&gt;先這樣子留個紀錄......&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cubeparks.appspot.com/demo/Quaternion/AS3D_Test.swf"&gt;[demo]&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;package  {&lt;br /&gt; import flash.utils.Dictionary;&lt;br /&gt; &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.core.math.*;&lt;br /&gt; import org.papervision3d.core.proto.MaterialObject3D;&lt;br /&gt;&lt;br /&gt; public class  CubeMan extends TriangleMesh3D {&lt;br /&gt;  private var ve:Array;&lt;br /&gt;  private var fa:Array;&lt;br /&gt;  private var vertGroupDict:Dictionary = new Dictionary();&lt;br /&gt;&lt;br /&gt;  public function aaa(material : MaterialObject3D ) {&lt;br /&gt;   super( material, new Array(), new Array() );&lt;br /&gt;   ve = this.geometry.vertices;&lt;br /&gt;   fa = this.geometry.faces;&lt;br /&gt;   v(1.000000,-1.000000,1.000000);&lt;br /&gt;   v(1.000000,-1.000000,-1.000000);&lt;br /&gt;   v(-1.000000,-1.000000,-1.000000);&lt;br /&gt;   v(-1.000000,-1.000000,1.000000);&lt;br /&gt;   v(1.000000,1.000000,0.999999);&lt;br /&gt;   v(0.999999,1.000000,-1.000001);&lt;br /&gt;   v(-1.000000,1.000000,-1.000000);&lt;br /&gt;   v(-1.000000,1.000000,1.000000);&lt;br /&gt;   v(-1.000000,-1.000000,-2.806856);&lt;br /&gt;   v(-1.000000,1.000000,-2.806855);&lt;br /&gt;   v(1.000000,-1.000000,-2.806856);&lt;br /&gt;   v(0.999999,1.000000,-2.806856);&lt;br /&gt;   v(1.000000,-1.000000,-4.640568);&lt;br /&gt;   v(-1.000001,-1.000000,-4.640568);&lt;br /&gt;   v(-1.000001,1.000000,-4.640568);&lt;br /&gt;   v(0.999999,1.000000,-4.640569);&lt;br /&gt;   v(-1.000001,-1.000000,-6.226972);&lt;br /&gt;   v(-1.000001,1.000000,-6.226972);&lt;br /&gt;   v(0.999999,-1.000000,-6.226972);&lt;br /&gt;   v(0.999999,1.000000,-6.226973);&lt;br /&gt;   v(2.975521,-1.000000,-4.640568);&lt;br /&gt;   v(2.975521,-1.000000,-6.226972);&lt;br /&gt;   v(2.975520,1.000000,-6.226973);&lt;br /&gt;   v(2.975521,1.000000,-4.640569);&lt;br /&gt;   v(-3.035387,1.000000,-4.640568);&lt;br /&gt;   v(-3.035387,1.000000,-6.226972);&lt;br /&gt;   v(-3.035387,-1.000000,-6.226972);&lt;br /&gt;   v(-3.035387,-1.000000,-4.640568);&lt;br /&gt;   v(0.999999,0.999999,-9.615506);&lt;br /&gt;   v(2.975520,1.000000,-9.615506);&lt;br /&gt;   v(2.975521,-1.000000,-9.615505);&lt;br /&gt;   v(0.999999,-1.000001,-9.615505);&lt;br /&gt;   v(0.999999,0.999996,-15.988734);&lt;br /&gt;   v(0.999999,-1.000004,-15.988733);&lt;br /&gt;   v(2.975521,-1.000003,-15.988733);&lt;br /&gt;   v(2.975520,0.999996,-15.988734);&lt;br /&gt;   v(-1.000001,-0.999999,-9.610606);&lt;br /&gt;   v(-3.035387,-1.000000,-9.610606);&lt;br /&gt;   v(-3.035387,1.000000,-9.610606);&lt;br /&gt;   v(-1.000001,1.000001,-9.610606);&lt;br /&gt;   v(-1.000001,-0.999999,-15.983833);&lt;br /&gt;   v(-1.000001,1.000001,-15.983833);&lt;br /&gt;   v(-3.035387,1.000000,-15.983833);&lt;br /&gt;   v(-3.035387,-1.000000,-15.983833);&lt;br /&gt;   v(-0.999999,-1.000000,2.229123);&lt;br /&gt;   v(-1.000000,1.000000,2.229123);&lt;br /&gt;   v(1.000000,-1.000000,2.229122);&lt;br /&gt;   v(1.000001,1.000000,2.229122);&lt;br /&gt;   v(-0.999999,-1.000000,2.229123);&lt;br /&gt;   v(1.000000,-1.000000,2.229122);&lt;br /&gt;   v(-1.000000,1.000000,2.229123);&lt;br /&gt;   v(1.000001,1.000000,2.229122);&lt;br /&gt;   v(-0.999999,-0.999999,4.732891);&lt;br /&gt;   v(-0.999999,1.000001,4.732890);&lt;br /&gt;   v(1.000001,-0.999999,4.732890);&lt;br /&gt;   v(1.000001,1.000001,4.732890);&lt;br /&gt;   v(1.000000,-1.000000,1.000000);&lt;br /&gt;   v(1.000000,1.000000,0.999999);&lt;br /&gt;   v(1.000000,-1.000000,-1.000000);&lt;br /&gt;   v(0.999999,1.000000,-1.000001);&lt;br /&gt;   v(3.994711,-1.000000,0.999999);&lt;br /&gt;   v(3.994711,-1.000000,-1.000001);&lt;br /&gt;   v(3.994712,1.000000,0.999998);&lt;br /&gt;   v(3.994711,1.000000,-1.000002);&lt;br /&gt;   v(8.607256,-1.000000,0.999996);&lt;br /&gt;   v(8.607256,1.000000,0.999996);&lt;br /&gt;   v(8.607256,-1.000000,-1.000004);&lt;br /&gt;   v(8.607255,1.000000,-1.000004);&lt;br /&gt;   v(8.607256,-1.000000,-1.000004);&lt;br /&gt;   v(8.607256,-1.000000,0.999996);&lt;br /&gt;   v(8.607255,1.000000,-1.000004);&lt;br /&gt;   v(8.607256,1.000000,0.999996);&lt;br /&gt;   v(12.600204,1.000001,0.999994);&lt;br /&gt;   v(12.600204,-0.999999,0.999994);&lt;br /&gt;   v(12.600203,1.000001,-1.000006);&lt;br /&gt;   v(12.600204,-0.999999,-1.000005);&lt;br /&gt;   v(-4.202740,-1.000000,1.000000);&lt;br /&gt;   v(-4.202740,1.000000,1.000000);&lt;br /&gt;   v(-4.202740,-1.000000,-1.000000);&lt;br /&gt;   v(-4.202740,1.000000,-1.000000);&lt;br /&gt;   v(-8.722494,-1.000000,-0.999998);&lt;br /&gt;   v(-8.722494,-1.000000,1.000003);&lt;br /&gt;   v(-8.722494,1.000000,-0.999997);&lt;br /&gt;   v(-8.722494,1.000000,1.000002);&lt;br /&gt;   v(-12.583741,1.000000,1.000002);&lt;br /&gt;   v(-12.583741,-1.000000,1.000003);&lt;br /&gt;   v(-12.583741,1.000000,-0.999997);&lt;br /&gt;   v(-12.583741,-1.000000,-0.999998);&lt;br /&gt;&lt;br /&gt;   f(87,86,84);&lt;br /&gt;   f(87,84,85);&lt;br /&gt;   f(81,80,87);&lt;br /&gt;   f(81,87,85);&lt;br /&gt;   f(82,83,84);&lt;br /&gt;   f(82,84,86);&lt;br /&gt;   f(80,82,86);&lt;br /&gt;   f(80,86,87);&lt;br /&gt;   f(83,81,85);&lt;br /&gt;   f(83,85,84);&lt;br /&gt;   f(77,76,81);&lt;br /&gt;   f(77,81,83);&lt;br /&gt;   f(78,79,82);&lt;br /&gt;   f(78,82,80);&lt;br /&gt;   f(79,77,82);&lt;br /&gt;   f(77,83,82);&lt;br /&gt;   f(76,78,80);&lt;br /&gt;   f(76,80,81);&lt;br /&gt;   f(3,2,76);&lt;br /&gt;   f(2,78,76);&lt;br /&gt;   f(6,7,77);&lt;br /&gt;   f(6,77,79);&lt;br /&gt;   f(2,6,79);&lt;br /&gt;   f(2,79,78);&lt;br /&gt;   f(7,3,77);&lt;br /&gt;   f(3,76,77);&lt;br /&gt;   f(73,72,75);&lt;br /&gt;   f(72,74,75);&lt;br /&gt;   f(68,69,73);&lt;br /&gt;   f(68,73,75);&lt;br /&gt;   f(71,70,74);&lt;br /&gt;   f(71,74,72);&lt;br /&gt;   f(70,68,74);&lt;br /&gt;   f(68,75,74);&lt;br /&gt;   f(69,71,73);&lt;br /&gt;   f(71,72,73);&lt;br /&gt;   f(64,65,71);&lt;br /&gt;   f(64,71,69);&lt;br /&gt;   f(67,66,68);&lt;br /&gt;   f(67,68,70);&lt;br /&gt;   f(65,67,70);&lt;br /&gt;   f(65,70,71);&lt;br /&gt;   f(66,64,69);&lt;br /&gt;   f(66,69,68);&lt;br /&gt;   f(61,60,64);&lt;br /&gt;   f(61,64,66);&lt;br /&gt;   f(62,63,67);&lt;br /&gt;   f(62,67,65);&lt;br /&gt;   f(63,61,67);&lt;br /&gt;   f(61,66,67);&lt;br /&gt;   f(60,62,64);&lt;br /&gt;   f(62,65,64);&lt;br /&gt;   f(56,57,60);&lt;br /&gt;   f(57,62,60);&lt;br /&gt;   f(59,58,63);&lt;br /&gt;   f(58,61,63);&lt;br /&gt;   f(57,59,63);&lt;br /&gt;   f(57,63,62);&lt;br /&gt;   f(58,56,60);&lt;br /&gt;   f(58,60,61);&lt;br /&gt;   f(1,0,56);&lt;br /&gt;   f(1,56,58);&lt;br /&gt;   f(4,5,59);&lt;br /&gt;   f(4,59,57);&lt;br /&gt;   f(5,1,58);&lt;br /&gt;   f(5,58,59);&lt;br /&gt;   f(0,4,57);&lt;br /&gt;   f(0,57,56);&lt;br /&gt;   f(55,54,53);&lt;br /&gt;   f(54,52,53);&lt;br /&gt;   f(49,48,52);&lt;br /&gt;   f(49,52,54);&lt;br /&gt;   f(50,51,55);&lt;br /&gt;   f(50,55,53);&lt;br /&gt;   f(51,49,55);&lt;br /&gt;   f(49,54,55);&lt;br /&gt;   f(48,50,53);&lt;br /&gt;   f(48,53,52);&lt;br /&gt;   f(44,45,50);&lt;br /&gt;   f(44,50,48);&lt;br /&gt;   f(47,46,49);&lt;br /&gt;   f(47,49,51);&lt;br /&gt;   f(45,47,51);&lt;br /&gt;   f(45,51,50);&lt;br /&gt;   f(46,44,48);&lt;br /&gt;   f(46,48,49);&lt;br /&gt;   f(0,3,44);&lt;br /&gt;   f(0,44,46);&lt;br /&gt;   f(7,4,47);&lt;br /&gt;   f(7,47,45);&lt;br /&gt;   f(4,0,46);&lt;br /&gt;   f(4,46,47);&lt;br /&gt;   f(3,7,45);&lt;br /&gt;   f(3,45,44);&lt;br /&gt;   f(40,41,42);&lt;br /&gt;   f(40,42,43);&lt;br /&gt;   f(37,36,40);&lt;br /&gt;   f(37,40,43);&lt;br /&gt;   f(38,37,43);&lt;br /&gt;   f(38,43,42);&lt;br /&gt;   f(39,38,42);&lt;br /&gt;   f(39,42,41);&lt;br /&gt;   f(36,39,41);&lt;br /&gt;   f(36,41,40);&lt;br /&gt;   f(16,17,36);&lt;br /&gt;   f(17,39,36);&lt;br /&gt;   f(17,25,38);&lt;br /&gt;   f(17,38,39);&lt;br /&gt;   f(25,26,37);&lt;br /&gt;   f(25,37,38);&lt;br /&gt;   f(26,16,36);&lt;br /&gt;   f(26,36,37);&lt;br /&gt;   f(32,33,35);&lt;br /&gt;   f(33,34,35);&lt;br /&gt;   f(29,28,32);&lt;br /&gt;   f(29,32,35);&lt;br /&gt;   f(30,29,35);&lt;br /&gt;   f(30,35,34);&lt;br /&gt;   f(31,30,34);&lt;br /&gt;   f(31,34,33);&lt;br /&gt;   f(28,31,33);&lt;br /&gt;   f(28,33,32);&lt;br /&gt;   f(19,18,31);&lt;br /&gt;   f(19,31,28);&lt;br /&gt;   f(18,21,30);&lt;br /&gt;   f(18,30,31);&lt;br /&gt;   f(21,22,30);&lt;br /&gt;   f(22,29,30);&lt;br /&gt;   f(22,19,28);&lt;br /&gt;   f(22,28,29);&lt;br /&gt;   f(24,27,25);&lt;br /&gt;   f(27,26,25);&lt;br /&gt;   f(14,13,27);&lt;br /&gt;   f(14,27,24);&lt;br /&gt;   f(13,16,27);&lt;br /&gt;   f(16,26,27);&lt;br /&gt;   f(17,14,24);&lt;br /&gt;   f(17,24,25);&lt;br /&gt;   f(20,23,21);&lt;br /&gt;   f(23,22,21);&lt;br /&gt;   f(12,15,23);&lt;br /&gt;   f(12,23,20);&lt;br /&gt;   f(15,19,22);&lt;br /&gt;   f(15,22,23);&lt;br /&gt;   f(18,12,21);&lt;br /&gt;   f(12,20,21);&lt;br /&gt;   f(18,19,16);&lt;br /&gt;   f(19,17,16);&lt;br /&gt;   f(13,12,18);&lt;br /&gt;   f(13,18,16);&lt;br /&gt;   f(15,14,17);&lt;br /&gt;   f(15,17,19);&lt;br /&gt;   f(9,8,14);&lt;br /&gt;   f(8,13,14);&lt;br /&gt;   f(10,11,12);&lt;br /&gt;   f(11,15,12);&lt;br /&gt;   f(11,9,14);&lt;br /&gt;   f(11,14,15);&lt;br /&gt;   f(8,10,12);&lt;br /&gt;   f(8,12,13);&lt;br /&gt;   f(2,1,8);&lt;br /&gt;   f(1,10,8);&lt;br /&gt;   f(5,6,9);&lt;br /&gt;   f(5,9,11);&lt;br /&gt;   f(1,5,10);&lt;br /&gt;   f(5,11,10);&lt;br /&gt;   f(6,2,9);&lt;br /&gt;   f(2,8,9);&lt;br /&gt;   f(4,7,5);&lt;br /&gt;   f(7,6,5);&lt;br /&gt;   f(0,1,2);&lt;br /&gt;   f(0,2,3);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   /*GroupName=LeftHand.002*/&lt;br /&gt;   vertGroupDict["LeftHand.002"]= new Array();&lt;br /&gt;   vertGroupDict["LeftHand.002"].push(76);&lt;br /&gt;   vertGroupDict["LeftHand.002"].push(77);&lt;br /&gt;   vertGroupDict["LeftHand.002"].push(79);&lt;br /&gt;   vertGroupDict["LeftHand.002"].push(80);&lt;br /&gt;   vertGroupDict["LeftHand.002"].push(81);&lt;br /&gt;   vertGroupDict["LeftHand.002"].push(82);&lt;br /&gt;   vertGroupDict["LeftHand.002"].push(83);&lt;br /&gt;   vertGroupDict["LeftHand.002"].push(84);&lt;br /&gt;   vertGroupDict["LeftHand.002"].push(85);&lt;br /&gt;   vertGroupDict["LeftHand.002"].push(86);&lt;br /&gt;   vertGroupDict["LeftHand.002"].push(87);&lt;br /&gt;&lt;br /&gt;   /*GroupName=RightHand.002*/&lt;br /&gt;   vertGroupDict["RightHand.002"]= new Array();&lt;br /&gt;   vertGroupDict["RightHand.002"].push(62);&lt;br /&gt;   vertGroupDict["RightHand.002"].push(63);&lt;br /&gt;   vertGroupDict["RightHand.002"].push(64);&lt;br /&gt;   vertGroupDict["RightHand.002"].push(65);&lt;br /&gt;   vertGroupDict["RightHand.002"].push(66);&lt;br /&gt;   vertGroupDict["RightHand.002"].push(67);&lt;br /&gt;   vertGroupDict["RightHand.002"].push(68);&lt;br /&gt;   vertGroupDict["RightHand.002"].push(69);&lt;br /&gt;   vertGroupDict["RightHand.002"].push(70);&lt;br /&gt;   vertGroupDict["RightHand.002"].push(71);&lt;br /&gt;   vertGroupDict["RightHand.002"].push(72);&lt;br /&gt;   vertGroupDict["RightHand.002"].push(73);&lt;br /&gt;   vertGroupDict["RightHand.002"].push(74);&lt;br /&gt;   vertGroupDict["RightHand.002"].push(75);&lt;br /&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;   /*GroupName=LeftLeg.1*/&lt;br /&gt;   vertGroupDict["LeftLeg.1"]= new Array();&lt;br /&gt;   vertGroupDict["LeftLeg.1"].push(17);&lt;br /&gt;   vertGroupDict["LeftLeg.1"].push(25);&lt;br /&gt;   vertGroupDict["LeftLeg.1"].push(26);&lt;br /&gt;   vertGroupDict["LeftLeg.1"].push(36);&lt;br /&gt;   vertGroupDict["LeftLeg.1"].push(37);&lt;br /&gt;   vertGroupDict["LeftLeg.1"].push(38);&lt;br /&gt;   vertGroupDict["LeftLeg.1"].push(39);&lt;br /&gt;   vertGroupDict["LeftLeg.1"].push(40);&lt;br /&gt;   vertGroupDict["LeftLeg.1"].push(41);&lt;br /&gt;   vertGroupDict["LeftLeg.1"].push(42);&lt;br /&gt;   vertGroupDict["LeftLeg.1"].push(43);&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;   /*GroupName=RightLeg.1*/&lt;br /&gt;   vertGroupDict["RightLeg.1"]= new Array();&lt;br /&gt;   vertGroupDict["RightLeg.1"].push(18);&lt;br /&gt;   vertGroupDict["RightLeg.1"].push(19);&lt;br /&gt;   vertGroupDict["RightLeg.1"].push(21);&lt;br /&gt;   vertGroupDict["RightLeg.1"].push(22);&lt;br /&gt;   vertGroupDict["RightLeg.1"].push(28);&lt;br /&gt;   vertGroupDict["RightLeg.1"].push(29);&lt;br /&gt;   vertGroupDict["RightLeg.1"].push(30);&lt;br /&gt;   vertGroupDict["RightLeg.1"].push(31);&lt;br /&gt;   vertGroupDict["RightLeg.1"].push(32);&lt;br /&gt;   vertGroupDict["RightLeg.1"].push(33);&lt;br /&gt;   vertGroupDict["RightLeg.1"].push(34);&lt;br /&gt;   vertGroupDict["RightLeg.1"].push(35);&lt;br /&gt;&lt;br /&gt;   this.x = 0.070997;&lt;br /&gt;   this.y = 0.051119;&lt;br /&gt;   this.z = 6.759333;&lt;br /&gt;&lt;br /&gt;   this.rotationX = 0.000000;&lt;br /&gt;   this.rotationY = 0.000000;&lt;br /&gt;   this.rotationZ = 0.000000;&lt;br /&gt;&lt;br /&gt;   this.scaleX = 1.000000;&lt;br /&gt;   this.scaleY = 1.000000;&lt;br /&gt;   this.scaleZ = 1.000000;&lt;br /&gt;&lt;br /&gt;   this.geometry.ready = true;&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;  public function v(x:Number, y:Number, z:Number):void {&lt;br /&gt;   ve.push(new Vertex3D(x, y, z));&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;  public function f(vertexIndex1:Number, vertexIndex2:Number, vertexIndex3:Number):void {&lt;br /&gt;   var face:Triangle3D = new Triangle3D(this, [ve[vertexIndex1], ve[vertexIndex2], ve[vertexIndex3]], null, []);&lt;br /&gt;   fa.push(face);&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  private var counter : int = 0;&lt;br /&gt;  private var theta:Number = (Math.PI/20);&lt;br /&gt;  public function apply():void {&lt;br /&gt;   var rQ : Quaternion;&lt;br /&gt;   var vs:Array = vertGroupDict["RightHand.002"];&lt;br /&gt;   var vc:int = vs.length;&lt;br /&gt;   var vsl:Array = vertGroupDict["LeftHand.002"];&lt;br /&gt;   var vcl:int = vsl.length;&lt;br /&gt;   var vsrr:Array = vertGroupDict["RightLeg.1"];&lt;br /&gt;   var vcrr:int = vsl.length;&lt;br /&gt;   var vsll:Array = vertGroupDict["LeftLeg.1"];&lt;br /&gt;   var vcll:int = vsl.length;&lt;br /&gt;   &lt;br /&gt;   counter++;&lt;br /&gt;   if(counter==5)&lt;br /&gt;   {&lt;br /&gt;    counter = 0;&lt;br /&gt;    theta = -theta;&lt;br /&gt;   }&lt;br /&gt;   for (var i:int = 0; i &lt; vc; i++) {&lt;br /&gt;    var v:Vertex3D = ve[vs[i]];&lt;br /&gt;    var n:Number3D = v.toNumber3D();&lt;br /&gt;    rQ = Quaternion.createFromAxisAngle(0,1,0,theta);&lt;br /&gt;    Matrix3D.multiplyVector4x4(rQ.matrix, n);&lt;br /&gt;    v.x = n.x;&lt;br /&gt;    v.y = n.y;&lt;br /&gt;    v.z = n.z;&lt;br /&gt;    &lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;   for (var i:int = 0; i &lt; vcl; i++) {&lt;br /&gt;    var v:Vertex3D = ve[vsl[i]];&lt;br /&gt;    var n:Number3D = v.toNumber3D();&lt;br /&gt;    rQ = Quaternion.createFromAxisAngle(0,1,0,-theta);&lt;br /&gt;    Matrix3D.multiplyVector4x4(rQ.matrix, n);&lt;br /&gt;    v.x = n.x;&lt;br /&gt;    v.y = n.y;&lt;br /&gt;    v.z = n.z;&lt;br /&gt;    &lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;   for (var i:int = 0; i &lt; vcrr; i++) {&lt;br /&gt;    var v:Vertex3D = ve[vsrr[i]];&lt;br /&gt;    var n:Number3D = v.toNumber3D();&lt;br /&gt;    rQ = Quaternion.createFromAxisAngle(1,0,0,theta);&lt;br /&gt;    Matrix3D.multiplyVector4x4(rQ.matrix, n);&lt;br /&gt;    v.x = n.x;&lt;br /&gt;    v.y = n.y;&lt;br /&gt;    v.z = n.z;&lt;br /&gt;    &lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;   for (var i:int = 0; i &lt; vcll; i++) {&lt;br /&gt;    var v:Vertex3D = ve[vsll[i]];&lt;br /&gt;    var n:Number3D = v.toNumber3D();&lt;br /&gt;    rQ = Quaternion.createFromAxisAngle(1,0,0,-theta);&lt;br /&gt;    Matrix3D.multiplyVector4x4(rQ.matrix, n);&lt;br /&gt;    v.x = n.x;&lt;br /&gt;    v.y = n.y;&lt;br /&gt;    v.z = n.z;&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;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-4506436146214758860?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/4506436146214758860/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2009/04/bone-rotation-and-quaternion.html#comment-form' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/4506436146214758860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/4506436146214758860'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2009/04/bone-rotation-and-quaternion.html' title='PV3D Bone Rotation and Quaternion'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-3065943053176469700</id><published>2009-03-07T03:42:00.000+08:00</published><updated>2009-07-02T16:42:27.592+08:00</updated><title type='text'>Font3D + as3dmod Bend中文字環測試</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://cubeparks.appspot.com/demo/Font3DTest1/RingFont3DTest.html"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_2wvFlfBxuDQ/SbF9zhjK1XI/AAAAAAAAACQ/YfKyzsedQHA/s320/RingFont3DTest.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5310163759779206514" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;在Nabble討論區有人問到如何&lt;a href="http://www.nabble.com/Bendding-TextD-td22160209.html"&gt;Bendding Text3D&lt;/a&gt;,解決的方法將每個Font3D字的頂點複製到Text3D的mesh裡頭,這樣一來as3dmod就能取mesh而彎之了&lt;br /&gt;&lt;br /&gt;以下是Andy Zupko及Mark Barcinski-2兩位提出解法的程式碼片段&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;private function flattenText3D(t : Text3D) : void {&lt;br /&gt;     for each(var l:VectorLetter3D in t.letters) {&lt;br /&gt;    t.graphics.beginFill(l.material.fillColor);&lt;br /&gt;    t.graphicsCommands = t.graphicsCommands.concat(l.graphicsCommands);&lt;br /&gt;    &lt;br /&gt;    for each( var v:Vertex3D in l.geometry.vertices){&lt;br /&gt;     var n:Number3D = v.toNumber3D();&lt;br /&gt;     Matrix3D.multiplyVector4x4(l.transform, n);&lt;br /&gt;     v.x = n.x;&lt;br /&gt;     v.y = n.y;&lt;br /&gt;     v.z = n.z;&lt;br /&gt;     &lt;br /&gt;     t.geometry.vertices.push(v);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    t.graphics.endFill();  &lt;br /&gt;    t.removeChild(l);&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;至於為何我的demo可以做到字環&lt;br /&gt;那就要從Bend類別說起&lt;br /&gt;詳情待續......&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cubeparks.appspot.com/demo/Font3DTest1/RingFont3DTest.html"&gt;[demo]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-3065943053176469700?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/3065943053176469700/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2009/03/font3d-as3dmod-bend.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/3065943053176469700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/3065943053176469700'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2009/03/font3d-as3dmod-bend.html' title='Font3D + as3dmod Bend中文字環測試'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_2wvFlfBxuDQ/SbF9zhjK1XI/AAAAAAAAACQ/YfKyzsedQHA/s72-c/RingFont3DTest.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-8706352173240223406</id><published>2009-02-23T14:21:00.000+08:00</published><updated>2009-03-10T04:57:19.590+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>Delaunay Triangulation &amp; DynamicFont3D中文字測試</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_2wvFlfBxuDQ/SaJCWZVodHI/AAAAAAAAACI/3XehGQD_RSM/s1600-h/DelaunayBasicView.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 129px;" src="http://2.bp.blogspot.com/_2wvFlfBxuDQ/SaJCWZVodHI/AAAAAAAAACI/3XehGQD_RSM/s320/DelaunayBasicView.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5305876263522038898" /&gt;&lt;/a&gt;&lt;br /&gt;這兩篇文章&lt;a href="http://labs.zavoo.com/?p=141"&gt;http://labs.zavoo.com/?p=141&lt;/a&gt; &lt;a href="http://labs.zavoo.com/?p=152"&gt;http://labs.zavoo.com/?p=152&lt;/a&gt;提到如何將PV3D的Font3D延展成立體字型&lt;br /&gt;以下是中文字型測試&lt;br /&gt;字的底部有個類似底線延展成的平面&lt;br /&gt;我還在找它出現的原由&lt;br /&gt;&lt;br /&gt;ps.&lt;br /&gt;經過測試後那個平面真的是底線造成的&lt;br /&gt;當Font3D還沒沿Z軸延展時是看不出來的&lt;br /&gt;只要去掉那幾個向量命令即可&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cubeparks.appspot.com/demo/Font3DTest1/DelaunayBasicView.html"&gt;[demo]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-8706352173240223406?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/8706352173240223406/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2009/02/dynamicfont3d_22.html#comment-form' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/8706352173240223406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/8706352173240223406'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2009/02/dynamicfont3d_22.html' title='Delaunay Triangulation &amp; DynamicFont3D中文字測試'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_2wvFlfBxuDQ/SaJCWZVodHI/AAAAAAAAACI/3XehGQD_RSM/s72-c/DelaunayBasicView.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-7391540763574343935</id><published>2009-02-19T10:09:00.000+08:00</published><updated>2009-02-21T01:33:14.501+08:00</updated><title type='text'>DynamicFont3D中文字測試</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_2wvFlfBxuDQ/SZzAPe01-5I/AAAAAAAAACA/49HZlSHg4sM/s1600-h/DynamicFont3D.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 132px;" src="http://1.bp.blogspot.com/_2wvFlfBxuDQ/SZzAPe01-5I/AAAAAAAAACA/49HZlSHg4sM/s320/DynamicFont3D.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5304325833340877714" /&gt;&lt;/a&gt;&lt;br /&gt;終於等到高手釋出DynamicFont3D(參看&lt;a href="http://labs.zavoo.com/?p=105"&gt;http://labs.zavoo.com/?p=105&lt;/a&gt;)&lt;br /&gt;趕忙寫了個中文字測試&lt;br /&gt;原程式碼會將整個GlyphTable載入記憶體&lt;br /&gt;遇到中文字型檔的話肯定會塞到爆&lt;br /&gt;所以只要動點手腳挑字&lt;br /&gt;就能在PV3D秀中文啦!!!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cubeparks.appspot.com/demo/Font3DTest1/Font3DTest.html"&gt;[demo]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-7391540763574343935?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/7391540763574343935/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2009/02/dynamicfont3d.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/7391540763574343935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/7391540763574343935'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2009/02/dynamicfont3d.html' title='DynamicFont3D中文字測試'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_2wvFlfBxuDQ/SZzAPe01-5I/AAAAAAAAACA/49HZlSHg4sM/s72-c/DynamicFont3D.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-7982800760717415875</id><published>2009-02-04T18:03:00.000+08:00</published><updated>2009-02-15T06:29:18.897+08:00</updated><title type='text'>新推出的適用於PV3D物理系統Jiglibflash</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_2wvFlfBxuDQ/SZdFqcY150I/AAAAAAAAAB4/giXH1mU1dsc/s1600-h/domino.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 118px;" src="http://4.bp.blogspot.com/_2wvFlfBxuDQ/SZdFqcY150I/AAAAAAAAAB4/giXH1mU1dsc/s320/domino.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5302783681729259330" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/jiglibflash/"&gt;JigLibFlash&lt;/a&gt;是一套新推出的適用於PV3D物理系統Jiglibflash,可偵測球體與方塊的碰撞,以下是我的範例&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cubeparks.appspot.com/demo/jiglibflash/jiglibflashTest1.html"&gt;[Demo]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-7982800760717415875?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/7982800760717415875/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2009/02/pv3djiglibflash.html#comment-form' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/7982800760717415875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/7982800760717415875'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2009/02/pv3djiglibflash.html' title='新推出的適用於PV3D物理系統Jiglibflash'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_2wvFlfBxuDQ/SZdFqcY150I/AAAAAAAAAB4/giXH1mU1dsc/s72-c/domino.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-4567901928729995974</id><published>2009-01-14T02:40:00.000+08:00</published><updated>2009-07-02T16:30:49.837+08:00</updated><title type='text'>動態改變Collada物件的材質</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://cubeparks.appspot.com/demo/MultiMatDAETest/MultiMatDAETest.html"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 180px;" src="http://1.bp.blogspot.com/_2wvFlfBxuDQ/SWzhvXw1TNI/AAAAAAAAABw/lSx_R78SGMw/s320/multimatdae.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5290851866202426578" /&gt;&lt;/a&gt;&lt;br /&gt;這是動態改變Collada物件face材質的範例&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;for each(var face:Triangle3D in mesh.geometry.faces)&lt;br /&gt;   {     &lt;br /&gt;    var color:Number = Math.random() * 0xffffff;&lt;br /&gt;    if(face.material.name == &amp;quot;Material_001&amp;quot;)&lt;br /&gt;    {&lt;br /&gt;     face.material = new ColorMaterial(color);&lt;br /&gt;    }&lt;br /&gt;    ............    &lt;br /&gt;   }&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cubeparks.appspot.com/demo/MultiMatDAETest/MultiMatDAETest.html"&gt;[demo]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-4567901928729995974?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/4567901928729995974/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2009/01/collada.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/4567901928729995974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/4567901928729995974'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2009/01/collada.html' title='動態改變Collada物件的材質'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_2wvFlfBxuDQ/SWzhvXw1TNI/AAAAAAAAABw/lSx_R78SGMw/s72-c/multimatdae.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-3580132220878189605</id><published>2009-01-08T06:26:00.000+08:00</published><updated>2009-01-12T03:09:18.045+08:00</updated><title type='text'>PV3D春聯(PV3D Spring Festival Couplets)</title><content type='html'>年關將近&lt;br /&gt;打算用PV3D做些春聯當作練習&lt;br /&gt;相關作品集中在這裡&lt;br /&gt;&lt;a href="http://3dspringfestivalcouplets.appspot.com/"&gt;http://3dspringfestivalcouplets.appspot.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-3580132220878189605?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/3580132220878189605/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2009/01/spring-festival-couplets.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/3580132220878189605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/3580132220878189605'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2009/01/spring-festival-couplets.html' title='PV3D春聯(PV3D Spring Festival Couplets)'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-6535238532102022611</id><published>2008-12-06T04:57:00.000+08:00</published><updated>2008-12-06T05:31:13.572+08:00</updated><title type='text'>CropCircle Cloud with FogFilter</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://cubeparks.appspot.com/demo/CropCircleCloud/CropCircleCloudx.html"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px; height: 110px;" src="http://2.bp.blogspot.com/_2wvFlfBxuDQ/STmWajTIR5I/AAAAAAAAABY/mGbA8_wbaRc/s320/cropcirclecloud.jpg" alt="" id="BLOGGER_PHOTO_ID_5276413821337487250" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;這個範例是參考PV3D的經典範例PaperCloud及zupko.info的&lt;br /&gt;&lt;a href="http://blog.zupko.info/?p=134"&gt;FogFilter - Papervision gets some more depth&lt;/a&gt;一文所做成的霧化特效&lt;br /&gt;&lt;br /&gt;   1.   var fogMaterial:FogMaterial = new FogMaterial(0xFFFFFF);&lt;br /&gt;   2.   var fogLayers:int = 20;&lt;br /&gt;   3.   var minDepth:Number = 800;&lt;br /&gt;   4.   var maxDepth:Number = 1600;&lt;br /&gt;   5.      &lt;br /&gt;   6.   renderer.filter = new FogFilter(fogMaterial, fogLayers, minDepth, maxDepth);&lt;br /&gt;只要套上以上程式段落即可,遠處的麥田圈就有霧化的效果&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cubeparks.appspot.com/demo/CropCircleCloud/CropCircleCloudx.html"&gt;[View  the Demo]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-6535238532102022611?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/6535238532102022611/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2008/12/zupko.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/6535238532102022611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/6535238532102022611'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2008/12/zupko.html' title='CropCircle Cloud with FogFilter'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_2wvFlfBxuDQ/STmWajTIR5I/AAAAAAAAABY/mGbA8_wbaRc/s72-c/cropcirclecloud.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-3130516978624469191</id><published>2008-12-04T01:58:00.000+08:00</published><updated>2008-12-04T02:36:53.214+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>地球與MERKABA</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://cubeparks.appspot.com/demo/MerKaBa/MerKaBa2x.html"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 282px;" src="http://1.bp.blogspot.com/_2wvFlfBxuDQ/STbK06EtqbI/AAAAAAAAABQ/brLD7qeK6C8/s320/merkaba2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5275627023802149298" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;以下是節錄&lt;a href="http://zh.wikipedia.org/wiki/%E5%87%B8%E5%87%B9%E7%BA%B9%E7%90%86%E6%98%A0%E5%B0%84"&gt;維基百科&lt;/a&gt;&lt;br /&gt;凸凹紋理映射（bump mapping），又稱為皺面貼圖，是一項計算機圖形學技術，在這項技術中每個待渲染的像素在計算照明之前都要加上一個從高度圖中找到的擾動。這樣得到的結果表面表現更加豐富、細緻，更加接近物體在自然界本身的模樣&lt;br /&gt;&lt;br /&gt;範例中的地球,就是原圖加上高度圖（Height map）以PV3D的PhongShader所做出的效果&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cubeparks.appspot.com/demo/MerKaBa/MerKaBa2x.html"&gt;[Demo]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-3130516978624469191?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/3130516978624469191/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2008/12/bump-mapping.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/3130516978624469191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/3130516978624469191'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2008/12/bump-mapping.html' title='地球與MERKABA'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_2wvFlfBxuDQ/STbK06EtqbI/AAAAAAAAABQ/brLD7qeK6C8/s72-c/merkaba2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-4482487709424880254</id><published>2008-11-25T18:10:00.000+08:00</published><updated>2008-11-25T18:43:48.160+08:00</updated><title type='text'>Buddha &amp; Christ</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://cubeparks.appspot.com/demo/RGBseparater/RGBseparaterx.html"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 140px;" src="http://1.bp.blogspot.com/_2wvFlfBxuDQ/SSvTf8MY3cI/AAAAAAAAABI/Y2_MmH1RRZI/s320/BuddhaChrist.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5272540334454791618" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;這是參考&lt;a href="http://clockmaker.jp/blog-en/2008/11/rgb-image-separater-with-papervision3d/#more-111"&gt;ClockMaker Demos--RGB Image Separater with Papervision3D&lt;/a&gt;所做的範例,使用BitmapData的copyChannel() 方法將不同顏色色版複製到不同的PV3D Plane上&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cubeparks.appspot.com/demo/RGBseparater/RGBseparaterx.html"&gt;[demo]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-4482487709424880254?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/4482487709424880254/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2008/11/buddha-christ.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/4482487709424880254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/4482487709424880254'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2008/11/buddha-christ.html' title='Buddha &amp; Christ'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_2wvFlfBxuDQ/SSvTf8MY3cI/AAAAAAAAABI/Y2_MmH1RRZI/s72-c/BuddhaChrist.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-6183386843786169128</id><published>2008-11-18T17:56:00.000+08:00</published><updated>2008-11-20T00:11:25.455+08:00</updated><title type='text'>金色MerKaBa</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://cubeparks.appspot.com/demo/MerKaBa/MerKaBax.html"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 189px;" src="http://2.bp.blogspot.com/_2wvFlfBxuDQ/SSKTtjNnDMI/AAAAAAAAAA4/TuZ4q9rBSG8/s320/merkaba.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5269936924732624066" /&gt;&lt;/a&gt;&lt;br /&gt;當兩個三角面相交時會發生Z-fighting現象&lt;br /&gt;PV3D的QuadrantRenderEngine可以解決這個問題&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cubeparks.appspot.com/demo/MerKaBa/MerKaBax.html"&gt;[demo]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-6183386843786169128?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/6183386843786169128/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2008/11/merkaba.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/6183386843786169128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/6183386843786169128'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2008/11/merkaba.html' title='金色MerKaBa'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_2wvFlfBxuDQ/SSKTtjNnDMI/AAAAAAAAAA4/TuZ4q9rBSG8/s72-c/merkaba.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-2125744896358365293</id><published>2008-11-11T16:40:00.000+08:00</published><updated>2008-11-20T00:24:12.570+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>海豚</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://cubeparks.appspot.com/demo/MD2Test/MD2Testx.html"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 182px;" src="http://1.bp.blogspot.com/_2wvFlfBxuDQ/SRp9NDPUKAI/AAAAAAAAAAw/EVX9_noGoVY/s320/dolphin.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5267660377324529666" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;海豚是載入MD2模型&lt;br /&gt;洶湧的海浪則是AS3DMOD製造出的效果&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cubeparks.appspot.com/demo/MD2Test/MD2Testx.html"&gt;[demo1]&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://cubeparks.appspot.com/demo/MD2Test/MD2Test2x.html"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 186px;" src="http://2.bp.blogspot.com/_2wvFlfBxuDQ/SSQ5SD-TsRI/AAAAAAAAABA/n_N5dta81xQ/s320/dolphin2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5270400446397395218" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;第二個DEMO的海浪&lt;br /&gt;是AS3DMOD+shader+perlinnoise做出的效果&lt;br /&gt;&lt;a href="http://cubeparks.appspot.com/demo/MD2Test/MD2Test2x.html"&gt;[demo2]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-2125744896358365293?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/2125744896358365293/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2008/11/blog-post.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/2125744896358365293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/2125744896358365293'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2008/11/blog-post.html' title='海豚'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_2wvFlfBxuDQ/SRp9NDPUKAI/AAAAAAAAAAw/EVX9_noGoVY/s72-c/dolphin.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-2448624408064897438</id><published>2008-10-21T09:24:00.000+08:00</published><updated>2008-10-21T09:42:48.343+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>衛星繞著行星</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://cubeparks.appspot.com/demo/IFrameFont3DDemo/IFrameFont3DDemo.html"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_2wvFlfBxuDQ/SP0zIRQGdGI/AAAAAAAAAAo/fmpZk5e63PY/s320/iframe3dfont.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5259416157001512034" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;這個Demo只是簡單的衛星繞著行星&lt;br /&gt;只要滑鼠點擊有標上文字的星球&lt;br /&gt;就能相關網頁載入IFrame&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cubeparks.appspot.com/demo/IFrameFont3DDemo/IFrameFont3DDemo.html"&gt;&lt;br /&gt;[My demo]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-2448624408064897438?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/2448624408064897438/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2008/10/blog-post.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/2448624408064897438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/2448624408064897438'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2008/10/blog-post.html' title='衛星繞著行星'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_2wvFlfBxuDQ/SP0zIRQGdGI/AAAAAAAAAAo/fmpZk5e63PY/s72-c/iframe3dfont.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-8617156838504210550</id><published>2008-10-09T00:27:00.000+08:00</published><updated>2008-10-17T18:11:57.991+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>PV3D加入新特點Frustum Clipping</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://cubeparks.appspot.com/demo/FrustumClippingTest/FrustumClippingTest.swf"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://2.bp.blogspot.com/_2wvFlfBxuDQ/SOzg2nDRNLI/AAAAAAAAAAM/WduLjkyeylY/s320/FrustumClippingTest.jpg" alt="" id="BLOGGER_PHOTO_ID_5254822094034777266" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;PV3D加入新特點Frustum Clipping,讓3D場景快速運轉時不會導致破圖&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;程式寫法很簡單的,只要加入一行&lt;/p&gt;&lt;br /&gt;&lt;pre class="code"&gt;renderer.clipping = new FrustumClipping(FrustumClipping.ALL);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;即可。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_2wvFlfBxuDQ/SO-PShp8duI/AAAAAAAAAAc/qV2Vam2EcdA/s1600-h/Frustum.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://4.bp.blogspot.com/_2wvFlfBxuDQ/SO-PShp8duI/AAAAAAAAAAc/qV2Vam2EcdA/s320/Frustum.jpg" alt="" id="BLOGGER_PHOTO_ID_5255576838599374562" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;FrustumClipping 可用的引數如下&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;FrustumClipping.NEAR&lt;br /&gt;&lt;/li&gt;&lt;li&gt;FrustumClipping.RIGHT&lt;br /&gt;&lt;/li&gt;&lt;li&gt;FrustumClipping.LEFT&lt;br /&gt;&lt;/li&gt;&lt;li&gt;FrustumClipping.TOP&lt;br /&gt;&lt;/li&gt;&lt;li&gt;FrustumClipping.BOTTOM&lt;br /&gt;&lt;/li&gt;&lt;li&gt;FrustumClipping.ALL&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cubeparks.appspot.com/demo/FrustumClippingTest/FrustumClippingTest.swf"&gt;FrustumClippingTest.swf&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;這是參照&lt;a href="http://blog.zupko.info/?p=170" target="_blank"&gt;zupko.info | Papervision3D - Now Featuring Frustum Clipping&lt;/a&gt;的原始碼所改成的範例&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.zupko.info/?p=170" target="_blank"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-8617156838504210550?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/8617156838504210550/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2008/10/pv3dfrustum-clipping.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/8617156838504210550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/8617156838504210550'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2008/10/pv3dfrustum-clipping.html' title='PV3D加入新特點Frustum Clipping'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_2wvFlfBxuDQ/SOzg2nDRNLI/AAAAAAAAAAM/WduLjkyeylY/s72-c/FrustumClippingTest.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-1898026731853544198</id><published>2008-10-01T02:02:00.000+08:00</published><updated>2008-10-11T01:30:36.815+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>漂浮的文章</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://cubeparks.appspot.com/demo/Pv3dmodDemo1.swf"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_2wvFlfBxuDQ/SOzhYvj3FSI/AAAAAAAAAAU/-2BAy8tbBKY/s320/douder.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5254822680434513186" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;最近使用&lt;a name="AS3Dmod_is_a_cross-engine_modifier_library_in_AS3."&gt;AS3Dmod這套3D修改器試寫了個小程式,讓文字可以有漂浮的效果,還蠻有趣的&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://cubeparks.appspot.com/demo/Pv3dmodDemo1.swf"&gt;Pv3dmodDemo1&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a name="AS3Dmod_is_a_cross-engine_modifier_library_in_AS3."&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-1898026731853544198?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/1898026731853544198/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2008/09/blog-post.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/1898026731853544198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/1898026731853544198'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2008/09/blog-post.html' title='漂浮的文章'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_2wvFlfBxuDQ/SOzhYvj3FSI/AAAAAAAAAAU/-2BAy8tbBKY/s72-c/douder.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-5936125645453746540</id><published>2008-08-29T05:48:00.000+08:00</published><updated>2008-08-29T05:49:43.355+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blender'/><title type='text'>3D模型製作--使用Blender</title><content type='html'>測試中&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-5936125645453746540?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/5936125645453746540/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2008/08/3d-blender.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/5936125645453746540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/5936125645453746540'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2008/08/3d-blender.html' title='3D模型製作--使用Blender'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-1310666731042076058</id><published>2008-08-24T02:44:00.000+08:00</published><updated>2008-08-29T05:52:26.471+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>My Papervision3D+WOW demo site</title><content type='html'>This is my new web site.&lt;br /&gt;&lt;a href="http://cubeparks.appspot.com/"&gt;http://cubeparks.appspot.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is a demo site to show how to run WOW-Engine ver2 with Papervision3D greatWhite.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-1310666731042076058?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/1310666731042076058/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2008/08/this-is-my-new-web-site.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/1310666731042076058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/1310666731042076058'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2008/08/this-is-my-new-web-site.html' title='My Papervision3D+WOW demo site'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-3195858986411078703</id><published>2008-04-16T03:08:00.000+08:00</published><updated>2008-04-16T03:18:15.897+08:00</updated><title type='text'>Google App Engine嘗鮮</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Google新推出的Google App Engin,目前還不能登入使用,不過倒是可以先下載SDK,在自己的電腦跑跑Python網頁程式&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/9146467412288508136-3195858986411078703?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/3195858986411078703/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2008/04/google-app-engine.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/3195858986411078703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/3195858986411078703'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2008/04/google-app-engine.html' title='Google App Engine嘗鮮'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9146467412288508136.post-6289206715676324506</id><published>2008-04-16T02:50:00.000+08:00</published><updated>2008-04-16T02:53:12.567+08:00</updated><title type='text'>開版囉</title><content type='html'>開版囉&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9146467412288508136-6289206715676324506?l=charlieincloud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charlieincloud.blogspot.com/feeds/6289206715676324506/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://charlieincloud.blogspot.com/2008/04/blog-post.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/6289206715676324506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9146467412288508136/posts/default/6289206715676324506'/><link rel='alternate' type='text/html' href='http://charlieincloud.blogspot.com/2008/04/blog-post.html' title='開版囉'/><author><name>Charlie (查理)</name><uri>http://www.blogger.com/profile/05289323168921854277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
