I'm having a bit of trouble with creating a plane (using GL_TRIANGLE) using vertex arrays.
Heres my code:
float halfW = (getPlaneWidth() / 2);
float halfD = (getPlaneDepth() / 2);
//Generate vertices
for(int z = halfD; z >= -halfD; z--)
{
for(int x = -halfW; x <= halfW; x++)
{
float xV = x * cellWidth;
float yV = 0;
float zV = z * cellDepth;
Vertices.push_back(xV);
Vertices.push_back(yV);
Vertices.push_back(zV);
float xN = xV - getX();
float yN = yV - getY();
float zN = zV - getZ();
setNormals(&xN, &yN, &zN); //Calculate normals
Normals.push_back(xN);
Normals.push_back(yN);
Normals.push_back(zN);
}
}
//Generate indices
for(int y = 0; y < getPlaneDepth(); y++)
{
for(int x = 0; x < getPlaneWidth(); x++)
{
int curVertex = (x + (y * (getPlaneDepth() + 1))); //Bottom left vertex ID
if(curVertex%2 == 0)
{
Indices.push_back((x) + (y) * (getPlaneDepth()+1)); //Bottom Left
Indices.push_back((x+1) + (y) * (getPlaneDepth()+1)); //Bottom Right
Indices.push_back((x+1) + (y+1) * (getPlaneDepth()+1)); //Top Right
Indices.push_back((x+1) + (y+1) * (getPlaneDepth()+1)); //Top Right
Indices.push_back((x) + (y+1) * (getPlaneDepth()+1)); //Top Left
Indices.push_back((x) + (y) * (getPlaneDepth()+1)); //Bottom Left
}
else //reverse triangle
{
Indices.push_back((x+1) + (y) * (getPlaneDepth()+1)); //Bottom Right
Indices.push_back((x) + (y) * (getPlaneDepth()+1)); //Bottom Left
Indices.push_back((x) + (y+1) * (getPlaneDepth()+1)); //Top Left
Indices.push_back((x) + (y+1) * (getPlaneDepth()+1)); //Top Left
Indices.push_back((x+1) + (y+1) * (getPlaneDepth()+1)); //Top Right
Indices.push_back((x+1) + (y) * (getPlaneDepth()+1)); //Bottom Right
}
}
}
The code works fine if the width and depth are the same, but if they are different, it screws up.
Can anyone see the problem?
I've coded it like this so that the Pivot point is in the middle of the plane.
int curVertex = (x + (y * (getPlaneWidth() + 1))); //Bottom left vertex ID
if(curVertex%2 == 0)
{
Indices.push_back((x) + (y) * (getPlaneWidth()+1)); //Bottom Left
Indices.push_back((x+1) + (y) * (getPlaneWidth()+1)); //Bottom Right
Indices.push_back((x+1) + (y+1) * (getPlaneWidth()+1)); //Top Right
Indices.push_back((x+1) + (y+1) * (getPlaneWidth()+1)); //Top Right
Indices.push_back((x) + (y+1) * (getPlaneWidth()+1)); //Top Left
Indices.push_back((x) + (y) * (getPlaneWidth()+1)); //Bottom Left
}
else //reverse triangle
{
Indices.push_back((x+1) + (y) * (getPlaneWidth()+1)); //Bottom Right
Indices.push_back((x) + (y) * (getPlaneWidth()+1)); //Bottom Left
Indices.push_back((x) + (y+1) * (getPlaneWidth()+1)); //Top Left
Indices.push_back((x) + (y+1) * (getPlaneWidth()+1)); //Top Left
Indices.push_back((x+1) + (y+1) * (getPlaneWidth()+1)); //Top Right
Indices.push_back((x+1) + (y) * (getPlaneWidth()+1)); //Bottom Right
}
?