Russian Qt Forum
Ноябрь 23, 2024, 18:02 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Изменение проекции  (Прочитано 2066 раз)
Disa
Гость
« : Сентябрь 11, 2012, 16:04 »

Вопрос, наверное, больше в алгоритмы.

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

Как это можно поправить?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Сентябрь 11, 2012, 16:30 »

Перспективное преобразование для точки (x, y, z) упрощенно

x_p = x * focal_dist / z;
y_p = y * focal_dist / z;

Где focal_dist - константа, параметр камеры. В изометрии этого преобразования нет, видимый размер объекта одинаков независимо от того насколько он далеко, поэтому есть просто множитель масштаба scale. Поэтому при переключении для приблизительного совпадения (точного все равно не будет) надо задействовать

scale = focal_dist / z;

z - расстояние от камеры до объекта

Ну а как это все называется в гнусном OpenGL - разберетесь  Улыбающийся

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 22.