프로그래밍

[3.0] 3D 모델 표시하기

건우아빠유리남편 2009. 7. 14. 13:16
반응형

드디어.. 3.0튜토리얼을 들어갑니다.    머어.. 사실 2008로 갈아타는것도 3.0을 설치하는 것도 단지 귀찮았을 뿐이고.

 

일단, 개발툴은 2008 Express, Visual Studio 2008로 바꿔주시고

 

다음 URL을 통해 XNA3.0을 설치해줍니다.

 http://www.microsoft.com/downloads/details.aspx?FamilyId=7D70D6ED-1EDD-4852-9883-9A33C0AD8FEE&displaylang=en

 

그럼 일단 준비는 끝.

 

사실상 많은 차이가 없다고 보는데, 약간의 문법적 차이가 있는 것 같기도...

 

따라서 이번 튜토리얼은 3D부터 살펴보고 가능하면 튜토리얼 이후에 간단한 프로젝트를 진행해볼까 합니다.

 

 

 

      

 

      wheel 이라는 3D모델을 표시하는 프로젝트입니다.

 

      http://www.ziggyware.com/weblinks.php?cat_id=6

 

     출처는 위의 사이트이고, 

 

     참고로 XNA3.0은 .x와 .fbx라는 3D모델을 지원하고 있습니다.

 

    

 

 

 

 

Game1.cs

using System;

using System.Collections.Generic;

using Microsoft.Xna.Framework;

using Microsoft.Xna.Framework.Audio;

using Microsoft.Xna.Framework.Content;

using Microsoft.Xna.Framework.GamerServices;

using Microsoft.Xna.Framework.Graphics;

using Microsoft.Xna.Framework.Input;

using Microsoft.Xna.Framework.Net;

using Microsoft.Xna.Framework.Storage;

 

namespace ModelEx

{

    public class Game1 : Microsoft.Xna.Framework.Game

    {

        private GraphicsDeviceManager graphics;   //그래픽스

        private float aspectRatio;//aspect

        private Model model;      //모델

 

       

        public Game1()

        {

            graphics = new GraphicsDeviceManager(this);

            Content.RootDirectory = "Content";

        }

 

        //초기화

        protected override void Initialize()

        {

            base.Initialize();

        }

 

        //그래픽스컨텐트 읽어오기

        protected override void LoadContent()

        {

            //aspect

            aspectRatio =

                (float)GraphicsDevice.Viewport.Width /

                (float)GraphicsDevice.Viewport.Height;

 

            //모델 읽기

            model = Content.Load<Model>("wheel");

 

            //모델 설정

            foreach (ModelMesh mesh in this.model.Meshes)

            {

                foreach (BasicEffect effect in mesh.Effects)

                {

                    //라이트

                    effect.EnableDefaultLighting();

 

                    //뷰 변환행렬

                    effect.View = Matrix.CreateLookAt(

                        new Vector3(2.0f, 2.0f, 2.0f),//카메라위치

                        Vector3.Zero,               //참조점

                        Vector3.Up                  //UP벡터

                    );

 

                    //사영변환행렬

                    effect.Projection = Matrix.CreatePerspectiveFieldOfView(

                        MathHelper.ToRadians(45.0f),//시야각

                        aspectRatio,                //aspect

                        0.005f,                     //nearclip 면의 거리

                        1000.0f                     //farclip 면의 거리

                    );

                }

            }

        }

 

        //그래픽컨텐트 언로드

        protected override void UnloadContent()

        {

        }

 

        //업데이트

        protected override void Update(GameTime gameTime)

        {

            base.Update(gameTime);

        }

 

        //그리기

        protected override void Draw(GameTime gameTime)

        {

            //배경색

            graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

 

            //모델그리기

            foreach (ModelMesh mesh in model.Meshes)

            {

                mesh.Draw();

            }

 

            //베이스그리기

            base.Draw(gameTime);

        }

    }

}

 

 

 

이 예제에서는 Texture가 있는 3D모델을 사용하고 있는데요, 이러한 경우 3D파일만 Content에 추가하면

 

에러를 내게 됩니다.

 

이 예제에서는 가령 Visual Studio 2008\Projects\WindowsGame1\WindowsGame1 밑에

 

Textures라는 폴더를 만들어서 해당 .png를 추가해주었습니다.

 

 

그러면.. 이렇게 해당 결과를 얻을 수 있게 됩니다.

 

 

그런데 3D의 주류는 3D맥스의 .max파일인건가..; .x나 .fbx로 변환해주는 플러그인에 대한 글은 많은데

 

막상 어떤 문제인지, 부적절한 스트로크가 있다거나 하는 에러가 발생한다는 듯 싶네요.

반응형