Создать и нарисовать квадратную плоскость с GL_TRIANGLES?

Предисловие:

Я прочитал пост в Генерация плоскости с треугольными полосами. Код ниже оттуда, однако он не позволяет мне текстурировать или освещать сетку.

Задача:

Дайте число ‘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 различны для некоторых вершин, которые разделяются между треугольниками. Мне нужен какой-то способ получить массив вершин, их текстурные координаты и нормали, чтобы я мог текстурировать и осветить плоскость, чтобы в итоге получилось вот так. Неважно, как я получу их, пока плоскость состоит из разных квадратов и что я могу изменить размеры плоскости.

0

Решение

Задача ещё не решена.

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

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

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