среда, 16 апреля 2008 г.

3D координаты в Экранные

Вот и написал ф-ию перевода 3д Координат в Экранные.
public static Position2D ScreenFrom3D(Vector3D pos, Matrix4 camWorldMatrix, Matrix4 camProjectionMatrix, Matrix4 camViewMatrix, Dimension2D screenSize)
{
Position2D res = new Position2D();
Matrix4 MatrixViewWorld = camViewMatrix * camWorldMatrix;
Vector3D VectorOut = MatrixViewWorld.TransformVect(ref pos);
res.X = (int)Math.Round(((VectorOut.X / VectorOut.Z) * camProjectionMatrix.GetM(0, 0) + 1.0f) * (float)screenSize.Width / 2.0f);
res.Y = -(int)Math.Round((((VectorOut.Y / VectorOut.Z) * camProjectionMatrix.GetM(1, 1) - 1.0f) * (float)screenSize.Height / 2.0f));
return res;
}


Обратная ф-ия тут: http://galaxonline.blogspot.com/2008/04/blog-post_5151.html

Комментариев нет: