2012-06-12 1 views
2

그래서 2 차원 스프라이트로 3D 게임을 만들려고합니다. 블렌더에서 비행기를 만들었고 uv 맵을 사용하여 스프라이트 중 하나를 비행기에 매핑했습니다. f12를 눌러 평면을 렌더링하면 스프라이트가 표시됩니다.텍스처 내보내기 3d 모델과 텍스처를 블렌더에서 xna 4.0

나는 비행기를위한 재료를 만들었고 정확한 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(); 
    } 
} 

답변

2

알아 냈습니다. 내 텍스처가 내 모델에 표시되지 않는 이유는 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(); 
    } 
    } 

과 질감 모델을 렌더링하고 싶어 지정된 위치에있는 모델을 그립니다. 다른 효과를 원한다면 손쉽게 끌기에 추가 할 수 있습니다.