Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Disa от Сентябрь 11, 2012, 16:04



Название: Изменение проекции
Отправлено: Disa от Сентябрь 11, 2012, 16:04
Вопрос, наверное, больше в алгоритмы.

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

Как это можно поправить?


Название: Re: Изменение проекции
Отправлено: Igors от Сентябрь 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 - разберетесь  :)