Возникли проблемы с моим самолетом OpenGL

У меня возникли небольшие проблемы с созданием плоскости (с использованием GL_TRIANGLE) с использованием массивов вершин.

Вот мой код:

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
}
}
}

Код работает нормально, если ширина и глубина одинаковы, но если они разные, он облажается.

Кто-нибудь может увидеть проблему?

Я кодировал это так, чтобы точка разворота находилась посередине плоскости.

-2

Решение

    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
}

?

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]