Войти
ПрограммированиеФорум2D графика и изометрия

Высчитать дистанцию для камеры

#0
10:33, 15 июля 2017

У меня на сцене несколько мешей. Хочу сделать скриншот где они заполнят весь viewport. Хотелось бы у знатоков узнать алгоритм как это делать и чутка объяснить причем тут фрустум.


#1
11:06, 15 июля 2017

если проекция камеры перспективная, то frustum это сегмент пирамиды видимости (усеченная пирамида в данном случае, усечена она ближней и дальней плоскостями отсечения), т.е. от точки камеры вперёд видимый объём расширяется
чтобы 3д меши полностью были видны в вьюпорте и упирались в края, то они должны быть вписаны в эту фигуру
для этого нужно эту усеченную пирамиду вычислить, это несложно, вспомнив геометрию школьную. всего 8 точек. это выпуклый трехмерный объект, convex, есть на просторах интернета алгоритмы для определения вписаны точки в convex или нет, на их основе можно сделать алгоритм для вычисления усеченной пирамиды с заданными параметрами (углом между ребрами), описывающей набор точек (крайние точки всех мешей, т.е. convex из них желательно тоже сперва вычислить, отбросив внутренние точки)

если же проекция ортогональная то frustum'а нет, там фигура будет параллелепипедом, призмой, и алгоритм примерно такой же но немного проще
нужно точки мешей спроецировать на плоскость, параллельную вьюпорту, и также найти крайние точки на этой плоскости и имея эти точки очень легко описать вокруг них прямоугольник с заданным соотношением сторон всего в двух измерениях, ну а зная размер останется найти середину и по ней вычислить направление камеры

#2
18:46, 17 июля 2017

Создал пример
https://www.babylonjs-playground.com/#HTQM81

Тему можно закрывать.

ПрограммированиеФорум2D графика и изометрия

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

Тема закрыта.