十一月 2008 Archives

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


Posted by Wesly Chu | Permanent Link | Categories: 3D CG

2008-11-03 21:59:08

Mental Ray Shade習作

由於個人目前實在沒有用Renderman的機會,於是我想利用閒暇時間,將以前寫過的Renderman shader改寫為Mental Ray shader。目前做完兩個,還有一堆需要改寫並加強。希望能把當初畢業製作用的所有shader都改為Mental Ray版本,這樣要重新算圖也比較有可能。

ST Coloration shader
Image filter shader


Posted by Wesly Chu | Permanent Link | Categories: 3D CG