2014-01-06 4 views
1

У меня возникли проблемы с поиском правильных координат в openGL.Координаты в openGL

Например, если h и w - высота и ширина окна, то я хочу нарисовать линию длины w/2 на расстоянии h/4 снизу. Как мне это сделать в openGL?

Я не нахожу ссылок на максимальное и минимальное значения координат. экран Мой компьютер 1024 * 768, так технически ограничение должно быть: - координаты х: -512 до 512 координату: -384 до 384 г координат: -inf до 0

Но это не работает , Зачем? Мне нужно знать, как работает система координат для openGL.

ответ

2

В OpenGL вы можете переопределить систему координат так, как вам нужно. Система координат по умолчанию определяется преобразованием идентичности из пространства модели, чтобы преобразовать пространство пространства в пространство NDC. Это означает, что диапазон координат xy [-1,1] ² отображается в окне просмотра, установленном с помощью glViewport. Однако, применяя правильные преобразования, вы можете изменить эти сопоставления на все, что захотите, или на необходимость.

Поэтому я настоятельно рекомендую вам прочитать несколько руководств по конвейеру преобразования OpenGL и как его использовать.

Fixed Функция трубопровода подход http://www.opengl.org/wiki/Vertex_Transformation

И современный подход http://arcsynthesis.org/gltut/Positioning/Tut03%20A%20Better%20Way.html

+0

Я до сих пор есть сомнения: - 1) Я поставил windowSize, как 400 х 400. Но все же координаты не в диапазоне от -200 до 200. Почему? Мне нужно подробное руководство относительно того, как происходит материал внутри. Любые ссылки? – clereamusjd

+0

@clereamusjd: Посмотрите мою первую ссылку, в которой описывается контур фиксированной функции, который вы, вероятно, используете. И пока вы не устанавливаете какие-либо матрицы, это диапазон от -1 до 1, который отображает любой размер окна, который вы используете. – datenwolf

+0

Я не читал страницу, которую вы дали, но я думаю, что сужу сомнение. В образце кода у меня есть линия gluPerspective (45.0, width/height, 1.0, 200.0); Когда я удалил эту строку, координаты x, y действительно изменились от -1 до 1. Также с помощью gluPerspective, мне нужно поставить z-координату как отрицательную. 0.0 не работает. Любая помощь приветствуется. – clereamusjd

1

у меня было трудное время с общей системой координат в первом тоже.

Что я делаю, что имеет для меня больше смысла, работает с системами координат OpenGL, как если бы я работал с реальными объектами в реальной системе координат мира.

То, что я сделал, я принял план ТАРДИС (из телешоу «Доктор Кто»), который имел размеры для создания синей коробки в дюймах и футах.

Оттуда я взял систему координат GL, и для каждого блока «1» GL я сделал эквивалент «1» или 12 дюймов.

И, основываясь на 0,0,0, являющемся центральной точкой моего ТАРДИС, я просто протянул ТАРДИС через код, как я увидел на чертеже, переводя точные размеры из того, что я увидел на чертеже.

Вот небольшой пример того, что я сделал:

glBegin(GL_QUADS); 
    glNormal3f(1.0f, 0.0f, 0.0f); 
    glTexCoord2f(0.0f, 0.0f); glVertex3f(15.0f/12.0f, myTop, 2.0f-(ONEINCH*0.25f)); 
    glTexCoord2f(0.0f, 1.0f); glVertex3f(3.25f/12.0f, myTop, 2.0f-(ONEINCH*0.25f)); 
    glTexCoord2f(1.0f, 1.0f); glVertex3f(3.25f/12.0f, myTop-(14.5f/12.0f), 2.0f - (ONEINCH*0.25f)); 
    glTexCoord2f(1.0f, 0.0f); glVertex3f(15.0f/12.0f, myTop-(14.5f/12.0f), 2.0f - (ONEINCH*0.25f)); 
glEnd(); 

Первое, что я узнал в этом упражнении является - единицы GL являются универсальными единицами. Поэтому, применяя систему, с которой я больше знаком - ноги и дюймы, сделал намного проще сосредоточиться на GL, а не на том, что означает эта единица?

После того, как я начал рисовать, я смог работать с gluPerspective гораздо эффективнее, что помогло мне понять разрешение видового экрана (не путать с разрешением экрана), ТОЛЬКО нужно иметь дело один раз, и именно тогда gluPerspective команда (следующий)

gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,250.0f); 

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

Например, в моем примере, показанном выше, я очень сильно закрываю видовое окно (0.1 GL Unit, что составляет 1,2 дюйма) и задает расстояние до 250 GL uint или 250 футов на расстоянии.

Я думаю, что отчасти это было связано с OpenGL. Это универсальные устройства, потому что трехмерный дизайн делает гораздо больше смысла, если у вас есть система реального мира, чтобы снова измерить ее.

Мой совет: не думайте, что блоки GL имеют ограничения или ограничения, кроме степеней ошибки, связанных с неточностями с плавающей запятой в малых и больших масштабах.

Фактически, я советую сравнить его с единицами реального мира. Я работаю в футах и ​​дюймах. Метрическая система и счетчики довольно распространены. Если это не сработает для вас, сделайте это так.

Вот TARDIS я построил: https://universalbri.wordpress.com/2015/05/24/creators-journal-holodeck-management-system-progress-10/

Я работаю над игрой со всем этим, Star Trek Online без боя и сейчас делает работу базы данных (SQL Server), то OpenGL была часть вопроса : Могу ли я перевернуть свой собственный движок, а не использовать кого-то другого.

Ответ: Да, я могу, и на самом деле это предпочтительнее.

Успехов

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