Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
906
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
OpenGL вращение
Я пытаюсь сделать простое вращение в OpenGL, но, должно быть, упускаю суть. Я ищу не столько конкретное исправление, сколько быстрое объяснение или ссылку, которая объясняет вращение OpenGL более широко.
На данный момент у меня есть такой код:
glPushMatrix();
glRotatef(90.0, 0.0, 1.0, 0.0);
glBegin(GL_TRIANGLES);
glVertex3f( 1.0, 1.0, 0.0 );
glVertex3f( 3.0, 2.0, 0.0 );
glVertex3f( 3.0, 1.0, 0.0 );
glEnd();
glPopMatrix();
Но в результате получается не треугольник, повернутый на 90 градусов.
Edit Hmm спасибо майку Хабустаку-оказалось, что мой код вызывал функцию SetCamera, которая использует glOrtho. Я слишком новичок в OpenGL, чтобы иметь какое-либо представление о том, что это означало, но отключение этого и вращение по оси Z дали желаемый результат.
Получается ли у вас 1 единица прямой линии? Кажется, что 90дег гниет. вокруг Y вы будете смотреть на сторону треугольника без глубины.
Вместо этого вы должны попробовать вращаться вокруг оси Z и посмотреть, получится ли у вас что-то более осмысленное.
OpenGL имеет две матрицы, связанные с отображением геометрии, ModelView и проекция. Оба они применяются к координатам до того, как данные становятся видимыми на экране. Сначала применяется матрица ModelView, преобразующая данные из пространства модели в пространство представления. Затем Матрица проекции применяется с преобразованиями данных из пространства просмотра для "projection" на вашем мониторе 2D.
ModelView используется для размещения нескольких объектов на их местах в "world", проекция используется для размещения объектов на экране.
Ваш код кажется прекрасным, поэтому я предполагаю, что из чтения документации вы знаете, какова природа функций, подобных glPushMatrix(). Если вращение вокруг Z все еще не имеет смысла, убедитесь, что вы редактируете матрицу ModelView, вызвав glMatrixMode.
"accepted answer" не является полностью корректным-вращение вокруг Z не поможет вам увидеть этот треугольник, Если вы не сделали некоторые странные вещи до этого кода. Удаление glOrtho(...) звонок мог бы исправить проблему в этом случае, но у вас все еще есть пара других проблем.
Две основные проблемы с написанным кодом:
Вы уже устанавливали камеру раньше? В OpenGL камера расположена в начале координат, глядя вниз по оси Z, с положительным Y как вверх. В этом случае треугольник рисуется в той же плоскости, что и ваш глаз, но вверх и вправо. Если у вас нет очень странной проекционной матрицы, вы ее не увидите. gluLookat()-самая простая команда для этого, но любую команду, которая перемещает текущую матрицу (которая должна быть MODELVIEW), можно заставить работать.
Вы рисуете треугольник в левостороннем или по часовой стрелке методе, тогда как по умолчанию для OpenGL используется правосторонняя или против часовой стрелки система координат. Это означает, что, если вы отбираете задние грани (которые вы, вероятно, не используете, но, вероятно, перейдете на них, когда вы станете более продвинутыми), вы не увидите треугольник, как ожидалось. Чтобы увидеть проблему, положите правую руку перед лицом и, представляя, что она находится в плоскости X-Y, двигайте пальцами в том порядке, в котором вы рисуете вершины (1,1) - (3,2) - (3,1). Когда вы делаете это, ваш большой палец направлен в сторону от Вашего лица, что означает, что вы смотрите на обратную сторону треугольника. Вам нужно привыкнуть рисовать лица правой рукой, так как это обычный способ, которым это делается в OpenGL.
Самое лучшее, что я могу порекомендовать, - это использовать NeHe tutorials- http://nehe.gamedev.net/ . Они начинают с того, что показывают вам, как настроить OpenGL в нескольких системах, переходят к рисованию треугольников и медленно и уверенно переходят к более сложным темам. Им очень легко следовать.
Я бы хотел порекомендовать вам одну книгу:
3D компьютерная графика: математическое введение с OpenGL Сэмюэлем R. Звонкий поцелуй
Он дает очень четкие объяснения,и математика широко применима к неграфическим областям. Вы также найдете подробное описание ортогональных проекций и преобразований перспективы.
Что касается проекционной матрицы, то вы можете найти хороший источник для начала здесь:
http://msdn.microsoft.com/en-us/library/bb147302(VS.85).aspx
Это немного объясняет, как построить один тип проекционной матрицы. Ортогональная проекция-это очень простая / примитивная форма такой матрицы, и в основном то, что она делает, - это берет 2 из 3 координат осей и проецирует их на экран (вы все еще можете перевернуть оси и масштабировать их, но нет эффекта деформации или перспективы).
преобразование матриц, скорее всего, является одной из самых важных вещей при рендеринге в 3D и в основном включает в себя 3 этапа матрицы:
- Transform1 = система координат объекта в мире (например-вращение и масштаб объекта)
- Transform2 = система координат мира для камеры (размещение объекта в нужном месте)
- Transform3 = система координат камеры в пространстве экрана (проецирование на экран)
Обычно результат умножения матрицы 3 называют матрицей WorldViewProjection (если вы когда-нибудь столкнетесь с этим термином), так как он преобразует координаты из пространства модели через Мир, затем в камеру и, наконец, в экранное представление.
Повеселись