我正在尝试通过使用 DrawUserIndexedPrimitives 绘制由线条组成的模型来在 XNA 中制作 3D WP7 游戏这一切都很好,但现在我想给每个模型自己的旋转。目前我正在使用 BasicEffect 来绘制所有模型。我可以设置它的旋转,但是所有对象都将具有相同的旋转。有没有办法为每个对象设置不同的旋转?我目前提出了几个可以使用的解决方案,但我对其中任何一个都不满意:
- 为每个具有自己的世界的对象创建一个新的 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() 返回一个包含对象旋转、平移和缩放的矩阵,model.GetPoints() 一个包含点的列表,model.Lines 是一个包含连接点索引的列表