2011-01-23 2 views
3

glBegin (GL_TRIANGLES); glVertex3i (100,100,0); glVertex3i (100,80,0); glVertex3i (80,80,0); glEnd();OpenGL: как использовать целые числа в glVertex3i

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

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

+3

Привычки это зависит от текущей трансформации матрица? Масштаб, например? И плюс, вещи могут быть вне экрана. Уменьшите, измените камеру на другую координату или что угодно. – SuperSaiyan

ответ

6

Если вы не сделали ничего, чтобы переместить настройку проекции или представления (например, 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, или попробовать один из этих ссылок:

+0

спасибо. вы отвечаете на мой вопрос – NoviceCai

5

Тот факт, что вы не видите их на экране, не означает, что они вообще не существуют в openGL «Вселенная».

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

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

glVertex3f (100.0, 100.0, 0.0);

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

+0

Я знаю, что они существуют. Шезан Байг ответил на мой вопрос. – NoviceCai

Смежные вопросы