먼저 DirectX SDK를 다운로드하고 설치해야 한다.
- 알아낸게 있는데, C# 2008까지 DirectX를 지원하고 그 이후로는 XNA가 대신한다.
- DirectX SDK도 2007년 8월(August)버전까지만 C# 2008에서 인식이 가능하다.
- XNA로 갈아타야겠다. 우선 기초를 다지기 위해 DX를 그래도 해보자ㅠㅠ
다이렉트드로우를 사용하기 위해서는 라이브러리를 먼저 참조시켜야 한다.
솔루션 탐색기에서 참조 오른클릭 -> Managed DirectX부분을 참조추가 하면 된다.
3D와 DX, 다이렉트 인풋, 사운드 등등 다 체크해서 불러온다.
DX는 아주아주많은데, 최신버전을 체크한다. 대신 2.0.0.0같이 앞이 2인건 체크하지마!
using Microsoft.DirectX;
이 using문을 사용한다면, 다이렉트X 라이브러리를 사용할 수 있다.
메인화면에 this.ClientSize = new Size(640, 480);
이거부터치자, 이건 640x480 사이즈의 윈도우창을 만드는 거야.
클래스를 만들어보자,
MDX.cs로 하나 만드는거야.
MDX.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D; // 라이브러리 두개 추가
namespace ddrawexercise
{
class MDX : IDisposable // 관리되지 않는 리소스 해제
{
private Form1 _form = null;
// 탑레벨 윈도우 : 모든 초기화가 OK면 true, 하나라도 실패하면 false를 리턴한다.
// false를 리턴하게되면 자동으로 종료된다.
public bool InitializeApplication(Form1 topLevFORM)
{
this._form = topLevFORM; // 폼의 참조를 보관하고 유지한다.
return true;
}
public void MainLoop() // 메인루프
{
}
public void Dispose() // 자원의 파기
{
}
}
}
InitializeApplication() 메서드는 Direct3D 관련 데이터나 각종 데이터를 초기화하는 아주아주아주유익한 메서드, 폼이 표시되기 전에 한번만 실행된다.
MainLoop() 메서드는 3D의 계산이나 그리기를 항상 반복하기 위한 메서드야, 이거는 Program.cs 클래스에서 계속 불리워져
Dispose() 메서드는 Direct3D 관련해서, 작성한 자원들을 해제하기 위한 메서드야 폼이 닫히고 딱 한번만 불려져, Idisposable 인터페이스를 상속받고 있기 때문에 반드시 불려지지 않으면 에라가나요^^
그리고, Program.cs 파일을 고쳐보자!!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Threading; // 추가되었다!
namespace ddrawexercise
{
static class Program
{
/// <summary>
/// 해당 응용 프로그램의 주 진입점입니다.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles(); // 요고는 윈도우 스타일 없어도돼
Application.SetCompatibleTextRenderingDefault(false); // GDI+를 사용해 글씨를 써 없어도 됨
Application.Run(new Form1());
// 폼과 MDX샘플 클래스를 작성한다.
// using()은 작성된 코드가 {}를 벗어나면 자동으로 파기되어 메모리 해제가 된당
// 여기서는 frm과 mdx가 그 대상이 되는거야^^
using (Form1 frm = new Form1())
using (MDX mdx = new MDX())
{
if (mdx.InitializeApplication(frm)) // 메인폼을 초기화한다
{
frm.Show(); // 메인폼을 보여준다
while (frm.Created) // 폼이 만들어져 있는 동안은 무한루프!!
{
mdx.MainLoop(); // 메인 루프처리 실시
Thread.Sleep(1); // CPU가 풀가동되지 않게 부하제한을 한다. 없어도돼
// 없으면 최고의 퍼포먼스를 보여주게될거ㅋㅋ
Application.DoEvents(); // 이벤트가 있다면 이벤트 처리를 한다.
}
}
else
{
// 초기화 실패ㅠㅠ
}
}
}
}
}
'Graphics > DirectX' 카테고리의 다른 글
Direct X - 6. 좌표 변화 세가지 (월드, 뷰, 투영) (0) | 2014.06.01 |
---|---|
Direct X - 5. 정점버퍼를 이용한 삼각형 출력 (0) | 2014.06.01 |
Direct X - 4. 2차원 도형 출력 (0) | 2014.06.01 |
Direct X - 3. 글자출력 (0) | 2014.06.01 |
Direct X - 2. 초기화와 기본처리 (0) | 2014.06.01 |