Hey guys,
I have tried to write a generic plane class that when passed parameters will create a flat 2D plane. It all looks ok to me, but I get a run time error and I am not sure what is wrong.
I am pasting the main bits of code here, and attaching a picture that helps to explain how it works. Vertex3f is a class that holds 3 floats.
Code:bool Plane::Create(float sX, float sY, int dX, int dY, char *tex) { texFile = tex; sizeX = sX; sizeY = sY; divisionsX = dX; divisionsY = dY; int array_size = (divisionsX + 2) * (divisionsY + 2); vertexBuffer = new Vector3f[array_size]; normalBuffer = new Vector3f[array_size]; texCoordBuffer = new Vector2f[array_size]; indexBuffer = new unsigned short[(((divisionsX+1)*2)+2)*(divisionsY+1)]; for (int i = 0; i < array_size; i++) { normalBuffer[i].x = 0.0f; normalBuffer[i].y = 1.0f; normalBuffer[i].z = 0.0f; } //generate vertex and tex co-ords. float vertex_incX = sizeX / (divisionsX + 1); float vertex_incY = sizeY / (divisionsY + 1); int vPos = 0; for (int i = 0; i <= divisionsY + 1; i++) { for (int j = 0; j <= divisionsX + 1; j++) { vertexBuffer[vPos].x = vertex_incX * j; vertexBuffer[vPos].y = 0.0f; vertexBuffer[vPos].z = vertex_incY * i; texCoordBuffer[vPos].x = (float)(1 / (divisionsX + 1)) * j; texCoordBuffer[vPos].y = (float)(1 / (divisionsY + 1)) * i; vPos++; } } //generate the index array. int iPos = 0; for (int j = 0; j <= divisionsY; j++) { int start1 = j * (divisionsX + 2); int start2 = (j + 1) * (divisionsX + 2); for (int i = 0; i <= divisionsX+1; i++) { indexBuffer[iPos] = start1; iPos++; indexBuffer[iPos] = start2; iPos++; start1++; start2++; } } texID = TextureManager::getInstance()->LoadTexture(texFile); return true; } void Plane::Draw() const { glEnable(GL_TEXTURE_2D); TextureManager::getInstance()->ApplyTexture(texID); glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3, GL_FLOAT, 0, &vertexBuffer[0]); glEnableClientState(GL_NORMAL_ARRAY); glNormalPointer(GL_FLOAT, 0, &normalBuffer[0]); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glTexCoordPointer(2, GL_FLOAT, 0, &texCoordBuffer[0]); int rowSize = ((divisionsX+1)*2)+2; for (int i = 0; i< divisionsY + 1; i++) { glDrawElements(GL_TRIANGLE_STRIP, rowSize, GL_UNSIGNED_INT, &indexBuffer[i*rowSize]); } glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisable(GL_TEXTURE_2D); }
The problem is apparently with this line:
Code:
glDrawElements(GL_TRIANGLE_STRIP, rowSize, GL_UNSIGNED_INT, &indexBuffer[i*rowSize]);
It gives the error:
Unhandled exception at 0x691ca718 in Zargons2.exe: 0xC0000005: Access violation reading location 0x018360bc.
Any ideas?



LinkBack URL
About LinkBacks


