十一月 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