Chương trình Python sau đây sẽ vẽ một hình tam giác màu trắng ở góc phần tư phía trên bên phải của cửa sổ.Cách để VBO hoạt động với Python và PyOpenGL
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()
Nó sẽ không ném bất kỳ lỗi nào, nhưng tiếc là nó không vẽ hình tam giác.
Tôi cũng đã cố gắng để gửi dữ liệu đệm như một NumPy mảng:
glBufferData (GL_ARRAY_BUFFER, len(vertices)*4, np.array (vertices, dtype="float32"), GL_STATIC_DRAW)
Cũng không có hình tam giác được vẽ. PyOpenGL ... Y U KHÔNG vẽ VBO?
Hệ thống của tôi: Python 2.7.3; OpenGL 4.2.0; Linux Mint Maya 64 bit
Lần truy cập thứ hai trên Google cho ["Vertex Buffer Object".] (Http://www.songho.ca/opengl/gl_vbo.html) –
Ồ đã cứu tôi khỏi mái tóc màu xám. Nó giống với 'GL.glVertexAttribPointer (0, 4, GL.GL_FLOAT, GL.GL_FALSE, 0, None)'. Chuyển '0' như tham số cuối cùng có thể hoạt động trong mã C/C++, nhưng dường như không có trong PyOpenGL. Nó phải là 'None'. Tôi đã dành vài giờ gỡ lỗi trước khi tôi tìm thấy điều này. Tôi đã phát điên rồi. Bạn đã cứu tôi, cảm ơn rất nhiều! –
Thông số cuối cùng là loại GLvoid * và phải được chuyển đổi thành ctypes.c_void_p (offset), xem [link] (https://bitbucket.org/tartley/gltutpy/src/tip/t02.playing-with-colors /VertexColors.py) – Adrian