Я пытаюсь создать 3D-WP7-игру в XNA, рисуя модели, состоящие из строк, используя DrawUserIndexedPrimitives Все это прекрасно работает, но теперь я хочу дать каждой модели свое собственное вращение. В настоящее время я использую BasicEffect для рисования всех моделей. Я могу установить его вращение, но тогда все объекты будут иметь такое же вращение. Есть ли способ установить другое вращение для каждого объекта? Я в настоящее время придумать пару решений, которые я мог бы использовать, но я не доволен ни с одной из них:XNA для WP7: DrawUserIndexedPrimitives
- Создать новую BasicEffect для каждого объекта, со своим собственным миром, то перебираем все объекты, чтобы получить их основной эффект и привлечь его - я думаю, что все те BasicEffects создадут много накладных расходов, и я хочу отделить эффект от моделей.
- Выполняйте расчет самих точек (то есть вычислите поворот и передайте эти значения методу DrawUserIndexedPrimitives). Это довольно дорогостоящий расчет, который сильно утащил производительность.
Есть ли какой-либо предлагаемый маршрут?
Я не знаю, является ли DrawUserIndexedPrimitives лучшим методом использования, я просто хочу, чтобы иметь возможность рисовать линии и давать им поворот. Если есть лучший способ сделать это, скажите, пожалуйста :)
моего текущим решения:
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.Black);
foreach (var model in _models)
{
foreach (var pass in model.Effect.CurrentTechnique.Passes)
{
pass.Apply();
model.Effect.World = _model.GetWorld();
var points = model.GetPoints();
GraphicsDevice.DrawUserIndexedPrimitives(PrimitiveType.LineList, points, 0, points.Length, model.Lines, 0, model.Lines.Length/2);
_models[0].Draw(GraphicsDevice);
}
}
base.Draw(gameTime);
}
model.GetWorld() возвращает матрицу вращения, перевод и масштаб объекта, модель. GetPoints() список с точками и model.Lines представляет собой список с индексами связанных точек