![]() |
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]() ![]() ![]() |
|
PRF |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 13.10.2007 Репутация: нет Всего: нет |
здравствуйте, я делаю подвижного наблюдателя и возникли проблемы.
Существуют точки объекта, мировая система координат, система координат наблюдателя и фокусное расстояние для центрального проецирования. Наблюдатель находить на оси z СКН на фокусном расстоянии я так понимаю. Допустим СКН мы расположили , центр, в таких точках относительно МСК , (100, 30, 300) Я хочу сделать перемещение вперед, что мне надо сделать? если увеливать z, ну центр СКН увеличивать по оси Z (100, 30, 301) , то получается какой то бред, ведь фокусное расстояние остается таким же.. как это вообще делать.. не понимаю |
|||
|
||||
NightmareZ |
|
|||
![]() [хакер] ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 10.8.2006 Репутация: нет Всего: 13 |
Шоза "фокусное расстояние"?
-------------------- NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш Ely-Art.ru - наша маленькая домашняя арт-студия mugcraft.ru - кружки на любой вкус |
|||
|
||||
C/L |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 31.7.2004 Где: Самара Репутация: нет Всего: 1 |
При перспективном (центральном) проецировании есть точка где сходятся все проекционные лучи. С точки зрения оптики ее расстояние до плоскости проекции можно конечно назвать фокусным расстоянием. Но при чем здесь это? Надо разделять матрицу проецирования и матрицу вида, а еще и матрицу обьекта. Матрица объекта - чтобы двигать объект, матрица вида - чтобы двигать наблюдателя, матрица проекции - чтобы потом все это спроецировать на плоскость проекции. Сначала формируем одну потом другую потом третью и только потом перемножаем их и получаем конечную матрицу с которой можно работать. Формула получается такая:
v2 = W*V*P*v1 W - матрица объекта V - матрица вида (наблюдателя) P - матрица проекции v1 - исходная точка (вектор) v2 - спроецированная точка (вектор) Все это подробно расписывается в книгах по DirectX. Это сообщение отредактировал(а) C/L - 15.5.2009, 14:27 |
|||
|
||||
PRF |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 13.10.2007 Репутация: нет Всего: нет |
Ага. знаю, только все передвижения и все это , я реализую не directx. Directx у меня только для отрисовки используется. Но спасибо
|
|||
|
||||
C/L |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 31.7.2004 Где: Самара Репутация: нет Всего: 1 |
Ну это не создатели DirectX придумали. Думаю все было известно и до них. Это простая математика матричных и векторных преобразований. Конечно для простого движения наблюдателя назад или вперед можно вывести простую формулу. Но тогда для движения по каждой оси нужна будет отдельная формула. А ведь еще есть повороты тоже для каждой оси. А еще масштабирование - например если наблюдатель решил посмотреть в бинокль. А если есть какой нибудь объект из миллиона точек и нужно передвигать его в каждом кадре? А тут хоть и вычисление с матрицами, но зато одна простая формула на все случаи. Всего 2 действия: вычислить результирующую матрицу и произвести умножение на нее всех точек.
|
|||
|
||||
![]() ![]() ![]() |
Вы можете найти полезным что... | |
|
|
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |