XNA for C#
DirectX 9 for C#
DirectX 9 for C++
DirectX 9 for VB
Forum
   
My XNA Book
      
       Go to section on this site

Additional info


Latest Forum posts

 Account settings
  Posted by: Anonymous
  When: 07/05/2014 at 09:48:39

 forced subtitle
  Posted by: Applefly
  When: 07/05/2014 at 06:00:48

 convert DVD into PMS
  Posted by: Applefly
  When: 07/05/2014 at 05:55:25

 DVD to Digital Copy easily
  Posted by: VIKIVannessa
  When: 05/05/2014 at 06:52:29

 DVD on Xbox 360/Xbox One Console
  Posted by: VIKIVannessa
  When: 05/05/2014 at 06:51:47

 Extract .Srt Subtitles
  Posted by: Applefly
  When: 04/05/2014 at 03:54:38

 Encode Movie collection
  Posted by: Applefly
  When: 04/05/2014 at 03:52:41

 Convert DVD to WMV
  Posted by: Applefly
  When: 29/04/2014 at 05:53:50

 rip DVDs into digital files
  Posted by: Applefly
  When: 29/04/2014 at 05:51:20

 iTunes movies/music to Kindle Fire
  Posted by: ciciyu80
  When: 29/04/2014 at 05:10:20


Ads

삼각형 그리기

이번 tutorial에서는 3D에 있어서 tutorial 중의 tutorial인 삼각형, 즉 triangle을 그려 보겠습니다.

다만 삼각형을 그리기 위해서는 사전 지식이 약간 필요합니다.

모든 3D 객체는 삼각형으로 이루어져 있습니다. 사각형도 실은 2개의 삼각형으로 구성되어 있으며 육면체, 심지어 구체도 결국 삼각형의 모음입니다.

그리고 삼각형은 3개의 점으로 구성됩니다. 우리들은 이 점을 vertex라고 부릅니다. 또 vertex는 x, y, z의 3개의 좌표로 이루어져 있습니다.

그러나 단순히 3개의 좌표만이 주어진다고 해서 vertex가 만들어지지는 않습니다. 예를 들어 색이 없는 점이 존재할수 있을까요? (검은색도 하나의 색입니다.) 따라서 vertex에는 여러가지 정보가 들어 있습니다.

XNA에서는 친절하게도 몇가지 vertex structure가 이미 정의되어 제공되므로 우리는 이것을 사용하기만 하면 됩니다. 우리는 VertexPositionColor을 사용해봅시다.

삼각형을 그리기 위해서는 익히 알고 있는것 처럼 3개의 vertex가 필요하므로 array로 만들어야할 필요가 있겠네요.

그렇다면 새로 Windows Game 프로젝트를 생성하고 코드로 들어가 봅시다. 물론 tutorial 02의 코드에서 출발할 것 이므로 Game1.cs를 복사해도 좋고 tutorial 02를 그대로 사용해도 좋습니다. effects.fx 파일도 그대로 사용할 것 이므로 반드시 프로젝트 폴더에 복사해 둡시다.

3개의 VertexPositionColor array를 만들기 위해 전역 변수로 다음과 같이 선언합니다.

 VertexPositionColor[] vertices;

그리고 vertex를 설정하기 위해 간단한 함수를 하나 더 추가합시다. 함수 이름은 SetupVertices로 하겠습니다. parameter는 없고 return value는 void입니다. 물론 다른 클래스에서 접근할 일은 없으므로 권한은 private입니다.

 private void SetupVertices()
 {
     vertices = new VertexPositionColor[3];
 
     vertices[0].Position = new Vector3(-0.5f, -0.5f, 0.0f);
     vertices[0].Color = Color.Red;
     vertices[1].Position = new Vector3(0.0f, 0.5f, 0.0f);
     vertices[1].Color = Color.Green;
     vertices[2].Position = new Vector3(0.5f, -0.5f, 0.0f);
     vertices[2].Color = Color.Yellow;
 }

