ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • XNA 이펙트
    Programing/XNA 2008. 8. 13. 15:06
    XNA 3D 게임에서 화면에 무언가를 출력할 때는 이펙트를 사용한다.
    이들은 조명, 텍스처, 심지어는 정점 위치까지 처리한다.

    BasicEffect effect = new BasicEffect(graphics.GraphicsDevice, null);

    첫번째 매개변수는 그래픽 디바이스, 두번째 매개변수는 이펙트풀이다. NULL값을 전달하는 이유는 사용할 이펙트는 수는 하나이고, 여러 이펙트들이 공유할 풀이 필요 없기 때문이다.

    이펙트를 만든 뒤에는 앞으로 사용할 속성들을 설정한다.

                   effect.World = world;
                effect.Projection = projection;
                effect.View = view;
                effect.EnableDefaultLighting();

    이펙트의 월드, 뷰, 투영행렬들을 설정하고 기본 조명을 활성화 시키는 있다.

    effect.Begin(); 와 effect.End(); 메서드 사이에서 그리는 것들에는 모두 이 이펙트가 적용되는 것이다.

    이펙트는 하나 이상의 테크닉을 가지며, 테크닉은 하나 이상의 패스를 가진다.

    graphics.GraphicsDevice.DrawUserPrimitives(
    PrimitiveType.TriangleList,
    vertices,
    0,
    vertices.Length / 3);


    위의 문장은 삼각형을 그리는 구문이다.
    첫번째 매개변수는 화면에 렌더링될 프리미티브의 종류이다.
    직선, 정점, 삼각형, 삼각형 팬등등의 프리미티브의 열거자중 하나를 사용한다.
    두번째 매개변수는 실제 정점 데이터이다.
    세번째 매개변수는 그리기를 시작할 정점 데이터의 오프셋 값이다.
    마지막 매개변수는 삼각형의 숫자를 전달해둔다.

    또 다이렉트와 같이 인덱스 버퍼을 사용해서 메쉬를 그릴수도 있는 그때는 다음과 같은 함수를 사용한다.

    graphics.GraphicsDevice.DrawUserIndexedPrimitives(
    PrimitiveType.TriangleList,
    vertices,
    0,
    vertices.Length,
    indices,
    0,
    indices.Length / 3);

    첫번째 매개변수는 위와 똑같은 렌더링 될 프리미티브의 종류이다.
    두번째는 실제 정점 데이터
    세번째 매개변수는 정점 오프셋 값이다.
    네번째 매개변수는 정점 배열에 있는 정점의 수
    다섯번째는 인덱스(색인) 배열이다.
    여섯번째는 인덱스 배열의 오프셋 값이며
    마지막 매개변수는 프리미티브 갯수를 적어준다.




    ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 추가 사항 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

    여기서 말하는 Effect 란 우리가 흔히 알고 있는 그 이펙트가 아님에 유의하자.

    XNA 3D 에서 화면에 무언가를 출력할 때 사용하는걸 이펙트라 한다.
    이 이펙트는 조명, 텍스처, 정점 위치등등을 처리해 준다.
    우선 간단한 BasicEffect 란 놈이 있다.

    BasicEffect(graphics.GraphicsDevice, null);       //  객체 생성의 예


    오버로딩된 생성자에선 2개의 매개변수는 갖는데 첫번째가 그래픽 디바이스, 두번째는 이펙트 풀값을 가진다.
    ( 이펙트 수가 하나뿐이고, 여러 이펙트들이 공유할 풀이 없을 때는 위와 같이 NULL 값을 전달해준다.)

    이렇게 생성되는 BasicEffect는 수많은 메서드와 속성값을 가진다.

    EnableDefaultLighting와 같은 빛관련 속성, Projection, View, World와 같은 카메라관련 속성, 또 텍스처 관련 속성등 많은 값들을 필요에 따라 설정 할 수 있다.

    이렇게 설정한 값들은 effect.Begin(); 와 effect.End(); 사이에서 그리는 모든 것들에 적용된다.

    effect.Begin()
    .............무언가를 그린다. 예를 들어 DrawIndexedPrimitives메서드등을 사용한...
    effect.End()


    이펙트는 하나이상의 테크닉을 가지며, 테크닉은 하나 이상의 패스를 가진다.
    하지만 BasicEffect 는 하나의 테크닉과 패스를 가지기 때문에 이 부분은 생각할 필요없다.
    실제로는 이펙트 안에 있는 모든 패스를 훑는 작업을 해야하지만 일단 요건 패스~~


    'Programing > XNA' 카테고리의 다른 글

    SpriteBatch.Draw 메서드  (0) 2009.04.10
    ElapsedGameTime, ElapsedRealTime  (0) 2009.04.09
    XNA 카메라 설정  (0) 2009.04.02
    게임 서비스 만들기  (0) 2009.03.30
    VertexPositionNormalTexture 구조체  (0) 2008.09.09
    XNA 프레임워크의 로직 흐름  (0) 2008.08.19
    Matrix Methods  (0) 2008.08.19
Designed by Tistory.