Hi, Thanks again for your help. I had a clear for the depth buffer in the real code, and had tried passing the number of vertices rather than quads, so I think the type of the array was the main issue. I probably wouldn't have spotted that, as I didn't know you could define the type of the array in numpy. I'll read a bit more about numpy now!
Thanks, Jamie On Mar 31, 5:07 am, Gary Herron <[EMAIL PROTECTED]> wrote: > Jamie wrote: > > Hi, > > > I've finally had a chance to write some code to try and do this and it > > just > > doesn't seem to display anything. I'm probably doing something > > stupid, but > > I can't see it. I've set up a minimal test case that replicates what > > i'm > > doing in my app (below), and it also fails to display anything. Is > > there a > > flag i'm missing? Gary, does this look similar to what you do in your > > code? > > It's close, but there are several little problems. > > * If you are going to do depth testing, you need to clear the depth > buffer. Otherwise all draws past the first will not pass the depth > test and fail to draw anything. > > glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT) > > * Your array's type is (by default) numpy.float64 (i.e., doubles), > but you tell glVertexPointer that you are passing floats. This is > what you should tell it. (Or, since doubles are way overkill, > change your array to dtype=numpy.float32). > glVertexPointer(2,GL_DOUBLE, > > 0,self.cverts.ctypes.data_as(ctypes.POINTER(ctypes.c_double))) > > * Your call to glDrawArrays is supposed to provide the number of > vertices not the number of quads. > glDrawArrays(GL_QUADS,0,4*50) > > * Your method of building arrays is VERY inefficient -- every append > creates a new array, copies from the old, and ultimately deletes the > old. Try this instead: > self.vertarray = array([ [10+10*i,10+10*i, 10+10*i,20+10*i, > 20+10*i,20+10*i, 20+10*i,10+10*i] > for i in range(50) > ], > dtype=float64) > self.vertarray=self.vertarray.reshape(50*4,2) # Unneeded, > but nice > > (I threw the +10*i into each coordinate to calculate 50 *different* > quads rather than one quad 50 times.) > > * The call > glEnable(GL_VERTEX_ARRAY) > is not needed. In fact it's wrong, but seems to neither hurt nor > cause an error. Weird. > > * The calls to glPushClientAttrib and glPopClientAttrib do nothing > useful (in this code; Don't know about your real code). > > Hope that helps. > > Gary Herron > > -- > Gary Herron, PhD. > Department of Computer Science > DigiPen Institute of Technology > (425) 895-4418 > > > It looks to be doing the same thing as your example too incantus > > (thanks for that), > > but i'm not using textures or colourpointers. > > > Thanks, > > > Jamie > > > from pyglet import window > > from pyglet.gl import * > > import pyglet > > from pyglet.window import key > > > import random as rd > > import ctypes > > from numpy import * > > > class VertexArrayTest(pyglet.window.Window): > > > def __init__(self): > > super(VertexArrayTest,self).__init__(800,600) > > self.glInit() > > self.setupVA() > > > def glInit(self): > > glClearColor(0, 0, 0, 0.0) > > glMatrixMode(GL_PROJECTION) > > glLoadIdentity() > > glOrtho(0.0, 800.0, 0.0, 600.0, 0, 20.0) > > glMatrixMode(GL_MODELVIEW) > > > glEnable(GL_DEPTH_TEST) > > glEnable(GL_VERTEX_ARRAY) > > > glLoadIdentity() > > > def setupVA(self): > > self.vertarray=array([]) > > for i in range(50): > > self.vertarray=append(self.vertarray,[10,10]) > > self.vertarray=append(self.vertarray,[10,20]) > > self.vertarray=append(self.vertarray,[20,20]) > > self.vertarray=append(self.vertarray,[20,10]) > > > #self.vertarray=self.vertarray.reshape(50*4,2) > > > def on_draw(self): > > glClear(GL_COLOR_BUFFER_BIT) > > > glLoadIdentity() > > > glEnableClientState(GL_VERTEX_ARRAY) > > glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT) > > self.cverts = ascontiguousarray(self.vertarray) > > glColor4f(1,0,1,1) > > > glVertexPointer(2,GL_FLOAT, > > 0,self.cverts.ctypes.data_as(ctypes.POINTER(ctypes.c_float))) > > > glDrawArrays(GL_QUADS,0,50) > > glPopClientAttrib() > > > vat=VertexArrayTest() > > pyglet.app.run() > > > On Mar 28, 3:50 pm, Gary Herron <[EMAIL PROTECTED]> wrote: > > >> Jamie wrote: > > >>> Hi, > > >>> I'm just starting to have a play with pyglet as a warm-up for pyweek > >>> next week and I really like it. At the moment i'm just playing around > >>> with particles and I was wondering if it's possible to use a numpy > >>> array with glVertexPointer. I want to can use numpy's fast > >>> manipulation of arrays to move the particles in the array around, then > >>> pass this array straight through as a vertex array. Is this possible > >>> at all? I know glVertexPointer expects a ctypes array, but is there > >>> any way to convert between the two? Numpy arrays now have a ctypes > >>> property to allow their data to be accessed from C, but i'm guessing > >>> it's not as simple as that as it probably doesn't contain GLFloats? > > >>> Is there any other way to quickly manipulate a large array without > >>> using numpy that I should be looking at instead? I'm struggling with > >>> frame-rates when doing it in pure python. > > >>> Thanks, > > >>> Jamie > > >> Yes, it is easily done, and the conversion is a one-liner that does > >> *not* copy the array. Here's the several relevant lines of code pulled > >> directly from my pyglet application. This works on Python2.5, Windows > >> and Linux, with pyglet 1.0 and 1.1. > > >> def PointerToNumpy(a, ptype=ctypes.c_float): > >> a = numpy.ascontiguousarray(a) # Probably a NO-OP, but > >> perhaps not > >> return a.ctypes.data_as(ctypes.POINTER(ptype)) # Ugly and undocumented! > > >> glVertexPointer(3, GL_FLOAT, 0, PointerToNumpy(VertexData)) > > >> Hope that helps, > > >> Gary Herron --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "pyglet-users" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/pyglet-users?hl=en -~----------~----~----~----~------~----~------~--~---
