Я прочитал пост в Генерация плоскости с треугольными полосами. Код ниже оттуда, однако он не позволяет мне текстурировать или освещать сетку.
Дайте число ‘n’, сгенерируйте текстуру и нарисуйте плоскость width = n
&height = n
используя OpenGL. Самолет должен быть изготовлен из отдельных четырехугольников размера блока.
Код для генерации вершин
float * Plane::getUniqueVertices()
{
if (uniqueVertices) return uniqueVertices;
uniqueVertices = new float[NUM_VERTICES];
int i = 0;
for (int row = 0; row<height; row++) {
for (int col = 0; col<width; col++) {
uniqueVertices[i++] = (float)col; //x
uniqueVertices[i++] = (float)row; //y
uniqueVertices[i++] = 0.0f; //z
}
}
return uniqueVertices;
}
Код для генерации индексов
int * Plane::getIndices()
{
if (indices) return indices;
indices = new int[NUM_DRAW_ELEMENTS];
int i = 0;
for (int row = 0; row<height - 1; row++)
{
if ((row & 1) == 0) // even rows
{
for (int col = 0; col<width; col++)
{
indices[i++] = col + row * width;
indices[i++] = col + (row + 1) * width;
}
}
else // odd rows
{
for (int col = width - 1; col>0; col--)
{
indices[i++] = col + (row + 1) * width;
indices[i++] = col - 1 + +row * width;
}
}
}
if ((height & 1) && height > 2)
{
indices[i++] = (height - 1) * width;
}
return indices;
}
Затем я рисую плоскость, используя GL_TRIANGLE_STRIP и индексный буфер.
Хотя вышеперечисленное работает, я не могу нанести текстуру / ультрафиолетовую карту или получить нормальные GL_TRIANGLE_STRIP
таким образом, координаты uv различны для некоторых вершин, которые разделяются между треугольниками. Мне нужен какой-то способ получить массив вершин, их текстурные координаты и нормали, чтобы я мог текстурировать и осветить плоскость, чтобы в итоге получилось вот так. Неважно, как я получу их, пока плоскость состоит из разных квадратов и что я могу изменить размеры плоскости.
Задача ещё не решена.
Других решений пока нет …