Вектора вы передаете в OpenGL не видовых позиции, но произвольные числа в некоторых векторном пространстве. Только после цепочки преобразований эти числа отображаются в пиксельные позиции в видовом экране. Со старым конвейером с фиксированной функцией это может быть все, что может быть представлено умножением вектор-матрица.
В эти дни, когда все программируется (шейдеры), картографирование вполне может быть любой функцией, о которой вы можете думать. Например, значения, которые вы передаете в glVertex (вызов немедленного режима, но доступный шейдерам с OpenGL-2.1), могут интерпретироваться как полярные координаты в вершинном шейдере:
Это совершенно корректный вершинный шейдер OpenGL-2.1, который интерпретирует положение вершин должно находиться в полярных координатах. Обратите внимание, что из-за того, что треугольники и прямые являются прямыми краями, а полярные координаты являются криволинейными, это дает хорошие визуальные результаты только для точек или сильно тесселированных примитивов.
#version 110
void main() {
gl_Position =
gl_ModelViewProjectionMatrix
* vec4(gl_Vertex.y*vec2(sin(gl_Vertex.x),cos(gl_Vertex.x)) , 0, 1);
}
Как вы можете видеть здесь Valus переданного glVertex фактически произвольные, безразмерные компоненты векторов в некотором векторном пространстве. Только применяя некоторую трансформацию к пространству просмотра, эти векторы приобретают смысл. Следовательно, он не дает возможности навязывать определенный диапазон значений значениям, которые входят в атрибут вершины.
Я вижу, что вы отредактировали свой вопрос, чтобы удалить третью координату из вызова. Это фактически не имеет значения - третья координата все еще существует, только в этом случае она по умолчанию равна 0. – vesan
Кажется, что вы даже не пытались прочитать какой-либо учебник или вики на opengl, -1 – lisyarus
@BROY ничего. Я только что объяснил свой нижний план. – lisyarus