缩放到模型以适合视口大小

时间:2014-09-09 12:36:47

标签: opengl

我目前正在使用模型在屏幕上开发应用程序,并且需要获得一些如何缩放到模型的方法(当屏幕上的几何体占据尽可能多的位置时制作技巧)。

我的矩阵很简单。我从鼠标输入中获取了_xrot_yrot_scale

    var projectionMatrix = Matrix4.CreateOrthographic(_viewportSize.Width, _viewportSize.Height, 10000f, -10000f);

    var viewMatrix = Matrix4.CreateRotationY((float)(_xrot)) *
                     Matrix4.CreateRotationX((float)(_yrot)) *
                     Matrix4.CreateScale((float)_scale);

    var modelMatrix = Matrix4.Identity;

然后我将这个矩阵与坐标相乘并得到我渲染的几何体。

另外,我有我的边界框的点(最大和最小X,Y和Z)。我试图自己解决所有这些问题,但我的努力失败了。

    var maxPoint = new Vector3(_maxX, _maxY, _maxZ);
    var minPoint = new Vector3(_minX, _minY, _minZ);

    var pToProject = maxPoint.Length > minPoint.Length ? maxPoint : minPoint; 

    var projectedPoint =
        Vector3.TransformPerspective(pToProject, modelMatrix * viewMatrix * projectionMatrix); //transform max point to NDC

    var minP = Math.Min(projectedPoint.X, Math.Min(projectedPoint.Y, projectedPoint.Z));

    _scale = 1/Math.Abs(minP);

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。首先,我收集了边界框的所有角点,然后将它们与MVP矩阵相乘。之后,我将1/X1/Y分开,然后查找最小的比例,将_scale与该值相乘,找到新的viewMatrix