2015-05-19 3 views
4

У меня есть трехмерная сцена с проекцией перспективы.OpenGL: Установите сцену на экран

Я хочу подгонять сцену к экрану на основе ограничивающей рамки (min и max).

Я сосредоточил свою сцену, как это:

glm::vec3 center = (min + max)/2.0f; 
rootNode->translate(-center.x, -center.y, -center.z); 

Теперь мне нужен масштабный коэффициент масштабирования моего RootNode по размеру экрана. Как это сделать?

(это: 8.070 How can I automatically calculate a view that displays my entire model? (I know the bounding sphere and up vector.) не помогает, потому что его на основе ортогонального проектирования)

ответ

2

Причины этот вопрос сложнее с перспективной проекцией, чем с ортогональной проекцией является то, что min и max вам не являются постоянный с перспективной проекцией.

С перспективным проектором расстояние между краем видимой области увеличивается при удалении от камеры.

С перспективной проекцией у вас обычно есть поле зрения, theta, положение камеры и вектор «глядя на», v. На любом расстоянии d от положения камеры (в направлении v) вы можете представить себе плоскость, нормальная - v. Область этой плоскости, что камера может «видеть» имеет ширину:

2 * d * tan(theta/2). 

В простой установке фиксированной камеры вы можете иметь камеру в начале координат и смотрит вниз ось г, а затем расстояние d для любая точка будет только координатой точки z.

Обратите внимание, что у вас могут быть разные горизонтальные и вертикальные поля зрения. Если вы установили вертикальное поле угла обзора «fovy» и соотношение сторон (ширина окна просмотра/высота видового экрана), то ваше горизонтальное поле угла обзора - ваше вертикальное поле угла обзора, умноженное на соотношение сторон.

Смежные вопросы