Экспорт текстур 3d моделей и текстур из блендера в xna 4.0
Поэтому я пытаюсь сделать 3d-игру с 2d спрайтами. В blender я создал плоскость и использовал ультрафиолетовые карты, чтобы отобразить один из спрайтов на плоскость. Когда я нажимаю клавишу f12 и отображаю плоскость, отображается спрайт.
Я удостоверился, что создал материал для самолета, и добавил, что добавил текстуру, а также включил отображение UV с правильной картой UV.
Я экспортировал модель файла в виде файла.fbx и поместил его вместе с изображением текстуры в папку содержимого моего проекта.
Однако, когда я отображаю модель вместо отображаемой текстуры, плоскость становится абсолютно черной.
Что может быть причиной этого? Моя ничья выглядит так:
public void Draw(Matrix View, Matrix Projection)
{
// Calculate the base transformation by combining
// translation, rotation, and scaling
Matrix baseWorld = Matrix.CreateScale(Scale)
* Matrix.CreateFromYawPitchRoll(
Rotation.Y, Rotation.X, Rotation.Z)
* Matrix.CreateTranslation(Position);
foreach (ModelMesh mesh in Model.Meshes)
{
Matrix localWorld = modelTransforms[mesh.ParentBone.Index]
* baseWorld;
foreach (ModelMeshPart meshPart in mesh.MeshParts)
{
BasicEffect effect = (BasicEffect)meshPart.Effect;
effect.World = localWorld;
effect.View = View;
effect.Projection = Projection;
effect.EnableDefaultLighting();
}
mesh.Draw();
}
}
1 ответ
Я понял. Причина, по которой моя текстура не отображается на моей модели, заключается в том, что я неправильно устанавливаю effect.world
я изменил способ, которым я установил мировую матрицу, и отредактировал часть кода моего модельного класса. В случае, если кто-то еще хочет визуализировать текстурированные модели с хорошим классом
public class CModel
{
public Matrix Position { get; set; }
public Vector3 Rotation { get; set; }
public Vector3 Scale { get; set; }
public Model Model { get; private set; }
private Matrix[] modelTransforms;
public CModel(Model Model, Vector3 Position)
{
this.Model = Model;
modelTransforms = new Matrix[Model.Bones.Count];
Model.CopyAbsoluteBoneTransformsTo(modelTransforms);
this.Position = Matrix.CreateTranslation(Position);
}
public void Draw(Matrix viewMatrix, Matrix proMatrix)
{
foreach (ModelMesh mesh in Model.Meshes)
{
foreach (BasicEffect effect in mesh.Effects)
{
effect.EnableDefaultLighting();
effect.View = viewMatrix;
effect.Projection = proMatrix;
effect.World = modelTransforms[mesh.ParentBone.Index] * Position;
}
mesh.Draw();
}
}
Рисует модель в указанной позиции. Если вы хотите какие-либо другие эффекты, вы можете легко добавить их в розыгрыш.