2014-04-13 50 views
0

我剛剛開始使用OpenGL並嘗試使用Python 2.7創建基本的「hello world」類型的OpenGL應用程序,pygame和pyOpenGL使用GPU呈現一些2D圖形。當試圖創建一個頂點緩衝區的頂點數據:pyOpenGL無法創建頂點緩衝區對象

Traceback (most recent call last): 
    File "test.py", line 126, in <module> 
    main() 
    File "test.py", line 59, in main 
    vertexbuffer = vbo.VBO([[0, 0], [1, 0], [1, 1], [0, 1], [2.2, 2.2], [2.7, 2.7], [2.2, 3.2], [1.7, 2.7]]) 
    File "/usr/lib/python2.7/site-packages/OpenGL/arrays/vbo.py", line 180, in __init__ 
    self.set_array(data, size) 
    File "/usr/lib/python2.7/site-packages/OpenGL/arrays/vbo.py", line 204, in set_array 
    self.size = ArrayDatatype.arrayByteCount(self.data) 
    File "/usr/lib/python2.7/site-packages/OpenGL/arrays/arraydatatype.py", line 176, in arrayByteCount 
    return cls.getHandler(value).arrayByteCount(value) 
AttributeError: 'ListHandler' object has no attribute 'arrayByteCount' 

vbo.VBOOpenGL.arrays.vbo.VBO

非常困惑這一點。搜索此錯誤消息產生絕對沒有具體。

任何見解?

編輯:我想我會包括在此VBO調用之前執行的代碼。

def init(screen_size): 
    screen = pygame.display.set_mode(screen_size, HWSURFACE | OPENGL | DOUBLEBUF) 

    glViewport(0, 0, screen_size[0], screen_size[1]) 

    glShadeModel(GL_SMOOTH) 
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST) 

    viewport = glGetIntegerv(GL_VIEWPORT) 

    glMatrixMode(GL_PROJECTION) 
    glLoadIdentity() 
    glFrustum(-1.0, 1.0, 1.0, -1.0, 1, 10.0); 

    glMatrixMode(GL_MODELVIEW) 
    glLoadIdentity() 

從回溯的vbo.VBO(...)線這個init()後立即調用。

回答

0

解決了我自己。 vbo.VBO想要numpy型數組(numpy.array),而不是普通列表。

+0

這不提供問題的答案。要批評或要求作者澄清,在他們的帖子下留下評論 - 你總是可以評論你自己的帖子,一旦你有足夠的[聲譽](http://stackoverflow.com/help/whats-reputation),你會能夠[評論任何帖子](http://stackoverflow.com/help/privileges/comment)。 –

+0

對不起,我不明白。你是說這不是一個答案嗎?我會說這是,我知道,因爲我在這裏回答我自己的問題。你是說不清楚嗎?在這種情況下,我會編輯澄清。 – orost