Если я это сделать:XNA - Копии Same модели источника
Model test1 = content.Load<Model>(@"Models/floorTile");
Model test2 = content.Load<Model>(@"Models/floorTile");
Model test3 = content.Load<Model>(@"Models/floorTile");
foreach (ModelMesh mesh in test1.Meshes)
foreach (Effect effect in mesh.Effects)
((BasicEffect)effect).DiffuseColor = Color.Red.ToVector3();
все три модели будут назначены красный цвет, а не только test1.
Это упрощенная версия моей проблемы, в реальной версии, я использую фактический эффект HLSL, и хотя я знаю, как клонировать единственный эффект для работы с несколькими уникальными fbxs, я не уверен, как создать более одного экземпляра 3dmodel и присваивать каждому свою собственную текстуру, вместо того, чтобы ссылаться на одну текстуру/эффект, и поэтому каждый «floorTile» в моей сцене всегда будет выглядеть одинаково.
Единственное обходное решение, которое я могу придумать, - создать для каждой модели другую модель флеширования fbx, но у меня много плиток, так что это будет далеко не идеально.
Спасибо, я думаю, что я вижу, что вы говорите, и это будет работать без BasicEffects. Правда, в каждом обратном вызове я могу поменять цвет и получить разные цвета для той же модели, , но если у меня есть 30 квадратов, и все это разные цвета, это означало бы, что мне пришлось бы менять текстуры в 30 раз каждый призыв к рисованию, даже если фактический цвет для квадрата никогда не меняет цвет. Я надеюсь, что есть еще лучший способ. – user1693188
Надеюсь, но у меня не слишком много опыта работы с 3D и эффектами, которые помогут вам. – pinckerman
Обмен текстурой менее важен, чем тот факт, что вы выполняете 30 обратных вызовов в одном кадре, когда вы можете их комбинировать. Тем не менее, для оптимизации вашей сцены требуется оптимизация. Без этой дополнительной оптимизации это решение является стандартным способом делать такие вещи: вы обычно не копируете всю модель, а просто рисуете * по-разному *. –