Original Post
Hey, I currently had a terrain drawn and multi-textured(1 large texture stretched over the entire thing and 1 detail texture) like this: Now to improve performance I am now using VBO's which and draw them like this but how would I go about applying the multitexture to them properly? [Edited by - DaAnde on January 8, 2008 2:09:28 AM]
for (int z = 0; z < MAP_Z; z++)
{
glBegin(GL_TRIANGLE_STRIP);
for (int x = 0; x < MAP_X; x++)
{
// draw vertex 0
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, tCoord[x][z][0], tCoord[x][z][1]);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0, 0);
glNormal3f(tNorm[x][z][0].getX(),tNorm[x][z][0].getY(),tNorm[x][z][0].getZ());
glVertex3f(terrain[x][z][0], terrain[x][z][1], terrain[x][z][2]);
// draw vertex 1
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, tCoord[x][z][2], tCoord[x][z][1]);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0, 1);
glVertex3f(terrain[x+1][z][0], terrain[x+1][z][1], terrain[x+1][z][2]);
// draw vertex 2
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, tCoord[x][z][0], tCoord[x][z][3]);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 1, 0);
glNormal3f(tNorm[x][z][1].getX(),tNorm[x][z][1].getY(),tNorm[x][z][1].getZ());
glVertex3f(terrain[x][z+1][0], terrain[x][z+1][1], terrain[x][z+1][2]);
//draw vertex 3
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, tCoord[x][z][2], tCoord[x][z][3]);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 1, 1);
glVertex3f(terrain[x+1][z+1][0], terrain[x+1][z+1][1], terrain[x+1][z+1][2]);
}
glEnd();
//in init
for (int z = 0; z < MAP_Z+1; z++){
for (int x = 0; x < MAP_X+1; x++){
tex[cnt].u = tCoord[x][z][0];
tex[cnt].v = tCoord[x][z][1];
vert[cnt].x = terrain[x][z][0];
vert[cnt].y = terrain[x][z][1];
vert[cnt++].z = terrain[x][z][2];
tex[cnt].u = tCoord[x][z][0];
tex[cnt].v = tCoord[x][z][1];
vert[cnt].x = terrain[x][z+1][0];
vert[cnt].y = terrain[x][z+1][1];
vert[cnt++].z = terrain[x][z+1][2];
tex[cnt].u = tCoord[x][z][2];
tex[cnt].v = tCoord[x][z][3];
vert[cnt].x = terrain[x+1][z][0];
vert[cnt].y = terrain[x+1][z][1];
vert[cnt++].z = terrain[x+1][z][2];
tex[cnt].u = tCoord[x][z][2];
tex[cnt].v = tCoord[x][z][3];
vert[cnt].x = terrain[x+1][z+1][0];
vert[cnt].y = terrain[x+1][z+1][1];
vert[cnt++].z = terrain[x+1][z+1][2];
}
glGenBuffersARB(1, &buffer);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, buffer);
glBufferDataARB(GL_ARRAY_BUFFER_ARB, cnt*3*sizeof(float), vert, GL_STATIC_DRAW_ARB);
glGenBuffersARB(1, &tBuffer);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, tBuffer);
glBufferDataARB(GL_ARRAY_BUFFER_ARB, cnt*2*sizeof(float), tex, GL_STATIC_DRAW_ARB);
delete [] vert; vert = NULL;
delete [] tex; tex = NULL;
//in draw
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, buffer);
glVertexPointer(3, GL_FLOAT, 0, (char *) NULL);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, tBuffer);
glTexCoordPointer( 2, GL_FLOAT, 0, (char *) NULL );
glDrawArrays(GL_TRIANGLE_STRIP, 0, cnt);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
