[AYUDA!] OpenGL display list y vbo

Hola buenas compis, tengo un problemilla con los vbo de opengl, actualmente uso display list, ya que son super cómodos, y el paso a vbo me está matando ya que no consigo que pinte absolutamente nada, tampoco es posición de cámara (o eso creo), os paso pego la clase que funciona bien con display list, y el intento de paso a vbo a ver si podéis darme alguna pista, por mas que leo no consigo que ande xD

Display List
import OpenGL
from OpenGL.GL import *
from OpenGL.GLUT import *
from OpenGL.GLU import *
from OpenGL.GL.ARB.vertex_buffer_object import *
from OpenGL.arrays import vbo
import numpy
import random
class chunk:
    def __init__ (self):
        self.size_tile = 0.64
        self.DL_mapa = glGenLists(1)
        self.load_map()

    def draw(self):
        glCallList(self.DL_mapa)

    def load_map(self):
        glNewList(self.DL_mapa, GL_COMPILE)
        for x in xrange(16):
            for y in xrange(1):
                for z in range(16):
                    self.create_voxel(x,y,z)

        glEndList()

    def create_voxel(self,bx,by,bz):
        tile = 1
        if tile == 0:
            return True

        #actual position
        bx = bx * self.size_tile
        by = by * self.size_tile
        bz = bz * self.size_tile
#
        #texture_info_temp = [int(tile), 0];
        #textureXOffset = float(texture_info_temp[0]/16.0)+0.001
        #textureYOffset = float(16 - int(texture_info_temp[0]/16)/16.0)-0.001
        #textureHeight  = float(0.060)
        #textureWidth   = float(0.060)
        size_tile2 = (self.size_tile/2)
        #top
    #    glBegin(GL_QUADS)
    #    glTexCoord2f(textureXOffset, textureYOffset - textureHeight)
    #    glVertex3f( bx-(size_tile/2), by-(size_tile/2), by+(size_tile/2))
    #
    #    glTexCoord2f(textureXOffset + textureWidth, textureYOffset - textureHeight)
    #    glVertex3f( bx + (size_tile/2), by-(size_tile/2), by+(size_tile/2))
    #
    #    glTexCoord2f(textureXOffset + textureWidth, textureYOffset)
    #    glVertex3f( bx + (size_tile/2), by+(size_tile/2), by+(size_tile/2))
    #
    #    glTexCoord2f(textureXOffset,textureYOffset)
    #    glVertex3f( bx-(size_tile/2),by+(size_tile/2), by+(size_tile/2))
    #    glEnd()

        glBegin(GL_QUADS)                # Begin drawing the color cube with 6 quads
        # Top face (y = 1.0f)
        glColor3f(0.0, random.uniform(0.0 , 1.0), 0.0)
        glVertex3f( bx+(size_tile2), by+(size_tile2), bz-(size_tile2))
        glVertex3f( bx-(size_tile2), by+(size_tile2), bz-(size_tile2))
        glVertex3f( bx-(size_tile2), by+(size_tile2), bz+(size_tile2))
        glVertex3f( bx+(size_tile2), by+(size_tile2), bz+(size_tile2))

        # Bottom face (y = 1-(size_tile2/2.0f)
        glColor3f(0.0, 0.0, 0.0)
        glVertex3f( bx+(size_tile2), by-(size_tile2), bz+(size_tile2))
        glVertex3f( bx-(size_tile2), by-(size_tile2), bz+(size_tile2))
        glVertex3f( bx-(size_tile2), by-(size_tile2), bz-(size_tile2))
        glVertex3f( bx+(size_tile2), by-(size_tile2), bz-(size_tile2))

        # Front face  (z = 1.0f)
        glColor3f(0.0, 0.0, 0.0)
        glVertex3f( bx+(size_tile2), by+(size_tile2), bz+(size_tile2))
        glVertex3f( bx-(size_tile2), by+(size_tile2), bz+(size_tile2))
        glVertex3f( bx-(size_tile2), by-(size_tile2), bz+(size_tile2))
        glVertex3f( bx+(size_tile2), by-(size_tile2), bz+(size_tile2))

        # Back face (z = 1-(size_tile2/2.0f)
        glColor3f(0.0, 0.0, 0.0)
        glVertex3f( bx+(size_tile2), by-(size_tile2), bz-(size_tile2))
        glVertex3f( bx-(size_tile2), by-(size_tile2), bz-(size_tile2))
        glVertex3f( bx-(size_tile2), by+(size_tile2), bz-(size_tile2))
        glVertex3f( bx+(size_tile2), by+(size_tile2), bz-(size_tile2))

        # Left face (x = 1-(size_tile2/2.0f)
        glColor3f(0.0, 0.0, 0.0)
        glVertex3f( bx-(size_tile2), by+(size_tile2), bz+(size_tile2))
        glVertex3f( bx-(size_tile2), by+(size_tile2), bz-(size_tile2))
        glVertex3f( bx-(size_tile2), by-(size_tile2), bz-(size_tile2))
        glVertex3f( bx-(size_tile2), by-(size_tile2), bz+(size_tile2))

        # Right face (x = 1.0f)
        glColor3f(0.0, 0.0, 0.0)
        glVertex3f( bx+(size_tile2), by+(size_tile2), bz-(size_tile2))
        glVertex3f( bx+(size_tile2), by+(size_tile2), bz+(size_tile2))import OpenGL
