2012-11-01 62 views
7

के साथ काम करने के लिए वीबीओ कैसे प्राप्त करें निम्नलिखित पायथन प्रोग्राम को विंडो के ऊपरी दाएं चतुर्भुज में एक सफेद त्रिकोण बनाना चाहिए।पाइथन और पायओपेनजीएल

import pygame 
from OpenGL.GL import * 
from ctypes import * 

pygame.init() 
screen = pygame.display.set_mode ((800,600), pygame.OPENGL|pygame.DOUBLEBUF, 24) 
glViewport (0, 0, 800, 600) 
glClearColor (0.0, 0.5, 0.5, 1.0) 
glEnableClientState (GL_VERTEX_ARRAY) 

vertices = [ 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0 ] 
vbo = glGenBuffers (1) 
glBindBuffer (GL_ARRAY_BUFFER, vbo) 
glBufferData (GL_ARRAY_BUFFER, len(vertices)*4, (c_float*len(vertices))(*vertices), GL_STATIC_DRAW) 

running = True 
while running: 

    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      running = False 

    glClear (GL_COLOR_BUFFER_BIT) 

    glBindBuffer (GL_ARRAY_BUFFER, vbo) 
    glVertexPointer (3, GL_FLOAT, 0, 0) 

    glDrawArrays (GL_TRIANGLES, 0, 3) 

    pygame.display.flip() 

यह कोई त्रुटि नहीं फेंक देगा, लेकिन दुर्भाग्य से यह त्रिकोण नहीं खींचता है।

मैं भी एक NumPy सरणी के रूप में बफर डेटा सबमिट करने की कोशिश की:

glBufferData (GL_ARRAY_BUFFER, len(vertices)*4, np.array (vertices, dtype="float32"), GL_STATIC_DRAW) 

इसके अलावा कोई त्रिकोण ली गई है। PyOpenGL ... वाई यू कोई ड्रा वीबीओ?

मेरा सिस्टम: पायथन 2.7.3; ओपनजीएल 4.2.0; लिनक्स टकसाल माया 64 बिट

उत्तर

5

ठीक है, मैं सिर्फ यह पाया:

glVertexPointer कॉल के 4 पैरामीटर None एक शून्य सूचक

glVertexPointer (3, GL_FLOAT, 0, None) 

मैं कसम खाता हूँ, मैं कल रात घंटे के लिए खोज का प्रतिनिधित्व होना चाहिए और उसे नहीं देखा।

+1

Google पर दूसरी हिट ["वेरटेक्स बफर ऑब्जेक्ट"।] (Http://www.songho.ca/opengl/gl_vbo.html) –

+0

ओह ने मुझे कुछ ग्रे बालों से बचाया। यह 'GL.glVertexAttribPointer (0, 4, GL.GL_FLOAT, GL.GL_FALSE, 0, कोई नहीं) के साथ समान है। पिछले पैरामीटर के रूप में '0' पास करना शायद सी/सी ++ कोड में काम करता है, लेकिन स्पष्ट रूप से PyOpenGL में नहीं। इसे 'कोई नहीं' होना चाहिए। इससे पहले कि मैंने इसे पाया, मैंने कई घंटे डिबगिंग बिताई। मैं पहले से ही पागल हो रहा था। तुमने मुझे बचाया, बहुत बहुत धन्यवाद! –

+0

अंतिम पैरामीटर प्रकार GLvoid * है और इसे ctypes.c_void_p (ऑफ़सेट) में परिवर्तित किया जाना चाहिए, [link] देखें (https://bitbucket.org/tartley/gltutpy/src/tip/t02.playing-with-colors /VertexColors.py) – Adrian