2014-09-09 5 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/X и 1/Y и посмотрел, чтобы найти минимальное предложение, умножьте _scale на это значение и найди новых viewMatrix.

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