openglpython3d重构_重构以使用openglvbos

我正在从OpenGL Programming Guide学习OpenGL,并有一个立方体工作的简单三维视图。我知道使用vbo应该有助于提高性能,我想修改我的代码来使用它们。我很难让这个工作,并没有真正找到好的干净的例子在网上。在

这是我的工作。在

我的进口是:import numpy as np

from OpenGL.GL import *

from OpenGL.arrays import vbo

from OpenGL.GLU import *

from OpenGL.GLUT import *

在我的初始化中,我有:

^{pr2}$

在我的绘图代码中:# clear color and depth buffers

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

glEnableClientState(GL_VERTEX_ARRAY)

glEnableClientState(GL_NORMAL_ARRAY)

# self.position_vbo.bind()

glVertexPointer(3, GL_FLOAT, 0, self.positions)

# self.normal_vbo.bind()

glNormalPointer(GL_FLOAT, 0, self.normals)

glColor3f(0., 1., 0.)

glDrawElements(GL_QUADS, 24, GL_UNSIGNED_INT, self.faces)

glDisableClientState(GL_VERTEX_ARRAY)

glDisableClientState(GL_NORMAL_ARRAY)

为了重构它以使用vbo,我在init中添加了以下内容:self.position_vbo = vbo.VBO(self.positions)

self.normal_vbo = vbo.VBO(self.normals)

self.faces_vbo = vbo.VBO(self.faces, target=GL_ELEMENT_ARRAY_BUFFER)

并更改绘图以绑定VBO:# clear color and depth buffers

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

glEnableClientState(GL_VERTEX_ARRAY)

glEnableClientState(GL_NORMAL_ARRAY)

self.position_vbo.bind()

glVertexPointer(3, GL_FLOAT, 0, 0)

self.normal_vbo.bind()

glNormalPointer(GL_FLOAT, 0, 0)

self.faces_vbo.bind()

glIndexPointer(GL_UNSIGNED_INT, 0, 0)

glColor3f(0., 1., 0.)

glDrawElements(GL_QUADS, 24, GL_UNSIGNED_INT, None)

glDisableClientState(GL_VERTEX_ARRAY)

glDisableClientState(GL_NORMAL_ARRAY)

我还尝试在VBOs中只放置位置和法线,而不使用faces。我还尝试在gldrawerElements中使用0而不是None。在

还有一个类似的问题here,只是它没有使用PyOpenGL中可用的vbo.VBO包装。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值