PDA

View Full Version : index vertex arrays & tex-coords



McZ
03-05-2003, 01:09 AM
I have a object class that imports .Ase files from 3DS Max 2.5..

the arrays I have is this

struct sFace {
int v[3]; // 3 vertices for one triangle
};

struct sVertex3f {
float x,y,z; // vertex coordinates
};

struct sTexcoord {
float s,t;
};

class cObject {
sFace *Faces; // Triangle index
sVertex3f *vertices; // vertex list
sVertex3f *normals; // vertex normal list

sFace *tFaces; // texture coord index
sTexcoords *texcoords; // texture coord list
};

I'm using glDrawElement(...); to render the object

when I read from the ase file the texture coordinates gets a different index list then the vertex-array.. if I use the same indexlist for the vertex and texture array then I only get the front face of my cube to have the proper texture..

can't I share vertices like this when using textures and glDrawElement()? do I have to duplicate all vertices and normals?

maybe create one new struct and a function that stores every vertex, normal and tex-coord into it

struct sVertex8f {
float x,y,z; // vertex
float nx,ny,nz; // normal
float s,t; // tex coord
};

but this will take alot of memory space becouse I will have alot more vertices stored in memory then before.. and there will be no index becouse the vertices can be stored in correct draw order.. can I use glDrawArrays then?

but if I do this on a cube I will have a change something like this on a cube

before :
8 vertices (one for each corner)
8 vertex normals
24 texture coordinates

after :
24 vertices
24 normals
24 tex-coords

that will make my vertex and normal storage be 4 times bigger then it was before.

JustHanging
03-05-2003, 01:20 AM
Sorry, that's the way it is. Normally it's not that bad as you only need to duplicate the vertice that have different normals/texCoords. If you absolutely have to save that memory, I'm afraid you'll have to use immediate mode.

-Ilkka

McZ
03-05-2003, 01:22 AM
ok.. thanks..

can I use glDrawArrays() if I don't have any shared vertices and use the above sVertex8f structure?

JustHanging
03-05-2003, 05:11 AM
Yes, you can do that, but in that case I think it's more efficent to use glDrawInterleavedArrays. It is designed for interleaved data types like yours, but doesn't suport multitexture as far as I know, so it's not suitable in all cases.

-Ilkka

McZ
03-05-2003, 06:28 AM
but what if I want to use multi-texture then?