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

Effect 파일?

DirectX9과 XNA의 차이점에는 무엇이 있을까요?

상당히 많지만, 그 차이점 중 하나는 바로 XNA는 무엇이든 그리기(Draw) 위해서는 반드시 Effect가 필요하다는 것 입니다.

예를 들어, 우리는 화면에 삼각형을 띄우기도 하고 또 메모리가 충분하다면 육면체, 혹은 구체 까지도 그릴 수 있습니다.

Effect는 이러한 것들을 - 삼각형들을 - 우리의 그래픽 카드가 어떻게 출력할 것인지 지시하는 명령들입니다.

예를 들어, technique A, B 가 있다고 칩시다.

그렇다면 우리는 technique A를 사용하여 반투명한 삼각형을 그리고 또 technique B를 사용하여 우중충한 파란색의 공포 영화 분위기의 삼각형을 그릴 수도 있겠네요.

뭐, 그렇다고 해서 아직 Effect를 어떻게 사용할지 고민할 필요는 없습니다. 어차피 series 3에서 자세하게 다룰 예정이니까요. 다만, 위에서 말했듯 XNA는 Effect 없이는 아무것도 그릴 수 없으므로 여기서는 reimer씨가 미리 만들어 놓은 Effect 파일을 사용하도록 합시다.



이 effects.fx 파일을 다운로드 한 후 새로운 Windows Game 프로젝트를 만듭니다. 그리고 effects.fx 파일을 새로 만든 프로젝트의 폴더에 복사 합니다.

tutorial 01의 코드에 Effect 설정 부분만 추가할 것 이므로 tutorial 01의 Game1.cs 파일을 그대로 가져와도 상관 없겠네요. 단, Namespace는 수정해 줘야 겠지만요.

준비가 다 되었다면 코드로 들어가 봅시다.

먼저 Effect를 설정하기 위해 전역 변수를 하나 만듭니다.

 Effect effect;

그리고 tutorial 01에서 만들었던 함수 SetupXNADevice함수의 끝에 다음과 같은 코드를 추가합니다.

 CompiledEffect compiledEffect = Effect.CompileEffectFromFile("@/../../../../effects.fx", null, null, CompilerOptions.None, TargetPlatform.Windows);
 effect = new Effect(graphics.GraphicsDevice, compiledEffect.GetEffectCode(), CompilerOptions.None, null);

HLSL로 작성된 Effect 파일의 내용을 읽어 컴파일하고 그 결과를 effect 전역 변수에 설정하는 코드입니다. effects.fx 파일이 실행 파일의 위치와 다른 폴더인 프로젝트 폴더에 존재하므로 위와 같은 상대 경로를 사용하였습니다. 나머지 parameter들은 여기서 고민하지 마세요. 모두 series 3에서 설명합니다.

이제 필요한 것은 모두 갖추었으니, Draw함수를 살펴봅시다.

우선 첫번째 라인을 다음과 같이 좀 더 어두운 파란색이 출력되도록 수정합니다. tutorial 01과 동일한 결과물이 나오면 재미 없으니까요. :)

 device.Clear(Color.DarkSlateBlue);

Clear함수 밑으로 Effect를 위한 코드를 좀 더 추가해 보겠습니다.

첫째로 무언가를 그리기 위해서는 Effect 개체로부터 어떤 Technique를 얻어와야 합니다.

 effect.CurrentTechnique = effect.Techniques["Pretransformed"];

여기서 Pretransformed라는 Technique가 나왔는데 Pretransformed Technique에 대해서는 다음 tutorial에서 살펴보기로 합시다.

하나의 Technique는 여러개의 Pass를 생성할 수 있습니다. 그리고 우리는 그것들이 필요하지요. Technique 아래로 다음과 같은 코드를 추가합니다.

 effect.Begin();
 
 foreach (EffectPass pass in effect.CurrentTechnique.Passes)
 {
     pass.Begin();
 
     // scene은 반드시 이 사이에 와야 합니다.
 
     pass.End();
 }
 
 effect.End();

추가된 코드를 보면 scene은 반드시 Pass.Begin()과 Pass.End() 사이에 존재해야 함을 알 수 있습니다. 그리고 Pass 또한 Effect.Begin() 이후에 존재해야 하며 아무것도 그릴것이 없게 되면 Effect.End()로 그리기를 마쳐야 합니다.

즉, scene은 Pass의 Begin과 End 사이에 그리고 Pass는 Effect의 Begin과 End사이에 위치해야 합니다.

이제 디버그(F5)키를 누르면 tutorial 01과 별 차이는 없지만 Effect가 적용된 좀 더 어두운 파란색 바탕의 윈도우가 보일 것 입니다.






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!