Координаты вершин в OpenGL - PullRequest
0 голосов
/ 16 марта 2012

Почему координаты вершин в OpenGL варьируются от -1 до 1?Есть ли способ указать координаты вершины, используя те же координаты, что и на экране?

Так что вместо:

    float triangleCoords[] = {
        // X, Y, Z
        -0.5f, -0.25f, 0,
         0.5f, -0.25f, 0,
         0.0f,  0.559016994f, 0
    }; 

я мог бы иметь

    float triangleCoords[] = {
        // X, Y, Z
         80, 60, 0,
         240, 60, 0,
         0,  375, 0
    }; 

Мне кажется, что мне нужно вытащить калькулятор, чтобы я мог жестко кодировать некоторые координаты вершин.Не то, чтобы я пытался выложить вещи и подумать: «Да, это должно сработать (0, 0,559016994), это будет выглядеть идеально ...»

1 Ответ

3 голосов
/ 16 марта 2012

Это то, для чего предназначены матрицы проекций. Они проецируются из вашей системы координат в нормализованные координаты.

Вы можете настроить вершины в пикселях, если хотите, но тогда вам просто нужно соединить его с правильной матрицей проекции, чтобы сообщить opengl, как преобразовать эти координаты на экран.

Учитывая ваш пример:

float triangleCoords[] = {
    // X, Y, Z
     80, 60, 0,
     240, 60, 0,
     0,  375, 0
}; 

Если вы соедините это с матрицей ортографической проекции (аналогично сгенерированной glOrtho(0, width, 0, height, -1, 1), то ваш треугольник будет отрисовываться в описанных пиксельных координатах.

...