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

Я только начал использовать 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);

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


person Popgalop    schedule 01.12.2013    source источник


Ответы (2)


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

person derhass    schedule 01.12.2013
comment
Моя книга еще не прошла через gluLookAt, в этом есть смысл, спасибо - person Popgalop; 01.12.2013
comment
@Popgalop: обратите внимание, что использование gluLookAt() здесь довольно плохо. Они используют хак установки z положения камеры на 0,1, чтобы не смотреть прямо вниз, потому что они используют неправильный вектор вверх для этой ситуации. Также не то, чтобы gluLookAt() и множество других вещей в опубликованном вами коде устарели и были удалены из современных основных профилей OpenGL. Вы могли бы подумать об обучении современным способом ... - person derhass; 01.12.2013

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

Взгляните на http://www.opengl.org/sdk/docs/man2/xhtml/gluLookAt.xml .

person Jasper    schedule 01.12.2013