Farseer 3.x основан на Box2D.А в FAQ по Box2D написано :
Box2D настроен на метры-килограммы-секунды (MKS).Ваши движущиеся объекты должны быть на расстоянии от 0,1 до 10 метров.Не используйте пиксели как единицы измерения!Вы получите джиттер-симуляцию.
Другими словами, предполагая «нормальный» физический мир, у вас, вероятно, должно быть 1 физическая единица = 1 м .Но любой масштаб, который заставляет большинство ваших движущихся объектов находиться в диапазоне от 0,1 до 10 единиц, должен быть в порядке.
Итак, скажем, вы делаете модель автомобиля.Действительно, действительно простая модель, которая оказывается прямоугольником.Вы бы создали его, используя что-то вроде:
float width = 4.1f; // average car length in meters
float height = 1.4f; // average car height in meters
// Note: this method takes half-sizes:
var carVertices = PolygonTools.CreateRectangle(width / 2f, height / 2f);
// Then pass carVertices into PolygonShape, etc...
Отдельная проблема заключается в том, как затем отрендерить ваш мир в правильном размере.
Обычно это делается во время рендеринга, используякамера или матрица view (в стандартной системе world / view / projection).Это можно сделать двумя способами: BasicEffect.View
( MSDN ) или параметр матрицы преобразования в SpriteBatch.Begin
( MSDN , , см. Также ).
IMO, класс Farseer ConvertUnits
- очень уродливый способ обработки конверсии.