ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C# 으로 DirectX
    Programing/DirectX 2008. 7. 22. 16:55

    C#이라는 .NET기반의 언어로 DirectX를 이용하여 그래픽 기반의 프로그램 및 게임을 만들어 보고자 한다.
    .NET 프레임워크를 바탕으로 작성된 코드를 managed코드라고 부르듯 managed DirectX 라 부른다.

    c++을 사용할 때를 비교해 보면 많은 부분에서 엄청나게 간단해졌다.

    우선...실습을 해보자
    아래 링크를 따라가보면 managed DirectX 의 기본 예제(디바이스 생성)을 볼 수 있다.
    http://msdn.microsoft.com/en-us/library/ms920749.aspx




    1. VS2008 실행 ->새로 만들기 -> 프로젝트 -> C# -> 윈도우 폼 응용 프로그램을 선택하고 적당한 프로젝트 명을 적은 후 확인 버튼을 눌러 실행 시켜준다.

    바로 F5을 눌러 실행시켜 보면 아래와 같은 기본 윈폼이 뜬다. 바로 이곳에 흔히 말하는 기본 디바이스.....항상 튜토1번에 나오는 파란색 윈도우 화면을 만들것이다.

    사용자 삽입 이미지





    2. 다음으론 예전에 다이렉트 라이브러리를 설정하고 링크하듯 MDX를 사용할 수 있게끔 설정을 해 주어야 한다. 기존에 비해 아주 간단 명료 해졌음을 알수 있다.
    사용자 삽입 이미지

    위와 같은 솔루션 탐색기에서 참조를 오른쪽 클릭하면 참조 추가 라고 뜬다...과감하게 누르자....
    참조추가창이 뜨고 수많은 탭들이 있는 .NET탭에서 Microsoft.DirectXMicrosoft.DirectX.Direct3D을 선택해준다.

    더불어 선택후에는 이 라이브러리의 네임스페이스를 적어두어 편리하게 사용할 수 있도록 한다.

    using Microsoft.DirectX;
    using Microsoft.DirectX.Direct3D;


    이제 준비는 되었다. ㄷㄷ 청색 화면을 만들어 보자....



    3. 기본 튜토에 보면 다음과 같은 함수들이 사용되어졌다.

    a. CreateDevice() - 디스플레이 윈도우의 사이즈, 윈도의 외형등을 설정하는 함수(생성자)
    b. InitializeGraphics() - 오브젝트를 작성하고, 파라메터 설정후, 디바이스를 작성한다.
    c. Render() - 화면을 그려주는 함수
    d. OnPaint() - 렌더링 함수 실행
    e. OnKeyPress() - 키값(ESC)를 누르면 실행 종료시키는 함수
    f.  Main() - 메인함수이다.

             public CreateDevice()  // 생성자
            {
                //폼의 크기를 지정
                this.ClientSize = new System.Drawing.Size(400, 300);
                //캡션 지정
                this.Text = "윈도우 바에 쓰여질 타이틀쓰기";
            }


            public bool InitializeGraphics()
            {
                try
                {
                    // PresentParameters object 생성
                    PresentParameters presentParams = new PresentParameters();

                    // Don't run full screen(윈도우모드)
                    presentParams.Windowed = true;

                    // Discard the frames
                    presentParams.SwapEffect = SwapEffect.Discard;

                    // 디바이스 생성
                    device = new Device(0, DeviceType.Hardware, this,   
                                                   CreateFlags.SoftwareVertexProcessing, presentParams);
                    return true;
                }
                catch { return false; }
            }


             private void Render()
            {
                if (device == null)
                    return;

                device.Clear(ClearFlags.Target, System.Drawing.Color.Blue, 1.0f, 0);

                device.BeginScene();

                device.EndScene();
                device.Present();
            }

             protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
            {
                this.Render();
            }

            protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e)
            {
                if ((int)(byte)e.KeyChar == (int)System.Windows.Forms.Keys.Escape)
                    this.Close();
            }

    위의 5가지 함수를 잘 살펴보면 무엇을 하고 있는것인지 한눈에 알 수 있다. 굉장히 쉽게 초기화를 진행시키고 있다.
    메인 함수를 살펴보자.
    static void Main()
            {

                using (CreateDevicefrm = new CreateDevice())   // 클래스 생성
                {
                    if (!frm.InitializeGraphics())       // Initialize Direct3D
                    {
                        MessageBox.Show("Could not initialize Direct3D.  This tutorial will exit.");
                        return;
                    }
                    frm.Show();

                    // While the form is still valid, render and process messages
                    while (frm.Created)
                    {
                        frm.Render();
                        Application.DoEvents();
                    }
                }
            }
     

    사용자 삽입 이미지

    위의 화면은 의도한바대로 나와준..결과물이다.

Designed by Tistory.