Предисловие:
Я прочитал сообщение по адресу Создайте плоскость с треугольными полосами. Код ниже взят оттуда, однако он не позволяет мне текстурировать или освещать сетку.
Цель:
Получив число «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 и индексный буфер.
Что мне нужно?:
Хотя приведенное выше работает, я не могу текстурировать / UV-карту или получать нормали, поскольку она использует GL_TRIANGLE_STRIP
, поэтому координаты UV различаются для некоторых вершин, которые являются общими для треугольников. Мне нужен какой-то способ получить массив вершин, их текстурные координаты и нормали, чтобы я мог текстурировать и освещать плоскость, чтобы в итоге получилось вот так. Неважно, как я их получу, пока самолет состоит из разных квадов и я могу изменить размеры самолета.