Я использую/нацеливаю OpenGL 4.20, GSLSL 4.20, ядро. Используя C.
Я изучаю графику с OpenGL и решил сделать игру на основе плитки. Я нахожусь в точке, где хочу нарисовать кучу фрагментов, и пытаюсь использовать glDrawElements для рисования отдельных треугольников.
Соответствующий код:
const float vertexPositions[] = {
-1.0f, -0.8f, //0
-0.8f, -0.8f, //1
-0.6f, -0.8f, //2
-0.4f, -0.8f, //3
-0.2f, -0.8f, //4
0.0f, -0.8f, //5
-1.0f, -1.0f, //6
-0.8f, -1.0f, //7
-0.6f, -1.0f, //8
-0.4f, -1.0f, //9
-0.2f, -1.0f, //10
0.0f, -1.0f, //11
//The following are the texture coordinates.
0.00f, 1.00f,
1.00f, 1.00f,
0.00f, 1.00f,
1.00f, 1.00f,
0.00f, 1.00f,
1.00f, 1.00f,
0.00f, 0.00f,
1.00f, 0.00f,
0.00f, 0.00f,
1.00f, 0.00f,
0.00f, 0.00f,
1.00f, 0.00f,
};
const GLubyte indices[] = {
0, 1, 6,
1, 7, 6,
1, 2, 7,
2, 8, 7,
2, 3, 8,
3, 9, 8,
3, 4, 9,
4, 10, 9,
4, 5, 10,
5, 11, 10,
};
с
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, (void *)96);
glDrawElements(GL_TRIANGLES, 30, GL_UNSIGNED_BYTE, indices);
(Есть другие части, но в основном это форматирование/атрибут и т.д. При необходимости я предоставил больше.)
В основном я получаю:
0 1 2 3 4 5
+--+--+--+--+--+
|b | d|b |d |b |
+--+--+--+--+--+
6 7 8 9 10 11
и я хочу:
0 1 2 3 4 5
+--+--+--+--+--+
|b |b |b |b |b |
+--+--+--+--+--+
6 7 8 9 10 11
Где "b" - правильная ориентация текстуры/квадрата, а "d" - обратная/отраженная.
Я понимаю, что, поскольку координаты вершин разделены, это произойдет, но из моих собственных мыслей/некоторых сообщений ниже кажется, что это неизбежно. Либо я сохраняю вершины и отражаю текстуры, либо в итоге получаю 3 * 2 * number_of_tiles вершины, которые я чувствую, поражая цель glDrawElements.
Ресурсы, которые не помогли:
Это вещи, которые я обнаружил, которые связаны, но кажутся мне (я) устаревшим использованием/не ответил/не совсем то, что я прошу. Не стесняйтесь указать мне на один из этих сообщений, если он действительно отвечает на мой вопрос.
Это, кажется, говорит, что glDrawElements бесполезен для куба и что у вас должны быть отдельные вершины, составляющие лица. Это относится также к 2-й сетке?
Ответ на этот вопрос говорит (между прочим): "Два квадрата с одинаковыми позициями вершин, но разные координаты текстуры должны быть представлены разными квадратиками". но я не понимаю, что он получает.
Этот, я думал, был близок. В ответ: первая ссылка сломана/доступ запрещен. Вторая ссылка имеет ответ, в основном говорящий, что вершины должны быть разными. Это необходимо? В третьей ссылке (второй фрагмент кода) они, похоже, просто генерируют все 36 вершин. Для одного куба это, вероятно, нормально, но для n кубов..? Могу ли я пропустить точку его примера, возможно?
Является ли то, что я запрашиваю, даже возможно? Я использую совершенно неправильные функции для достижения того, чего я пытаюсь достичь? "UR DOIN IT RONG"?
Я подумал о переустановке координат, чтобы он выглядел так:
0 2 4 6 8 10
+--+--+--+--+--+
| | | | | |
+--+--+--+--+--+
1 3 5 7 9 11
Но я не видел, как это исправить проблему, так как вершины по-прежнему доступны.
Спасибо, и не стесняйтесь исправить меня/мой вопрос. Первый, поэтому я ожидаю, что он будет нуждаться в пересмотре.