OpenGL: как использовать целые числа в glVertex3i - PullRequest
3 голосов
/ 23 января 2011

glBegin (GL_TRIANGLES); glVertex3i (100,100,0); glVertex3i (100,80,0); glVertex3i (80,80,0); glEnd (); * +1001 *

Эти звонки не работают. Работает только glVertex3f, просто не знаю почему. Но в glVertex3f я могу поставить только float меньше 1. Поскольку, если я положу некоторое число с плавающей точкой больше 1, вершина будет за пределами экрана.

Так что мой вопрос в том, почему вышеупомянутые звонки не работают? Я думаю, что примитивы вне пределов, но не знаю почему.

Ответы [ 2 ]

6 голосов
/ 23 января 2011

, если вы ничего не сделали, чтобы переместить настройку проекции или вида (например, gluPerspective/glTranslate etc), то по умолчанию ваш видовой экран будет варьироваться от x (-1, + 1) до y (-1, + 1) ), что означает, что ваш экран выглядит так:

                  y (+1)
        +------------------------+
        |                        |
        |                        |
x(-1)   |                        |   x(+1)
        |                        |
        |                        |
        |                        |
        +------------------------+
                 y (-1)

А центр экрана (0,0).

Если ваша модель имеет координаты вне диапазона (-1, + 1), то вам нужно уменьшить ее до этого диапазона. Таким образом, ваш треугольник должен появиться, если вы позвоните до glBegin:

glScalef(0.01, 0.01, 0.01);

Это значит «сделать все в 1/100 раз меньше, чтобы ваш треугольник вписался в (-1,1) область просмотра».

Вы должны прочитать о преобразованиях / проекциях и т. Д. Вы можете выполнить поиск в Google или воспользоваться одной из следующих ссылок:

5 голосов
/ 23 января 2011

Тот факт, что вы не видите их на экране, не означает, что они на самом деле не существуют в "вселенной" openGL.

Попробуйте отодвинуть камеру (с помощью метода gluLookAt -или с переводом и вращением) и снова поместите точки.Вы должны увидеть их без каких-либо проблем.

Более того, я хотел бы исправить вас, предполагая, что glVertex3f принимает только числа от 0 до 1, чего не происходит.Ваш код может быть:

glVertex3f (100.0, 100.0, 0.0);

И это будет работать, если положение камеры позволяет вам видетьэлементы, которые вы рисуете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...