본문 바로가기
프로그래밍

[3.0] 3D 모델 표시하기

by 건우아빠유리남편 2009. 7. 14.
반응형

드디어.. 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로 변환해주는 플러그인에 대한 글은 많은데

 

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

반응형

'프로그래밍' 카테고리의 다른 글

SWAP작성과 포인터,배열,함수포인터  (0) 2009.07.16
[3.0] 3D모델 이동하기  (0) 2009.07.14
텍스쳐 어둡게 하기  (0) 2009.07.14
텍스쳐를 붙인 3D프리미티브 표시하기  (0) 2009.07.14
ViewingPipeline  (0) 2009.07.14

댓글