Почему координаты z используются в треугольной полосе

Я только начал использовать openGL, чему я учу себя из книги. В моей книге мне сказано строить четырехугольники с использованием треугольных полос, потому что это более эффективно. Книга использует эти вершины для создания четырехугольника.

    vertices.push_back(-0.5f);
vertices.push_back(0.0f);
vertices.push_back(0.0f);

vertices.push_back(0.5f);
vertices.push_back(0.0f);
vertices.push_back(0.0f);

vertices.push_back(-0.5f);
vertices.push_back(0.0f);
vertices.push_back(-1.0f);

vertices.push_back(0.5f);
vertices.push_back(0.0f);
vertices.push_back(-1.0f);

Я не понимаю, почему ось z не является постоянной, кажется, что ось z должна оставаться постоянной, а ось y должна измениться, чтобы квадрат отображался в 2d. Я не понимаю, почему используется ось Z.

Вот остальная часть кода

Загружать вершины в буфер

glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * vertices.size(), &vertices[0], GL_STATIC_DRAW);

Для отображения квадрата

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt(0.0, 5.0, 0.1, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glEnableClientState(GL_VERTEX_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glVertexPointer(3, GL_FLOAT, 0, 0);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDisableClientState(GL_VERTEX_ARRAY);

Несмотря на то, что я не понимаю этого, квадрат все равно отображается правильно, поэтому он должен работать.

1

Решение

Чтобы квад имел смысл, все четыре точки должны лежать на плоскости. Это не обязательно должна быть плоскость с z = const. Если вы посмотрите на эти вершины, вы можете обнаружить, что у постоянно равно 0 для всех трех точек, поэтому квадра определен в плоскости xz. Вы также можете видеть, что камера расположена в точке (0, 5, 0.1), если смотреть вниз до начала координат, поэтому использование плоскости xz имеет смысл.

2

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

Вы смотрите вдоль оси y, поэтому y является постоянной величиной, чтобы сделать квадрат перпендикулярным области просмотра. Вызывая gluLookAt (), вы определяете положение камеры и направление просмотра.
Вы можете изменить аргументы gluLookAt так, чтобы камера смотрела вдоль направления z. В этом случае z должно быть постоянным в вашем определении квадрата.

Посмотри на http://www.opengl.org/sdk/docs/man2/xhtml/gluLookAt.xml .

2

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