Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Высчитать дистанцию для камеры

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

Поделиться
AvtoritetПостоялецwww15 июля 201710:33#0
У меня на сцене несколько мешей. Хочу сделать скриншот где они заполнят весь viewport. Хотелось бы у знатоков узнать алгоритм как это делать и чутка объяснить причем тут фрустум.
ChupakaberПостоялецwww15 июля 201711:06#1
если проекция камеры перспективная, то frustum это сегмент пирамиды видимости (усеченная пирамида в данном случае, усечена она ближней и дальней плоскостями отсечения), т.е. от точки камеры вперёд видимый объём расширяется
чтобы 3д меши полностью были видны в вьюпорте и упирались в края, то они должны быть вписаны в эту фигуру
для этого нужно эту усеченную пирамиду вычислить, это несложно, вспомнив геометрию школьную. всего 8 точек. это выпуклый трехмерный объект, convex, есть на просторах интернета алгоритмы для определения вписаны точки в convex или нет, на их основе можно сделать алгоритм для вычисления усеченной пирамиды с заданными параметрами (углом между ребрами), описывающей набор точек (крайние точки всех мешей, т.е. convex из них желательно тоже сперва вычислить, отбросив внутренние точки)

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

AvtoritetПостоялецwww17 июля 201718:46#2
Создал пример
https://www.babylonjs-playground.com/#HTQM81

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

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

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

2001—2017 © GameDev.ru — Разработка игр