Преобразовать PlaneProjection в MatrixTransform - PullRequest
1 голос
/ 22 февраля 2011

У меня есть плоская проекция следующим образом:

<Rectangle Fill="Red" Margin="50">
    <Rectangle.Projection>
        <PlaneProjection RotationX="-40"/>
    </Rectangle.Projection>
</Rectangle>

По различным причинам я хотел бы использовать вместо него MatrixTransform.Кто-нибудь знает, каким будет эквивалент MatrixTransform?

1 Ответ

6 голосов
/ 25 февраля 2011

PlaneProjection является нелинейным преобразованием, в то время как MatrixTransform равно:

http://www.charlespetzold.com/blog/2009/01/Non-Affine-Transforms-in-Silverlight.html

Не будет никакого способа выразить точно такую ​​же проекцию с помощью линейного преобразования.

Если вы преобразуете изображение или неинтерактивный элемент, вы можете разделить его на два треугольника, чтобы получить хороший эффект «3d» без использования проекции.Например, этот куб использует этот подход (там есть код SL 2.0):

http://www.codeproject.com/KB/silverlight/CubeProject.aspx

Наконец, если вам просто нужна матрица преобразования, вы можете получить к ней доступ из свойства ProjectionMatrix.

var matrix = (myElement.Projection as PlaneProjection).ProjectionMatrix;
var matrixProjection = new Matrix3DProjection { ProjectionMatrix = matrix };

Это также, как вы можете использовать его для создания Matrix3DProjection

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...