DAEMC2 是一個讓 PV3D 可以讀取 dae 動作模型的組件,藉由它,可以讓你在 PV3D 中控制撥放預先制作好的動作。
http://www.asn.com.tw/flex/BoxMan/BoxMan.html
程式參考 這裡,但改成了 DAEMC2 版 frame 的新的操作方式。
DAEMC2 教學可以參考 影片
2009年11月20日 星期五
2009年11月11日 星期三
Paper Vision 3D 正確 destory 物件的方法
由於 AS3 有 garbage collection 的機制,這樣的機制有好有壞,但千萬別以為有 garbage collection 就不用去在意 memory 的議題,因為不管 garbage collection 運作的原理是什麼,它總還是有一套運作的規則,不去依循這個規則的話,仍然會造成 memory leaks。
garbage collection 主要的扮演角色的是在程式背後的「管理程式」,記錄、管理使用者(這裡指程式設計師) 記憶體的使用狀況,它底層的意義就是在記錄某段記憶體是不是有物件(指標、參考…)指向它,若沒的話,便能進行釋放。
可以想像的到,一個環狀的參考一定會造成 garbage collection 的困擾,因此,在具備 garbage collection 的系統下寫程式,有些地方便要特別注意,才不會造成問題。
以前在 C++,常常會使用指標將自己 allocate 到的 memory 記錄下來,以便在物件 destroy 時一併釋放,但在 garbage collection 系統,這樣的習慣卻會造成「過多的」或「意外的」參考到了沒用到的記憶體,反而造成 garbage collection 無法正確運作。
因此在寫 AS3 時,儘量在要用到時才去 new 一個物件,而不需要在初始化時就把一切 new 出來放在私有變數裡去作準備,當然,這也不是通則,期待更好的 garbage collection 系統出現。
回歸正題,Paper Vision 3D 物件的創建跟刪除便出現了類似上述的問題,當你用「動態」的產生物件 (譬如 sphere 或 cube) 時,由於物件需要參考到 Material 材質,而材質又會記錄著使用這個 Material 的物件 list,於是當你刪除物件( 從 scene 移除並設為 null ) 卻發現 garbage collection 起不了作用,memory 依然被佔用住,這樣的 memory leaks 造成的後果會非常嚴重,memory 用量會不斷攀升,最後效能直線下降。
在 Paper Vision 3D 團隊還沒修正這段(bug?)或 改用更好的作法之前…
解決方法:
private function destory3DObject():void
{
var objArray:Array = new Array();
var obj:DisplayObject3D;
for each ( obj in this.scene.objects )
objArray.push(obj);
for ( obj=objArray.pop(); obj; obj=objArray.pop() )
{
var mmArray:Array = new Array();
var mm:MaterialObject3D;
for each ( mm in obj.materials )
mmArray.push(mm);
for ( mm=mmArray.pop(); mm; mm=mmArray.pop() )
{
mm.interactive = false;
mm.unregisterObject(obj);
obj.materials.removeMaterial(mm);
mm.destroy();
}
obj.materials = null;
//obj.material.animated = false;
obj.material.interactive = false;
obj.material.unregisterObject(obj);
this.scene.removeChild( obj );
obj.material.destroy()
obj.material = null;
}
}
每個步驟的先後順序很重要,次序相反有可能還是沒清楚跟 garbage collection 系統交待好你不要這段 memory 了,你會發現,最後參考到這段 memory 的會是區域變數 var obj,如此才能保證在離開 scope 後沒有任何參考指標與該物件有關聯。
這個函式是一次清除所有的 DisplayObject3D物件,若只想清除物定物件,那可以使用 array 來裝你的 DisplayObject3D 物件即可,程式雷同。
所以其實 garbage collection 好壞見仁見智吧,好像只不過換了方式去管理你創出來的物件/記憶體罷了,恐怕還是需要瞭解黑箱下的作業方式,才能真正去掌握你所有的資源。
garbage collection 主要的扮演角色的是在程式背後的「管理程式」,記錄、管理使用者(這裡指程式設計師) 記憶體的使用狀況,它底層的意義就是在記錄某段記憶體是不是有物件(指標、參考…)指向它,若沒的話,便能進行釋放。
可以想像的到,一個環狀的參考一定會造成 garbage collection 的困擾,因此,在具備 garbage collection 的系統下寫程式,有些地方便要特別注意,才不會造成問題。
以前在 C++,常常會使用指標將自己 allocate 到的 memory 記錄下來,以便在物件 destroy 時一併釋放,但在 garbage collection 系統,這樣的習慣卻會造成「過多的」或「意外的」參考到了沒用到的記憶體,反而造成 garbage collection 無法正確運作。
因此在寫 AS3 時,儘量在要用到時才去 new 一個物件,而不需要在初始化時就把一切 new 出來放在私有變數裡去作準備,當然,這也不是通則,期待更好的 garbage collection 系統出現。
回歸正題,Paper Vision 3D 物件的創建跟刪除便出現了類似上述的問題,當你用「動態」的產生物件 (譬如 sphere 或 cube) 時,由於物件需要參考到 Material 材質,而材質又會記錄著使用這個 Material 的物件 list,於是當你刪除物件( 從 scene 移除並設為 null ) 卻發現 garbage collection 起不了作用,memory 依然被佔用住,這樣的 memory leaks 造成的後果會非常嚴重,memory 用量會不斷攀升,最後效能直線下降。
在 Paper Vision 3D 團隊還沒修正這段(bug?)或 改用更好的作法之前…
解決方法:
private function destory3DObject():void
{
var objArray:Array = new Array();
var obj:DisplayObject3D;
for each ( obj in this.scene.objects )
objArray.push(obj);
for ( obj=objArray.pop(); obj; obj=objArray.pop() )
{
var mmArray:Array = new Array();
var mm:MaterialObject3D;
for each ( mm in obj.materials )
mmArray.push(mm);
for ( mm=mmArray.pop(); mm; mm=mmArray.pop() )
{
mm.interactive = false;
mm.unregisterObject(obj);
obj.materials.removeMaterial(mm);
mm.destroy();
}
obj.materials = null;
//obj.material.animated = false;
obj.material.interactive = false;
obj.material.unregisterObject(obj);
this.scene.removeChild( obj );
obj.material.destroy()
obj.material = null;
}
}
每個步驟的先後順序很重要,次序相反有可能還是沒清楚跟 garbage collection 系統交待好你不要這段 memory 了,你會發現,最後參考到這段 memory 的會是區域變數 var obj,如此才能保證在離開 scope 後沒有任何參考指標與該物件有關聯。
這個函式是一次清除所有的 DisplayObject3D物件,若只想清除物定物件,那可以使用 array 來裝你的 DisplayObject3D 物件即可,程式雷同。
所以其實 garbage collection 好壞見仁見智吧,好像只不過換了方式去管理你創出來的物件/記憶體罷了,恐怕還是需要瞭解黑箱下的作業方式,才能真正去掌握你所有的資源。
2009年11月10日 星期二
BOX2D + PV3D 物理運動模擬-線上測試盒
網址 :http://www.asn.com.tw/flex/box2dpv3d_world.htm
使用方法,在 creat 頁,填上整個 world 的 XML 描述檔,再按 creat 即可建立一個新的物理模擬世界,按 sample world 有範例可以參考。
說明:
這個程式是依據 boristhebrave Box2DWith 的 Box2D XML loader
線上建立 Box2D 物件,同時轉換成 PV3D 物件對應( 目前支援 CUBE、SPHERE )
支援 TAG 如下…(細節請參考 boristhebrave 的 b2XML.as 文件說明)
world
body
circle
box
distance
prismatic
revolute
gear
<body userData="PV3D" position="200 100" id="head">
<circle radius="15" density="1" friction="0.4" restitution="0.3">
</body>
即是在XY座標(200,100)的位置建立一個半徑15的圓,其密度=1,摩擦力=0.4,反彈=0.3
其中 userData="PV3D" 代表要同時建立一個 PV3D 的對應3D物件-球。
更新…
2009/11/13-PV3D物件增加z軸初始及物件厚度的解析。(BOX適用)
語法:userData="PV3D,Z,DEPTH"
範例:userData="PV3D,50,20" - 在z軸50的位置上建立厚度20的PV3D物件(CUBE)
*實際碰撞處理仍為BOX2D引擎。
使用方法,在 creat 頁,填上整個 world 的 XML 描述檔,再按 creat 即可建立一個新的物理模擬世界,按 sample world 有範例可以參考。
說明:
這個程式是依據 boristhebrave Box2DWith 的 Box2D XML loader
線上建立 Box2D 物件,同時轉換成 PV3D 物件對應( 目前支援 CUBE、SPHERE )
支援 TAG 如下…(細節請參考 boristhebrave 的 b2XML.as 文件說明)
world
body
circle
box
distance
prismatic
revolute
gear
<body userData="PV3D" position="200 100" id="head">
<circle radius="15" density="1" friction="0.4" restitution="0.3">
</body>
即是在XY座標(200,100)的位置建立一個半徑15的圓,其密度=1,摩擦力=0.4,反彈=0.3
其中 userData="PV3D" 代表要同時建立一個 PV3D 的對應3D物件-球。
更新…
2009/11/13-PV3D物件增加z軸初始及物件厚度的解析。(BOX適用)
語法:userData="PV3D,Z,DEPTH"
範例:userData="PV3D,50,20" - 在z軸50的位置上建立厚度20的PV3D物件(CUBE)
*實際碰撞處理仍為BOX2D引擎。
2009年11月3日 星期二
2009年10月22日 星期四
繪圖型LCM模組當文字型輸出
繪圖型LCM模組 WG14432A 跟 文字型有相當程度的不同
但一樣可以當成文字型來使用
要注意RAM排列方式的不同,例如換行(設定DDRAM位址)指令…
void LCM_line2( void )
{
/// a = 0xC0; /// 文字型 LCM
a = 0x90; /// 繪圖型 LCM
LCM_WriteCommand();
}
但一樣可以當成文字型來使用
要注意RAM排列方式的不同,例如換行(設定DDRAM位址)指令…
void LCM_line2( void )
{
/// a = 0xC0; /// 文字型 LCM
a = 0x90; /// 繪圖型 LCM
LCM_WriteCommand();
}
2009年10月19日 星期一
IntraWeb 如何使用 POST/GET 傳遞參數
IntraWeb 的 WebApplication 要透過以前表單 POST/GET 的方式來傳遞參數該如何實現?
//// FROM METHOD="GET"
usrParam:=WebApplication.Request.QueryFields.Values['usr'];
pwdParam:=WebApplication.Request.QueryFields.Values['pwd'];
//// FORM METHOD="POST"
usrParam:=WebApplication.Request.ContentFields.Values['usr'];
pwdParam:=WebApplication.Request.ContentFields.Values['pwd'];
//// FROM METHOD="GET"
usrParam:=WebApplication.Request.QueryFields.Values['usr'];
pwdParam:=WebApplication.Request.QueryFields.Values['pwd'];
//// FORM METHOD="POST"
usrParam:=WebApplication.Request.ContentFields.Values['usr'];
pwdParam:=WebApplication.Request.ContentFields.Values['pwd'];
2009年9月14日 星期一
IntraWeb Template 控制方法
來源網址:
http://hi.baidu.com/rarnu/blog/item/e9875d82dfce14a00df4d24b.html
一、創建 IntraWeb 工程
新建一個 VCL Web Application,一切都用默認值創建。將 unit1.pas 重命名為 IWIndex.pas,主窗體的 Name 設為 FIndex。
二、在工程中放置控件
放置一個 IWTemplateProcessorHTML 和 6 個 IWButton,名稱分別改為 Button1~Button6,位置隨便放,放得很亂也行。
三、建立文件夾
在工程的保存目錄下建立一個名為 Template 的文件夾,然後設置 ServerController 的 TemplateDir 屬性為 Template 目錄。
四、新建 Html 文件
在 Delphi 中新建一個 Html 文件,Delphi2007 擁有 Html 的可視化設計功能,非常強大。
如圖所示設計好 HTML,並保存在 Template 目錄下,文件名為 FIndex.html
注意:下圖中右邊是 HTML 控件欄,可以將頁面控件直接拖到 HTML 中來完成設計。
五、設置 IWTemplateProcessorHTML 控件的屬性
將 Template 屬性展開,將下面所有的屬性都設為 FIndex.html
將主窗體的 LayoutManager 屬性設為 IWTemplateProcessorHTML
六、運行程序
如圖所示,原本排列混亂的按鈕已經排得很整齊了。
也許你會問,下面怎麼多出一個長條形的按鈕,那是我在 HTML 中寫入的。
七、擴展
通過使用 HTML 模板,可以方便的擴展 IntraWeb 的可用性,使其變得更強大,更美觀。
由於 IntraWeb 本身不帶有 Table 一類的控件,因此要完成頁面佈局,使用 HTML 是必然的
如果你覺得頁面不好看或是功能不夠強,也可以在 HTML 中加入 CSS 或 JavaScript,以完成更多的功能。
==================================================
注意事項:
一、要在 IIS 上跑 IntraWeb 的 ISAPI 程式,需要把 Cache 資料夾目錄的權限打開(共享)
二、ServerController 還有 HtmlHeader 這個屬性可以設定。
三、TemplateDir 清空即可使用預設目錄 template。
四、上面第五點的 Template 屬性,應為 Templates 屬性 (TIWTemplateFiles),底下有對應不同瀏灠器應用的 template file,直接填檔名即可。
五、在測試的時候,dllhost.exe 這個程序刪除才能重來。
http://hi.baidu.com/rarnu/blog/item/e9875d82dfce14a00df4d24b.html
一、創建 IntraWeb 工程
新建一個 VCL Web Application,一切都用默認值創建。將 unit1.pas 重命名為 IWIndex.pas,主窗體的 Name 設為 FIndex。
二、在工程中放置控件
放置一個 IWTemplateProcessorHTML 和 6 個 IWButton,名稱分別改為 Button1~Button6,位置隨便放,放得很亂也行。
三、建立文件夾
在工程的保存目錄下建立一個名為 Template 的文件夾,然後設置 ServerController 的 TemplateDir 屬性為 Template 目錄。
四、新建 Html 文件
在 Delphi 中新建一個 Html 文件,Delphi2007 擁有 Html 的可視化設計功能,非常強大。
如圖所示設計好 HTML,並保存在 Template 目錄下,文件名為 FIndex.html
注意:下圖中右邊是 HTML 控件欄,可以將頁面控件直接拖到 HTML 中來完成設計。
五、設置 IWTemplateProcessorHTML 控件的屬性
將 Template 屬性展開,將下面所有的屬性都設為 FIndex.html
將主窗體的 LayoutManager 屬性設為 IWTemplateProcessorHTML
六、運行程序
如圖所示,原本排列混亂的按鈕已經排得很整齊了。
也許你會問,下面怎麼多出一個長條形的按鈕,那是我在 HTML 中寫入的。
七、擴展
通過使用 HTML 模板,可以方便的擴展 IntraWeb 的可用性,使其變得更強大,更美觀。
由於 IntraWeb 本身不帶有 Table 一類的控件,因此要完成頁面佈局,使用 HTML 是必然的
如果你覺得頁面不好看或是功能不夠強,也可以在 HTML 中加入 CSS 或 JavaScript,以完成更多的功能。
==================================================
注意事項:
一、要在 IIS 上跑 IntraWeb 的 ISAPI 程式,需要把 Cache 資料夾目錄的權限打開(共享)
二、ServerController 還有 HtmlHeader 這個屬性可以設定。
三、TemplateDir 清空即可使用預設目錄 template。
四、上面第五點的 Template 屬性,應為 Templates 屬性 (TIWTemplateFiles),底下有對應不同瀏灠器應用的 template file,直接填檔名即可。
五、在測試的時候,dllhost.exe 這個程序刪除才能重來。
附註 :
IIS安裝後要把指令碼及執行檔的權限打開,還有目錄的使用權限設定。如下…
IIS安裝後要把指令碼及執行檔的權限打開,還有目錄的使用權限設定。如下…
訂閱:
文章 (Atom)
VirtualBox 空間減肥
@windows vm sdelete64 -z c: @macos VBoxManage modifymedium disk "/Users/fellow/VirtualBox VMs/Win10/Win10.vdi" --compact *.vdi...
-
ARis... ARis 是日本一間公司出品的產品,應用了 ARToolKit 技術。 展示影片在這… http://www.youtube.com/watch?v=yCCx7zANsGE YouTube上可以找到更多類似的影片。 這邊是我用 FLARToolK...
-
install… sudo apt-get install bluez sudo hciconfig hci0 up scan… sudo hcitool lescan or scan if no response... sudo bluetoothctl ...
-
由於ASSEMBLA即將開始收費,因此要把所有的SVN進行大搬家,連帶的一些教學文件也跟著搬家了,看來還是GOOGLE的窩最舒適(重點是免費) FPPA實驗平台教學教材-使用C語言 FPPA實驗平台簡介 實驗(一) 8位元LED輸出單元 與 模組設計總論 實驗(二) 按鍵開關輸入...