from OpenGL.GL import *
from OpenGL.GLUT import *
from OpenGL.GLU import *
from OpenGL.GL.ARB.vertex_buffer_object import *
from OpenGL.arrays import vbo
from OpenGL.arrays import ArrayDatatype as ADT
import numpy
import random
class chunk:
    def __init__ (self):
        self.size_tile = 0.64
        self.load_map()
    def draw(self):
        glBindBufferARB(GL_ARRAY_BUFFER_ARB, self.vboVertices)
        glVertexPointer(3, GL_FLOAT, 8, 0)
        glDrawArrays( GL_QUADS, 1, GL_UNSIGNED_SHORT)
        glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0)

    def load_map(self):

        self.vboVertices = glGenBuffersARB(1)
        self.vboNormales = glGenBuffersARB(1)
        self.vboTextura = glGenBuffersARB(1)

        vbo_vertex = []
        for z in range(16):
                    for y in range(1):
                        for x in range(16):
                            bx = x * self.size_tile
                            by = y * self.size_tile
                            bz = z * self.size_tile
                            size_tile2 = (self.size_tile/2)
                            v0 = (bx+(size_tile2), by+(size_tile2), bz-(size_tile2))
                            v1 = (bx-(size_tile2), by+(size_tile2), bz-(size_tile2))
                            v2 = (bx-(size_tile2), by+(size_tile2), bz+(size_tile2))
                            v3 = (bx+(size_tile2), by+(size_tile2), bz+(size_tile2))
                            vbo_vertex.append([v0,v1,v2, v3])

        self.vertex = numpy.array(vbo_vertex, 'f')

        glBindBufferARB( GL_ARRAY_BUFFER_ARB, self.vboVertices )
        glBufferDataARB( GL_ARRAY_BUFFER_ARB, ADT.arrayByteCount(self.vertex), self.vertex, GL_STATIC_DRAW_ARB )
        glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0)
        glVertex3f( bx+(size_tile2), by-(size_tile2), bz+(size_tile2))
        glVertex3f( bx+(size_tile2), by-(size_tile2), bz-(size_tile2))
        glEnd()  # End of drawing color-cube


VBO (intento)
import OpenGL
from OpenGL.GL import *
from OpenGL.GLUT import *
from OpenGL.GLU import *
from OpenGL.GL.ARB.vertex_buffer_object import *
from OpenGL.arrays import vbo
from OpenGL.arrays import ArrayDatatype as ADT
import numpy
import random
class chunk:
    def __init__ (self):
        self.size_tile = 0.64
        self.load_map()
    def draw(self):
        glBindBufferARB(GL_ARRAY_BUFFER_ARB, self.vboVertices)
        glVertexPointer(3, GL_FLOAT, 8, 0)
        glDrawArrays( GL_QUADS, 1, GL_UNSIGNED_SHORT)
        glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0)

    def load_map(self):

        self.vboVertices = glGenBuffersARB(1)
        self.vboNormales = glGenBuffersARB(1)
        self.vboTextura = glGenBuffersARB(1)

        vbo_vertex = []
        for z in range(16):
                    for y in range(1):
                        for x in range(16):
                            bx = x * self.size_tile
                            by = y * self.size_tile
                            bz = z * self.size_tile
                            size_tile2 = (self.size_tile/2)
                            v0 = (bx+(size_tile2), by+(size_tile2), bz-(size_tile2))
                            v1 = (bx-(size_tile2), by+(size_tile2), bz-(size_tile2))
                            v2 = (bx-(size_tile2), by+(size_tile2), bz+(size_tile2))
                            v3 = (bx+(size_tile2), by+(size_tile2), bz+(size_tile2))
                            vbo_vertex.append([v0,v1,v2, v3])

        self.vertex = numpy.array(vbo_vertex, 'f')

        glBindBufferARB( GL_ARRAY_BUFFER_ARB, self.vboVertices )
        glBufferDataARB( GL_ARRAY_BUFFER_ARB, ADT.arrayByteCount(self.vertex), self.vertex, GL_STATIC_DRAW_ARB )
        glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0)


edit: se me olvido dar las gracias ;)
0 respuestas