Войти
ПрограммированиеФорумГрафика

Масштабирование вида (2 стр)

Страницы: 1 2
#15
20:16, 8 дек. 2011

GeniusIsme
Так я уже пробовал. В (4, 1) и (4, 2) я добавлял сдвиг. Но, не сработало так, как ожидалось. Эффект получается такой, будто двигается камера, и ракурс соответственно при этом меняется. Да еще смещение почему-то в экранном масштабе нужно задавать. Хотя в экранный масштаб должно уже дальше переводиться, при применении viewport'а. Я подумал в начале, что может быть гомогенные координаты точек не равны 1. Но нижней строке матрицы есть элемент который может умножаться только на 1. Запутался однако.


#16
22:23, 8 дек. 2011

Tolanay

Кажется понял чего тебе надо, хм...
А можно образное пояснение - что именно ты хочешь смоделировать и для чего? Т.е. у меня сложилось впечатление, что тебе надо натянуть модель и текстуру на сферу и смотреть на них из центра этой сферы - зумировать и смещать (при данном подходе - не смещать, а поворачивать) тогда без потери "ракурса" можно будет. Но черт побери - тут какой то подвох чувствую. Зачем оно? Что должно моделироваться в конечном итоге?

#17
22:53, 8 дек. 2011

Moondark
Что же, поднимаемся на уровень выше в описании задачи. Эх надо было сразу, не жалею чужих мозгов :)
Есть модель черепа и фото. Программа подгоняет фото под череп по расставленным точкам на черепе и на фото (подгонка делается оценкой параметров камеры методом наименьших квадратов. типа чтоб точки наилучшим образом совпали) Всю эту байду нужно также уметь масштабировать. Естественно так, чтоб проекция черепа была жестко привязана к фото. Вот картинко
http://www.gamedev.ru/files/images/?id=73748
Не пугайся лица, это манекен :).
Тут уже зум есть, но он сделан криво. При зуме и буффер растет.

#18
22:58, 8 дек. 2011

Tolanay

Тогда всё просто - вращай камеру на месте (мировой или VIEW матрицей), это будет смещением картинки, а увеличение делай тюнингом проекционной матрицы (ака фокусное расстояние).
Фотка при этом должна быть натянута на квад висящий перед черепом.
По определению луча зрения рассинхронизации при этом точек через которые проходит оный на картинке и на черепе не должно быть.

#19
23:02, 8 дек. 2011

P.S.

Хотя, насколько я помню, проекционный механизм 3D API несовершенен и не соответствует реальным камерам, ввиду несферичности что ли, не знаю как правильно выразить поэтому картинка на краях камеры может как бы "вытягиваться", но против законов геометрии он точно не попрет - и из любого положения (не сдвигаясь с места, только вращаясь) луч проходящий через две точки на картинке и черепе и в то же время через камеру так и будет через них же проходить всегда.

#20
23:26, 8 дек. 2011

Moondar.
Вот ведь я балда, сразу не сообразил, что вращение работает так как нужно, точки проекции движутся синхронно. Там правда вращение помимо сдвига небольшой зум дает, но это не существенно. Если что его можно посчитать и скомпенсировать. Спасибо за совет. Жаль, что я его не понял сразу :)

А обычная камера от d3d  дисторсией отличается и еще кое-чем. Но в моей задаче этими искажениями можно пренебречь :)

#21
23:31, 8 дек. 2011

Tolanay
Прочти еще раз мой пост и свой.

#22
23:43, 8 дек. 2011

GeniusSime

Ну по идее нужно коэффициенты вставлять в 4 строку. В 3 строке они будут умножаться на z координату точки, а что это такое должно получиться не понятно.
Попробовал я и так, ведет себя еще более странно.

#23
1:06, 9 дек. 2011

Я тебе направление дал, неужели так сложно самому немного алгебру погонять?
Но почему то мне все равно хочется тебе помочь.
-2 * deltaX / width / znear.
Это если dx, если ogl, то может без двойки или знак другой - зависит от того, какой диапазон координат у них там.

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

#24
16:06, 9 дек. 2011

Да, ты прав, так работает. Я не правильно понял механику проекционной матрицы. Спасибо за помощь :)

Страницы: 1 2
ПрограммированиеФорумГрафика

Тема в архиве.