Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 缩放到模型以适应视口大小_Opengl - Fatal编程技术网

Opengl 缩放到模型以适应视口大小

Opengl 缩放到模型以适应视口大小,opengl,Opengl,我目前正在开发屏幕上有模型的应用程序,需要找到一些方法来缩放模型(当屏幕上的几何图形尽可能多的时候做一个技巧) 我的矩阵相当简单。我从鼠标输入中获取了\uxrot、\uyrot和\uscale var projectionMatrix = Matrix4.CreateOrthographic(_viewportSize.Width, _viewportSize.Height, 10000f, -10000f); var viewMatrix = Matrix4.CreateRo

我目前正在开发屏幕上有模型的应用程序,需要找到一些方法来缩放模型(当屏幕上的几何图形尽可能多的时候做一个技巧)

我的矩阵相当简单。我从鼠标输入中获取了
\uxrot
\uyrot
\uscale

    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);

有什么建议吗

我找到了解决办法。首先,我收集了边界框的所有角点,然后将它们与MVP矩阵相乘。在它之后,我将
1/X
1/Y
相除,并查找最小比例,将
\u scale
与该值相乘,并找到新的
viewMatrix