![]() |
Модераторы: Snowy, Alexeis, MetalFan |
![]() ![]() ![]() |
|
Ripper |
|
||||||
![]() Lonely soul... ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 30.6.2004 Где: г. Москва Репутация: нет Всего: 23 |
Вот недавно начал читать OpenGL и появилось кучу вопросов...
как пользоватся командой gluLookAt? Я так понимаю её можно использовать в качестве камеры? Просто я смотрел примеры некоторые но все равно вообще не пойму с этими командами типа glFrustum, glulookat, gluPerspective Вот допустим рисую пару объектов и хочу перемещатся в пространстве кнопочками.. я видел пример посла с цилиндрами) вот классно ![]() в gluLookAt первые 3 параметра - координаты точки откуда я смотрю. Вторые 3 параметра - куда я смотрю. и последние...непонимаю их смысл) Так вот... нарисовал я допустим сферу. Вот что у меня в ресайзе. (кстати тут я про эти матрицы тоже не догоняю ничего. просто копирнул с примера..
Вот рисование:
просто я не понимаю с матрицами эти функции и путаюсь в последовательности .. что куда надо влепить. вообще GL_MODELVIEW в ресайзе формы же должно быть? Или...хз. И вот ещё:
При создании формы cam_x, cam_y, cam_z := 0 Т.е. КАК Я понимаю сначала не че не должно быть видно а когда я нажимаю S то точка зрения по оси Z уменьшается т.е. я должен видеть сферу.. ну так тут все замудренно что кроме того как нарисовать кубик я вообще нечего не пойму) кто нибудь объяснит как пользоватся glMAtrixMode, gluLookAt, glPerspective и что когда применять лучше? В итоге я хочу сделать хотя бы небольшой уровень из плоскостей по которому можно двигатся(опять же glulookat?) Да и в примере посла о цилиндрах который тама в gllookat второй тройке параметры какие то непонятные были) меня вообще убивают синусы и косинусы т.к. я ещё в школе так легко применять их не могу =( Вообще прошу помочь разобратся с этими видами блин) ![]() -------------------- "Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом |
||||||
|
|||||||
p0s0l |
|
||||||||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 16 Всего: 112 |
1) Угол обзора = 70 2) Aspect Ratio - соотношение ширины к высоте, чтобы было без искажения, нужно, чтобы отношение было такое же, как и у окна, в которое выводится изображение 3, 4) передняя и задняя отсекающая плоскость (в смысле, плоскость, перпендикулярная оси Oz), т.е. это расстояния по оси Z, между которыми будет рисоваться, а вне этой зоны - будет отсекаться...
В этом разделе есть закрепленная тема "Полезные ссылки" - поищи, это самые азы, должны быть расписаны... -------------------- С уважением, г-н Посол. |
||||||||
|
|||||||||
Ripper |
|
|||
![]() Lonely soul... ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 30.6.2004 Где: г. Москва Репутация: нет Всего: 23 |
хм.. ну все равно же в glLookAt последний параметр ненужен?? мы же может поставить координаты камеры куда угодно и смотреть куда угодно? И почему пример выше не работает? Помойму даже действие на кнопку не работает т.к. я ставил showmessage('..'); и он не чего не показывал по нажатию
у меня есть книга где это все описывется но понять я это не понимаю.. например glClipPlane - как она работает хз =) написано что отсекает по одной координате часть картинки.. ну незнаю как одной точкой задается плоскость... мы в геометрри в школе тока начали стереометрию проходить но все же.. через точку можно провести плоскость параллельную одной из осей.. тама просто координаты.. кароче блин..фигово) -------------------- "Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом |
|||
|
||||
p0s0l |
|
||||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 16 Всего: 112 |
Пример: камера = твоя голова цель камеры = монитор всё это можно задать первыми двумя векторами теперь третий вектор - он отвечает за то, как у тебя наклонена голова - ты ведь можешь наклонить голову влево или вправо (положить на плечо (своё ![]() ![]() -------------------- С уважением, г-н Посол. |
||||
|
|||||
Ripper |
|
|||
![]() Lonely soul... ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 30.6.2004 Где: г. Москва Репутация: нет Всего: 23 |
а ...ну так и как угол задать 3мя координатами? Он же ээ в градусах обычно задается...
ну допустим есть камера моя голова)) впереди объект. как мне посмотреть на него под 60 градусов влево (голову наклонил влево) ?)) НАпример если стоит y - 1 то под 90 градусов смотрю? Или как? И почему пример тот не рабоатет? -------------------- "Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом |
|||
|
||||
p0s0l |
|
||||||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 16 Всего: 112 |
![]() На самом деле этим тремя векторами (=9 параметрами) определяется точка обзора, и "направления" осей:
Короче, тебе больше надо вникать в теорию, геометрию, матрицы и векторы ![]()
![]() Выложи полный код юнита, я гляну... -------------------- С уважением, г-н Посол. |
||||||
|
|||||||
Ripper |
|
|||
![]() Lonely soul... ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 30.6.2004 Где: г. Москва Репутация: нет Всего: 23 |
Да не школьный уровень эти матрицы)
эх.. незнаю че намутил... необижайтесь =)
ВОт как я понимаю сначала я нахожусь в 0,0,0 ну голова ака камера)) потом кнопкой S я отдаляюсь от сферы и должен её видеть?? Просто половина команд я уже сто раз слышал про параметры а как то почуствовать не могу -_- Ну... может ты объяснишь чего тут не так) -------------------- "Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом |
|||
|
||||
p0s0l |
|
||||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 16 Всего: 112 |
Всё работает
![]() Ты только перерисовку поставь... Ведь OnPaint метод вызывается только когда нужно рисовать форму... А нажатие кнопки "S" (к примеру) не означает, что надо перерисовывать форму... Ты сам это должен указать - либо вызвать метод Paint, либо сделать InvalidateRect (Handle, nil, False) - тогда OnPaint сам сработает... Куда это нужно поместить ? Либо в OnKeyPress, а лучше - повесь таймер с интервалом 1, и в его событии OnTimer напиши:
А у тебя получалось, что камера "ездила", но на экране это не отображалось, т.к. не происходило перерисовки... Только странно это:
-------------------- С уважением, г-н Посол. |
||||
|
|||||
Ripper |
|
|||
![]() Lonely soul... ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 30.6.2004 Где: г. Москва Репутация: нет Всего: 23 |
Так.. работает но не так как надо)) Непойму...
Вот я нажимаю S (Я еЩЁ ОДНу сферу дорисовал : glTranslatef(0,1,0); glutSolidSphere(1,10,10);) у меня появляется 2 сферы. нажимаю несолько раз вид увеличивается, а должен уменьшатся же. Потом ещё нажимаю - начинает уменьшатся и сферы начинают светиться... так я же источник поставил в 1 по Z.. вроде сразу должна светится.. вообщем как бы я не тыркал эфект один и тот же кстати помойму надо так писать: 'S' : cam_z:=cam_z+0.1; 'W' : cam_z:=cam_z-0.1; я со знаками перепутал.. ведь когда я отдаляюсь моя камера увеличивается по Z.. но все равно бред почему сначала сферы приближаются потом отдаляются.. как то не так все работает ![]() -------------------- "Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом |
|||
|
||||
p0s0l |
|
||||||||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 16 Всего: 112 |
Когда выезжаешь из сферы - ты уже видишь передние грани, и они освещаются...
![]() ![]() ![]()
1) координаты камеры 2) координаты "цели" (на которую смотрит камера) Ты сделал так, что цель всегда находится в центре сферы по координатам (0, ,0, 0). Теперь, как бы ты не двигал камеру, она всё равно будет смотреть на эти сферы... Это понятно ?... Далее, когда ты едешь издалека на сферу, она приближается (камера смотрит в направлении движения к сфере). Потом ты в неё въезжаешь, видишь неосвещяемые кишки сферы, выезжаешь. И едешь в том же направлении... Но куда ты смотришь теперь ? На сферу, т.е. уже назад ![]() Сам подумай: разве можно вечно приближаться с одинаковой скоростью к неподвижной сфере ? Всё равно когда-нибудь въедешь в неё и выедешь... Чтобы разбить твои иллюзии, нужно создать сцену, которая будет не симметрична относительно оси Oy - иначе нет разницы между движением по оси Ox и по оси Oz (вернее есть, но ты её не увидишь)... Для этого вместо glTranslatef(0,1,0) постававь хотя бы glTranslatef(0,1,1)... -------------------- С уважением, г-н Посол. |
||||||||
|
|||||||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 16 Всего: 112 |
Насчет:
Первый параметр функции задает № отсекающей плоскости (GL_CLIP_PLANE0, GL_CLIP_PLANE1 и т.д.) Второй параметр указывает на массив из 4 GLdouble'ов, являющихся коэффициентами уравнения плоскости: Ax + By + Cz + D = 0 (как видишь, нужно всего 4 числа, чтобы задать плоскость, а ты говорил про 3 точки - а это уже 9 чисел...) Это сообщение отредактировал(а) p0s0l - 7.1.2005, 00:57 -------------------- С уважением, г-н Посол. |
|||
|
||||
Ripper |
|
||||
![]() Lonely soul... ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 30.6.2004 Где: г. Москва Репутация: нет Всего: 23 |
Ну про массив в clipplane я лично не догоняю... как это делается... что за D кстати,)
А насчет камеры... хм.. ура =) В прорисовке: gluLooKAt(cam_x,cam_y,cam_z,look_x,look_y,look_z,0,1,0); в создании oкна:
и обработка клавиш:
все работает =)) Добавлено @ 11:34 Но про поворот я не догнал) как это все делается и вот я наугат поставил в камере 1 по У... -------------------- "Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом |
||||
|
|||||
p0s0l |
|
||||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 16 Всего: 112 |
(0, -1, 0) - камера будет вниз головой (1, 0, 0) - камера будет повернута на 90 градусов влево (как если положить голову на левое плечо) -------------------- С уважением, г-н Посол. |
||||
|
|||||
Ripper |
|
|||
![]() Lonely soul... ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 30.6.2004 Где: г. Москва Репутация: нет Всего: 23 |
погоди а как тогда менять угол зрения понемногу? Т.е. если я имняю от 0.1 до 1 то постепенно меняю угол зрения?
-------------------- "Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом |
|||
|
||||
p0s0l |
|
||||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 16 Всего: 112 |
![]()
Для угла обзора есть отдельный параметр в gluPerspective... Добавлено @ 22:01 А... Всё понял ![]() Ты говорил про угол наклона ? попробуй (cos(alpha), sin(alpha), 0), где alpha - угол наклона в радианах... -------------------- С уважением, г-н Посол. |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Delphi: Звук, графика и видео" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |