2014-09-09 2 views
1

현재 모델을 사용하는 응용 프로그램을 개발 중이며 모델을 확대하는 방법을 알아야합니다 (가능한 한 많은 공간이 화면에 나타날 때 트릭을 만들어야 함).뷰포트 크기에 맞게 줌 모델

내 행렬은 다소 단순합니다. 나는 마우스 입력으로 _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

해결책을 찾았습니다. 먼저 경계 상자의 모든 모서리 점을 모은 다음 MVP 행렬을 곱합니다. 그 다음에 나는 1/X1/Y을 나눈 다음 최소 프로 프리퀀시를 찾고 해당 값으로 _scale을 곱하면 새로운 viewMatrix이 발견됩니다.

관련 문제