opengl og vertex arrays?

rasmuskaae
Level 2 - Grain of sand
Posts: 23
Joined: 11 Mar 2008, 08:56
Contact:

opengl og vertex arrays?

Unread post by rasmuskaae » 10 Aug 2010, 08:57

hejsa

jeg har lidt problemer med følgende kode:

Code: Select all


#ifdef _DEBUG
	assert(glVertexPointer!=0);
	assert(glDrawArrays!=0);
	GLint value;
	glGetIntegerv(GL_MAX_ELEMENTS_VERTICES, &value);
	assert(value>0);
#endif
	glEnableClientState(GL_VERTEX_ARRAY);
	glVertexPointer(particles.size(), GL_FLOAT, 0, particle_array);
	glDrawArrays(GL_POINTS, 0, particles.size());
	glDisableClientState(GL_VERTEX_ARRAY);
Problemet er at programmet crasher i funktionen "glDrawArrays" med noget der minder om en null pointer exception. Jeg har forsøgt med alle størrelser af "particles"-array (alt fra 0-100.000). Når jeg indsætter 0 kører programmet fint mens det allerede ved 1 crasher.

User avatar
Crisium
Level 7 - Spellcaster
Posts: 71
Joined: 13 Mar 2008, 17:57
Location: Odense C
Contact:

Re: opengl og vertex arrays?

Unread post by Crisium » 10 Aug 2010, 11:23

can you please show us the particle_array creation

regards,
Peter Wraae Marino
kind regards,
Peter Wraae Marino

http://www.osghelp.com - support site for OpenSceneGraph

rasmuskaae
Level 2 - Grain of sand
Posts: 23
Joined: 11 Mar 2008, 08:56
Contact:

Re: opengl og vertex arrays?

Unread post by rasmuskaae » 10 Aug 2010, 11:36

Code: Select all

 std::vector<particle> particles;
 ....
 particle * particle_array = &particles[0];

User avatar
Crisium
Level 7 - Spellcaster
Posts: 71
Joined: 13 Mar 2008, 17:57
Location: Odense C
Contact:

Re: opengl og vertex arrays?

Unread post by Crisium » 10 Aug 2010, 11:37

rasmuskaae wrote:

Code: Select all

 std::vector<particle> particles;
 ....
 particle * particle_array = &particles[0];
and the particle object please...

peter
kind regards,
Peter Wraae Marino

http://www.osghelp.com - support site for OpenSceneGraph

rasmuskaae
Level 2 - Grain of sand
Posts: 23
Joined: 11 Mar 2008, 08:56
Contact:

Re: opengl og vertex arrays?

Unread post by rasmuskaae » 10 Aug 2010, 11:39

Code: Select all

class particle {
public: 
float x,y,z;
}

User avatar
Crisium
Level 7 - Spellcaster
Posts: 71
Joined: 13 Mar 2008, 17:57
Location: Odense C
Contact:

Re: opengl og vertex arrays?

Unread post by Crisium » 10 Aug 2010, 11:52

rasmuskaae wrote:

Code: Select all

class particle {
public: 
float x,y,z;
}

ok.. great.. now I can get started...
I don't know what your default memory alignment is or what compile/platform you are on.. so I'm assuming windows.

float x,y,z; is normal 12 byes aligned .. if you default alignment is 16 or 32 you will have some empty memory between your values.. try putting a pragma that aligns the memory to 1 (4 should work too with your example)

then change the following:

glVertexPointer(particles.size(), GL_FLOAT, 0, particle_array);

to

glVertexPointer(3, GL_FLOAT, 0, particle_array);

good luck,
peter
kind regards,
Peter Wraae Marino

http://www.osghelp.com - support site for OpenSceneGraph

rasmuskaae
Level 2 - Grain of sand
Posts: 23
Joined: 11 Mar 2008, 08:56
Contact:

Re: opengl og vertex arrays?

Unread post by rasmuskaae » 10 Aug 2010, 12:19

d'oh, i read the size parameter as count :-)

thanks

User avatar
ZeroHero
Level 36 - Tron
Posts: 362
Joined: 21 Jul 2009, 19:03
Location: England
Contact:

Re: opengl og vertex arrays?

Unread post by ZeroHero » 10 Aug 2010, 17:45

Jeg tror ikke OpenGL tillader en array af klasser, selv om klassen kun indeholder 3 floats!
Vil tro det er bedst at bruge en lang array af floats.

float * particle_array = new float [ Antal * 3 ];

du vil herefter kunne kalde glVertexPointer() saaledes:

glVertexPointer( 3, GL_FLOAT, 0, particle_array);
glEnableClientState( GL_VERTEX_ARRAY );
glDrawArrays( GL_POINTS, 0, Antal * 3 );
glDisableClientState( GL_VERTEX_ARRAY );

Muligvis vil det vaere en fordel at bruge homogene vektorer da det senere hen vil blive lettere for dig at multiplicere med 4x4 matrix.

Gorm
Level 24 - Cyber demon
Posts: 243
Joined: 10 Mar 2008, 00:11
Location: London, UK
Contact:

Re: opengl og vertex arrays?

Unread post by Gorm » 10 Aug 2010, 22:09

ZeroHero wrote:Jeg tror ikke OpenGL tillader en array af klasser, selv om klassen kun indeholder 3 floats!

Prøv hvad Crisium skriver; måske går det godt ;) . Så læs lidt op på low-level ting, som memory layouts af klasser og structs, casts, og den slags. Mange af OpenGL funktionerne er præcist lavet så det giver mening at caste f.eks til en float *, ved at man kan angive et stride mellem sine værdier. Præcis hvad Crisium skriver om :-)
Gorm - Senior Creative Technologist
Blog
Twitter
Global Game Jam

rasmuskaae
Level 2 - Grain of sand
Posts: 23
Joined: 11 Mar 2008, 08:56
Contact:

Re: opengl og vertex arrays?

Unread post by rasmuskaae » 11 Aug 2010, 07:15

ZeroHero wrote:Jeg tror ikke OpenGL tillader en array af klasser, selv om klassen kun indeholder 3 floats!
Vil tro det er bedst at bruge en lang array af floats.
følgende tre datastrukturer har samme memorymodel:

Code: Select all

typedef struct { float x,y,z; } mm1;
class mm2 { public: float x,y,z; } mm2;
typedef float[3] mm3;
hvilket gør at følgende giver god mening:

Code: Select all

mm2 * m2 = new mm2[100];
mm1 * m1 = (mm1*)m2;
float * m3 = (float*)m2;
som nævnt ovenfor, var det blot et spørgsmål om at jeg havde fejl-læst i opengl manualen :-)

Post Reply