Basiceffect와 함께 XNA에서 모델을 그리는 방법
문제
XNA에서 모델을 그리고 싶습니다. 나는 앞서 나와 블렌더로 그것을 생산하여 FBX 파일 형식으로 내보내 었으므로 컨텐츠 파이프 라인이 작동 할 수 있습니다. WindowsGame ()의 Draw () 메소드에 어떤 코드를 추가해야합니까? 나는 다음을 시도했지만 내가 얻는 모든 것은 회색 화면 (회색이 아님, 맑은 색, 마음)뿐입니다. 모델은 content.load로 가져오고 오류가 발생하지 않으면 "bowl"이라고 불렀습니다. .
누구든지 내 여기에서 왜 작동하지 않는지 말할 수 있습니까?
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
BasicEffect b = new BasicEffect (graphics.GraphicsDevice, new EffectPool ( ));
foreach (ModelMesh m in Bowl.Meshes)
{
b.View = Cam.mView;
b.Projection = Cam.mProj;
b.World = mWorld;
b.EnableDefaultLighting ( );
b.Begin ( );
m.Draw ( );
b.End ( );
}
base.Draw(gameTime);
}
방금 이것이 효율성 측면에서 살인과 동일하다는 것을 알았지 만 많은 것을 시도했지만 최적화하기 전에 작동하기 위해서는 필요합니다.
해결책
무언가를 처음으로 렌더링하려고 할 때 정말 일반적인 문제는 카메라가 자신이보고있는 것을보고 있지 않다는 것입니다. 또 다른 가능한 문제는 모델이 예상되는 척도가 아니라는 것입니다. 예를 들어, 카메라가 Z에서 5 개의 단위 인 경우 모델의 너비는 10 단위 인 경우 카메라는 효과적으로 모델 내에 있습니다.
렌더링 질문이 진행되는 한, Microsoft는 다음과 같은 훌륭한 문서를 가지고 있습니다. http://msdn.microsoft.com/en-us/library/bb203933.aspx
이 스 니펫을 도우미로 사용할 수 있습니다.
private void DrawModel(Model m)
{
Matrix[] transforms = new Matrix[m.Bones.Count];
float aspectRatio = graphics.GraphicsDevice.Viewport.Width / graphics.GraphicsDevice.Viewport.Height;
m.CopyAbsoluteBoneTransformsTo(transforms);
Matrix projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f),
aspectRatio, 1.0f, 10000.0f);
Matrix view = Matrix.CreateLookAt(new Vector3(0.0f, 50.0f, Zoom), Vector3.Zero, Vector3.Up);
foreach (ModelMesh mesh in m.Meshes)
{
foreach (BasicEffect effect in mesh.Effects)
{
effect.EnableDefaultLighting();
effect.View = view;
effect.Projection = projection;
effect.World = gameWorldRotation * transforms[mesh.ParentBone.Index] * Matrix.CreateTranslation(Position);
}
mesh.Draw();
}
}
제휴하지 않습니다 StackOverflow