There are many possible camera positions + orientations where the bounding box would fit inside the view frustum. But any procedure would select one specific camera position and orientation.
If you would consider bounding spheres, one solution could be to
- first change orientation to look at bounding sphere center
- then move back sufficiently (negative look direction) for bounding sphere to fit inside frustum
With bounding boxes you could consider an earlier step of first positioning the camera at perpendicular to the center of the largest (or smallest, whatever you prefer) cube face.
I have no experience with DirectX, but moving and changing the looking direction of the camera to center a certain point should be easy.
The hard part is to do the math of deciding how far to move to view the object.
Math
If you know the bounding size s
of the object in world coordinates (we are not interested in pixels or camera coordinates, since those are dependent on your distance) from the orientation of the camera, you can compute the required distance d
of the camera to the bounding shape if you know the x and y Field-Of-View angle a
of the perspective projection.
frustum ------
------ ***** -
----- * * |
-=== ) FOV a *bounding box | BB size s
camera ----- * * |
------ ***** -
------
|-------------------|
distance d
So, the math is tan(a/2) = (s/2) / d
=> d = (s/2) / tan(a/2)
Which will give you the distance the camera should be placed from the closest bounding surface.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…