첫번째로 미리 전역 변수로 선언한 vertices array를 초기화 시킵니다. 삼각형은 3개의 vertex로 이루어지니 당연히 3개로 초기화 해야 합니다.
두번째로 vertices array에 들어있는 vertex들의 값을 채워넣어야 합니다. 먼저 3개의 좌표값(position)을 설정하고 해당 vertex의 색상값(color)을 설정해야 합니다.
코드에서 보이는 3개의 좌표값들의 표현은 tutorial 02에서 설정한 Pretransformed Technique덕분에 가능합니다. 즉, Pretransformed Technique란 우리가 3D좌표계를 화면의 2D좌표계로 변환하는 작업을 하지 않아도 되도록 미리 좌표계를 변환해주는(Pretransformed) Technique입니다. 만약 Pretransformed Technique 없이 화면에 삼각형을 출력해야 한다면? XNA가 제공하는 3D 좌표계를 우리의 눈에 보일 화면의 2D좌표계(어쨌든 화면에 출력되는 것은 2D이니까요.)로 변환해주는 코드가 또 필요하겠지요.
마지막으로 삼각형을 좀 더 현란하게 표현하기위해 각각의 vertex의 색상값을 모두 다른 값으로 설정했습니다.

삼각형을 구성할 vertex가 모두 설정되었다면 이제 삼각형을 그리는 일만 남았습니다.

먼저 vertex들이 실제로 설정될 수 있도록 우리가 만든 SetupVertices함수를 Initialize함수의 맨 끝에 추가합시다.

 SetupVertices();

그리고 실제로 삼각형을 그릴 Draw함수에 다음과 같은 코드를 추가합니다.

 protected override void Draw(GameTime gameTime)
 {
     device.Clear(Color.DarkSlateBlue);
 
     // TODO: Add your drawing code here
 
     effect.CurrentTechnique = effect.Techniques["Pretransformed"];
 
     effect.Begin();
 
     foreach (EffectPass pass in effect.CurrentTechnique.Passes)
     {
         pass.Begin();
 
         device.VertexDeclaration = new VertexDeclaration(device, VertexPositionColor.VertexElements);
         device.DrawUserPrimitives(PrimitiveType.TriangleList, vertices, 0, 1);
 
         pass.End();
     }
 
     effect.End();
 
     base.Draw(gameTime);
 }

새로 추가된 첫번째 라인은 그래픽 디바이스가 vertex를 출력하기에 앞서 해당 vertex가 어떤 vertex인지 설정하는 코드입니다. VertexDeclaration 속성을 사용하여 설정합니다.
두번째 라인은 삼각형을 그리는 코드입니다. DirectX를 알고 있다면 친숙하게 느껴지겠네요. DrawUserPrimitives함수는 parameter로 삼각형을 그리는 형식(type), vertex array(vertices), vertex array정보를 읽기 시작할 위치(offset), 그릴 삼각형의 갯수(count)를 받아서 그래픽 디바이스가 삼각형을 그리도록 합니다. DrawUserPrimitives함수의 자세한 정보나 원형은 MSDN을 참조하길 바랍니다.

이제 디버그(F5)키를 누르면 윈도우에 화려한 색상의 삼각형이 그려져 있는것을 볼 수 있습니다.






Google
 
Webwww.riemers.net


If you appreciate the amount of time I spend creating and updating
these pages, feel free to donate -- any amount is welcome !



- Website design & XNA + DirectX code : Riemer Grootjans -
©2003 - 2011 Riemer Grootjans
Translations

This site in English
This site in Korean
This site in Czech

Microsoft MVP Award



2007 - 2011 MVP Award
DirectX - XNA

Contents

[Tutorials]
[XNA in C#]
Series 1: 지형
XNA의 시작
이펙트 파일
첫 번째 삼각형
월드 좌표계
회전, 위치 변환
인덱스
지형 생성의 기본
파일로부터 지형 생성
키보드 입력
[tut10]
[tut11]
[tut12]
[tut13]
-- Expand all --


Thank you!

Support this site --
any amount is welcome !

Stay up-to-date

I don't have the time to keep a News section, so stay informed about the updates by clicking on this RSS file!