#c #opengl-es #2d #vertices
#c #opengl-es #2d #вершины
Вопрос:
У меня есть этот код для рисования стрелки:
const GLfloat vertices[] = {
-0.25f, -0.25f,
0.0f, 0.0f,
0.25f, -0.25f,
0.0f, 0.5f,
};
glVertexPointer(2, GL_FLOAT, 0, vertices);
glEnableClientState(GL_VERTEX_ARRAY);
glColor4f(0.0f, 0.5f, 0.0f, 1.0f);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
Она должна выглядеть примерно так:
Это фактический результат (который нежелателен):
Я не вижу, что я сделал неправильно, вершины кажутся мне правильными, но, похоже, OpenGL рисует многоугольник в другом порядке, чем я указал. Кто-нибудь может мне помочь? Заранее спасибо. 🙂
Ответ №1:
Ваша треугольная полоса сначала занимает нижние три точки (то есть нижнюю часть вашей зеленой стрелки), а затем правые три точки. Просто измените порядок точек в вашем определении:
const GLfloat vertices[] = {
-0.25f, -0.25f,
0.0f, 0.0f,
0.0f, 0.5f,
0.25f, -0.25f,
};
Комментарии:
1. Это сработало, но я не понимаю, почему OpenGL использует такой порядок. Я соглашусь, когда мне будет позволено.
2. @Radek S: В общем случае треугольная полоса начинается с первых трех, а затем удаляет первую и добавляет следующую и так далее. Треугольная полоса с четырьмя точками (A, B, C, D) рисует треугольники (A, B, C) и (B, C, D).