Advertisement Jump to content
Sign in to follow this  

OpenGL OpenGL Terrain Grid Creation, Triangle Strips indexing issue

This topic is 2250 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Okay, I feel like an idiot, I have an assignment due in some 96 hours, and I've not yet got to the interesting bit.

Heres the deal: I'm trying to create an array of vertices, a grid, so that I can edit the y value in GLSL (later, don't worry about that now).

the trouble I'm having, is indexing my grid into triangle strips. Getting all the info into a VAO of VBOs is fine, and creating the vertices array i fine, just the Triangle strip indexing is letting me down.. please help me find my error.. its probably a semantic as opposed to syntactic.

I'm getting an access violation.. apparently I'm reading -1008 indices too far?

PS: A GUVector4 is what you think it is. All verts are in the range 0-1.

PPS: Slack I know, but we're working on a vert per pixel basis, mainly for simplicity in setting up tex coords.

PPPS: #define TERRAIN_L_XZ 1024

int index, x, z;
float posX, posZ;

//the number of vertices we will need for our terrain mesh
m_verticesCount = TERRAIN_L_XZ * TERRAIN_L_XZ ;

//the number of indices required for triangle strips
m_indicesCount = ( TERRAIN_L_XZ - 1 ) * ( TERRAIN_L_XZ * 2 ) ;

//create our arrays
vertices = new GUVector4[m_verticesCount];
texCoords = new GUVector2[m_verticesCount];
faceIndex = new GLuint[m_indicesCount];

//now to fill our arrays
// here we use a nested for loop and a seperate index to create a 1D arrays from 2D data sets..
index = 0;

for ( x = 0 ; x < TERRAIN_L_XZ ; x++ ) {
for ( z = 0 ; z < TERRAIN_L_XZ ; z++ ) {
posX = ( float ) x;
posZ = ( float ) z;

vertices[index].x = posX / TERRAIN_L_XZ;
vertices[index].z = posZ / TERRAIN_L_XZ;
vertices[index].y = 0.0f;
vertices[index].w = 1.0f;
texCoords[index].x = posX / TERRAIN_L_XZ;
texCoords[index].y = posZ / TERRAIN_L_XZ;

//now we must index our array of positional data: this should create triangle strips
index = 0;
int no_verts = TERRAIN_L_XZ * TERRAIN_L_XZ; // = 1,048,576
int no_indices= ( TERRAIN_L_XZ - 1 ) * ( TERRAIN_L_XZ * 2 ); // = 2,095,104

for( x = 0; x < TERRAIN_L_XZ ; x++ ) { //for each row
for( z = 0; z < TERRAIN_L_XZ ; z++ ) { //for each vert in the row
faceIndex[index] = z;
index++ ; // at the point of the access violation crash, index = 2,096,112
faceIndex[index] = z + TERRAIN_L_XZ; //.. 2,095,104 - 2,096,112 = -1008 : i.e. no_indices - index = -1008
index++ ;

Please help! I have an assignment due in 96 hours and I'm getting panicky. I've done this many times with just a trianglelist in DirectX, so I should be feeling so far out of my depth!

Thanks in advance, if you'd like more info please ask :)

Share this post

Link to post
Share on other sites
Your faceIndex array is only of the size
( TERRAIN_L_XZ - 1 ) * ( TERRAIN_L_XZ * 2 )
whereas your face filling loops are producing

Share this post

Link to post
Share on other sites
Indeed! I was just about to edit to say i'd fixed it with making the indices array bigger : ( TERRAIN_L_XZ ) * ( TERRAIN_L_XZ * 2 )

Now my problem is that my flat sqaure isn't rendering properly at all..

Anyways, SOLVED.

Share this post

Link to post
Share on other sites
Sign in to follow this  

  • Advertisement

Important Information

By using, you agree to our community Guidelines, Terms of Use, and Privacy Policy. is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!