如何在PyOpenGL中使用glBufferData()? [英] How to use glBufferData() in PyOpenGL?
本文介绍了如何在PyOpenGL中使用glBufferData()?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何在与OpenGL的PyOpenGL python绑定中使用glBufferData()?
How do you use glBufferData() in the PyOpenGL python bindings to OpenGL?
当我运行以下代码时
import sys
from OpenGL.GL import *
from PySide.QtCore import *
from PySide.QtGui import *
from PySide.QtOpenGL import *
class SimpleTestWidget(QGLWidget):
def __init__(self):
QGLWidget.__init__(self)
def initializeGL(self):
self._vertexBuffer = glGenBuffers(1)
glBindBuffer(GL_ARRAY_BUFFER, self._vertexBuffer)
vertices = [0.5, 0.5, -0.5, 0.5, -0.5, -0.5, 0.5, -0.5]
glBufferData(GL_ARRAY_BUFFER, vertices, GL_STATIC_DRAW) # Error
def paintGL(self):
glViewport(0, 0, self.width(), self.height())
glClearColor(0.0, 1.0, 0.0, 1.0)
glClear(GL_COLOR_BUFFER_BIT)
glEnableClientState(GL_VERTEX_ARRAY)
glBindBuffer(GL_ARRAY_BUFFER, self._vertexBuffer)
glVertexPointer(2, GL_FLOAT, 0, 0)
glColor3f(1.0, 0.0, 0.0)
glDrawArrays(GL_QUADS, 0, 4)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = SimpleTestWidget()
w.show()
app.exec_()
然后调用glBufferData()会导致错误消息
then the call to glBufferData() results in the error message
Haven't implemented type-inference for lists yet
该代码应该在绿色背景上绘制一个红色矩形.
The code is supposed to paint a red rectangle on a green background.
推荐答案
作为一种解决方法,在支持列表之前,将顶点作为numpy数组传递:
As a workaround, until lists are supported, pass the vertices as a numpy array:
vertices = numpy.array([0.5, 0.5, -0.5, 0.5, -0.5, -0.5, 0.5, -0.5],
dtype='float32')
glVertexPointer调用应为glVertexPointer(2, GL_FLOAT, 0, None)
The glVertexPointer call should be glVertexPointer(2, GL_FLOAT, 0, None)
这篇关于如何在PyOpenGL中使用glBufferData()?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文