2008-11-22 00:44:00
使用wxGlCanvas的心得
wxPython中的wxGLCanvas可以用OpenGL來顯示3D影像或是利用硬體加速影像的顯示。預設是使用single buffer,要使用double buffer需要在參數裡指定。
attribList = (glcanvas.WX_GL_RGBA, # RGBA
glcanvas.WX_GL_DOUBLEBUFFER, # Double Buffered
glcanvas.WX_GL_STENCIL_SIZE,1) # 24 bit
glcanvas.GLCanvas.__init__(self, -1,attribList=attribList)
OpenGL中的glDrawPixels()是用來將某矩陣中的資訊,畫到frame buffer的方法。這個矩陣中的資料通常是一個影像圖片,以RGBRGBRGB...的形式存放。當這個影像的寬度不是4的倍數時,螢幕上畫出來的圖片會有奇怪的偏移現象。這可能是由於glDrawPixels要求每行像素是4 Bytes的倍數。如果在影像寬度不是4的倍數的狀況時,glDrawPixels會在一行的最後跳過最後一個像素,而造成每行的像素沒有對齊的情形。簡單的修正方法如下(以python為例)。
image = wx.Image()
w = image.GetWidth()
h = image.GetHeight()
if w % 4 == 1:
w = w -1
elif w % 4 == 2:
w = w -2
elif w % 4 == 3:
w = w -3
glDrawPixels(w, h, GL_RGB, GL_UNSIGNED_BYTE, image.GatData())
參考資料:
http://wiki.wxpython.org/GLCanvas
http://www.gamedev.net/community/forums/topic.asp?topic_id=297351
2008-11-03 21:59:08
Mental Ray Shade習作
由於個人目前實在沒有用Renderman的機會,於是我想利用閒暇時間,將以前寫過的Renderman shader改寫為Mental Ray shader。目前做完兩個,還有一堆需要改寫並加強。希望能把當初畢業製作用的所有shader都改為Mental Ray版本,這樣要重新算圖也比較有可能。
2008-10-18 01:55:20
用來編譯Maya pluign 和Mentalray shader的SCons script
上週末利用Cutter練習寫Mentalray shader時,發現實在很難用預設的功能來編譯shader。於是就嘗試自己寫Scons用的script來輔助編譯,順便也寫了一個編Maya plugin用的。其實用Eclipse寫plugin或shader時就可以直接用它C++專案的Makefile方式下去編譯,寫這兩個script這純粹是練功兼拿到沒有Eclipse 3.3的環境下用。
簡單的使用步驟:
還有要注意的是,Sconscript.mentalray可以讓你在Win32的環境下編譯,但是預設是使用VC9。同時,它也需要裝Microsoft Platform SDK。預設都是搭配Maya 8.5 devkit。
Sconscript.mayaSconscript.mentalray
2008-09-18 03:14:49
改變fluxbox下移動視窗的預設熱鍵
使用Maya時,通常使用Alt鍵搭配滑鼠以改變攝影機視角。但是這個組合技會和X window預設的移動視窗功能相衝。一般使用Gnome或KDE者,可方便的利用圖形介面去修改預設熱鍵。使用fluxbox則可修改使用者目錄下的設定檔:
vi ~/.fluxbox/init將其中的
session.modKey: Mod1修改為
session.modKey: Mod4即可改由視窗鍵取代Alt鍵。
2008-08-22 13:51:35
如何使用gnome-mount
在比較新的Linux發行版裡,Gnome桌面環境下掛載硬碟磁區的方式和以往稍有不同。傳統的mount指令還是可以使用,不過一般桌面環境下可以用gnome-mount使用HAL代替。掛載可使用以下例子:
gnome-mount -d /dev/sda1 -m DISK1卸載則是:
gnome-mount -u -d /dev/sda1在Fedora Core 8預設的環境下,這樣作會把/dev/sda1掛載到/media/DISK1。也不用切換成root以使用mount。
2008-07-23 19:57:24
使用DrQueue 0.64.3搭配Maya8.5與Linux架設Render Farm
利用DrQueue架設Render Farm時,可搭配各種網路磁碟服務(NFS or Samba)來達成。我利用Fedora Core 8內裝好的NFS來進行架設。當作檔案共享的主機設定好exports檔之外,要注意防火牆與目錄基本權限的設定。務必確定連線順暢。DrQueue的安裝只要按照安裝文件一步步進行即可。使用Fedore Core可以很方便的裝好GCC,Python與Scons等套件以進行編譯。DrQueue本身具備跨平台的特性,利用Cygwin也可在Windows的環境下編譯。不過,安裝時有很多地方得自行手動執行,並不如Linux環境方便。
DrQueue預設的設定檔位置是先搜尋以下目錄
/etc/drqueue /usr/local/drqueue/etc其中的.conf檔案多半是告訴相關程式如何找分享的logs,tmp,db這些子目錄。重點是,logs和tmp這兩個子目錄必須讓所有的master和slave機器都能讀取寫入,tmp子目錄也必須讓每台slave機器能執行其中所暫存的script。因此在利用NFS進行分享檔案時,就要注意exports的寫法。此外,logs子目錄是用來收集所有機器運算後產生log檔,因此也必須讓所有Render Farm裡的機器有寫入的權限。
在搭配Maya8.5使用DrQueue時,預設的樣板script會去呼叫
/usr/aw/maya/bin/Render這個指令。不過因為Maya的預設安裝路徑已改為
/usr/autodesk/maya8.5所以簡單的解法便是
ln -s /usr/aw/maya /usr/autodesk/maya8.5
當然,為了放置要執行算圖的檔案和專案,還要有一個目錄是開放給所有機器都能讀寫的。這個目錄在每個slave機器上用的掛載點必須相同。一般使用者要算圖時,只要將專案檔放置在這個目錄下,再利用drqman即可方便的使用。
2008-07-15 01:10:14
在Maya一啟動時立刻執行MEL指令的方法
Maya在圖形模式啟動時會去執行任何寫在userSetup.mel裡的MEL指令。這個userSetup.mel通常是藉由在Maya.env裡設定MAYA_SCRIPT_PATH來搜尋。如果想重載預設的MEL指令函式,一樣可以在這邊寫入或是利用source 的方式達成。例如要使用自訂的mentalrayCustomNodeClass.mel時,即可在userSetup.mel寫入:
source "/path/to/your/mentalrayCustomNodeClass.mel"如此每次啟動Maya便會自動載入修改過的版本。
2008-07-15 00:45:16
如何在Maya增加自訂mentalray shader時顯示樣本圖片
依據Swatch rendering in mental ray for Maya,所需修改的檔案為
/usr/autodesk/maya8.5-x64/scripts/others/mentalrayCustomNodeClass.mel將自訂的shader名稱,加入node type的判斷,並選擇使用file swatch或者是interactive swatch即可。這個樣本圖示會在hypershade和attribute editor中顯示。
使用自訂shader時,其他相關檔案還包括mentalrayCustomNodeID.mel等等。
2008-04-13 11:23:04
使用Eclipse開發Maya plugin時關於除錯的一些設定
在試著找過文件並且請教朋友之後,終於找到應該設定Degugger的參數的種類。首先,由於我們要進行除錯的Maya plugin是個shared library,這其實表示我們要除錯的應用程式是Maya本身。在使用Eclipse的CDT時,新增一個給Maya的Debug設定,並且是使用C/C++ Local Application的預設設定來修改。以下條列應該修改的設定和環境參數,其餘設定可用預設值。
Debug/yourplugin.so改為maya.bin的位置。例如:
/usr/autodesk/maya8.5-x64/bin/maya.bin
LD_LIBRARY_PATH /usr/autodesk/maya8.5-x64/lib MAYA_DEBUG_NO_SIGNAL_HANDLERS 1 MAYA_LOCATION /usr/autodesk/maya8.5-x64
以上是必要的基本設定,其他部份的設定可參考自己需求修改。
參考資料
Using a debugger to debug your plug-ins
2008-04-09 01:14:21
使用Eclipse開發Maya plugin的一些設定
在Linux的環境下,藉由Eclipe也可以直接設定程式專案來開發Maya plug-in。對程式專案所需要的修改的設定和進行OpenGL專案的部份也很類似,但是稍微複雜些。這是因為在Compiler和Linker的部份參數較多。以下條列我目前發現需要修改的部份。需要注意的是,這只是針對單一plugin的撰寫,並不是建立一個build system。
首先當然要新增一個C++程式專案,並選擇專案型態為Shared
Library。在這個新專案中,修改其Project Properties中關於C/C++ Build的Settings部份。主要要增加的有:
C/C++ Build -> Settings -> GCC C++ Compiler -> Preprocessor:
在Defined symbols(-D)內加入_BOOL,LINUX, REQUIRE_IOSTREAM
C/C++ Build -> Settings -> GCC C++ Compiler -> Directories:
在Include paths (-I) 內加入Maya include
path(如:/usr/autodesk/maya8.5-x64/include)
C/C++ Build -> Settings -> GCC C++ Compiler -> Optimization:
在Other optimization flags欄位可加入"-pthread"或其他旗標
C/C++ Build -> Settings -> GCC C++ Compiler -> Miscellaneous:
在Other flags欄位,要加入"-fPIC"及"-fno-gnu-keywords"
以上這些是針對Compiler部份。以下則是針對Linker的部份
C/C++ Build -> Settings -> GCC C++ Linker -> Libraries:
在Libraries(-l)這裡需要增加的項目其實是可多可少。全部都寫上也無不可。目前發現需要加入的有
OpenMaya OpenMayaRender OpenMayaAnim OpenMayaUI OpenMayaFX GL GLU glut在Library serach path(-L)的部份一樣需要加入Maya library path(如:/usr/autodesk/maya8.5-x64/lib)
C/C++ Build -> Settings -> GCC C++ Linker -> Miscellaneous: 加入"-D_BOOL -DLINUX -DREQUIRE_IOSTREAM"
值得注意的是Debug的部份目前還沒找到好的作法。在Maya官方文件當中所提及的只有利用
maya -d ddd的方式來使用ddd作為除錯的工具。
參考資料Writing a Plugin