반응형


http://blog.naver.com/clous02?Redirect=Log&logNo=110023903727



1) 파티클의 버텍스 버퍼이용 방법

* 버텍스 버퍼정의(최대한의 일정한 사이즈로)

* 파티클의 속성을 다룰 구조체를 정의

   * 구조체 리스트에 이벤트나 최대 숫자의 개수를 정하고 소멸시 하나를 생성하는 방법으로 생성

* 속성에 존재하는 베텍스 데이터 자료를 버텍스 버퍼로 동적인 복사

* 파티클에 관련된 RenderState를 설정

* 렌더링한다.


2) 작동방식

* FVF의 지정: D3DFVF_XYZ | D3DFVF_PSIZE

* Particle 속성을 위한 구조체

: 동적인 버텍스 생성과 소멸  List

* 위치 한계의 최대 사이즈 결정

* 버텍스 버퍼 마련

* 파티클을 생성(총알은 속도 일정 위치 변경)

* 버텍스 버퍼에 이동

* 파티클의 생성  변경  소멸  생성의 과정

* 렌더링 : DrawPrimitive(D3DPT_POINTLIST)

 

3) 파티클 구현 방법

* Particle

  - Bilboard이용 파티클 구현(사각형)

  - D3DPT_POINTLIST : 하나의 픽셀로 렌더링된다

  - Point Sprite(점하나로 가능)

 Texture 적용이 가능  Blending으로 알파 연산

• 크기 변경 가능

• 하나의 포인트로 사용가능

• 성능향상과 메모리 이익

 

4) 파티클의 종류

* 일정한 사이즈로 반복 되는 현상

  - 눈 비등

        - 박스속에 거두고 충돌처리로 사망을 시키면서 사망이 하나라도 벌어지면 자동으로 생성

           한다

 - 파티클정보를 담고 있는 리스트에서 erase시키고 push_back한다

* 이벤트가 발생하면 생성되는 스타일

 - 버텍스 버퍼는 가능한 총알의 최대 사이즈를 지정

 - 속성리스트를 만들고 렌더링해야할 만큼  버텍스 버퍼에 지정하고 렌더링한다

 - 이벤트 발생시 생성

 - 카메라의 위치에서 카메라의 방향으로 발사

 - 일정한 위치를 전진하면 소멸

 - 생성  변경  소멸의 단계

* 두가지 방식다

 - 위치의 속성은 계속하여 변화함으로 일정한 사이즈로 만들어 놓은 버텍스 버퍼에

위치값을 계속하여 갱신한다

5) 파티클에서 주의할 점

* 파티클 사이즈 조정시 주의할 점

  - 렌더스테이트의 사이즈 조정은 모두 DWORD

  - 이벤트에 의하여 파티클이 증가할 경우 조정하지 않으면 버텍스 버퍼의 한계를 초가하는 경우가 발생

  - 눈이 한 개만 출력될 때는 인덱스 증가가 벌어지지 않기 때문

 

6) Point Sprite 렌더 상태

 * D3DRS_POINTSPRITEENABE : default  false

  - true : 지정된 전체 텍스트를 포인트 스프라이트에 텍스쳐 매핑

  - false : 포인트 스프라이트의 텍스쳐 좌표를 이용하여 지정

 * D3DRS_POINTSCALEENABLE : default  false

  - true : 포인트 크기를 뷰스페이스 단위로 해석(카메라와의 거리값에 따라 변화)

  - false : 스크린 스페이스 단위로 해석  사이즈를 3으로 주면 3x3 사이즈로 그려진다

 * D3DRS_POINTSIZE

  - 포인트 스프라이트 크기 지정

  - Device->SetRenderState(D3DRS_POINTSIZE, FtoDw(2.5f));

    DWORD FtoDw(float f)

{

  return *((DWORD*)&f);

}

 * D3DRS_POINTSIZE_MIN : 0.2

 * D3DRS_POINTSIZE_MAX : 5.0

 * 거리에 따라 포인트 스프라이드의 크기가 변화하는 방법을 제어

 * D3DRS_POINTSIZE_A

 * D3DRS_POINTSIZE_B

 * D3DRS_POINTSIZE_C

[출처] 파티클|작성자 clous02

반응형

'그래픽스(Graphics) > DirectX9~12' 카테고리의 다른 글

용책, 해골책  (0) 2013.01.31
간략한 파티클 시스템  (0) 2013.01.31
CommitChanges  (0) 2013.01.27
Effect::CommitChanges()  (0) 2013.01.25
모션 블러(Motion Blur)  (0) 2013.01.25

+ Recent posts