버텍스 버퍼(Vertex Buffer)란 ?
우리가 Direct3D를 사용하면서 가장 많이 그리고 자주 쓰게될 인터페이스라고 생각하면된다.
만약 엔진이나 라이브러리에서 모델을 불러 띄어놔놓고 않쓴다고 하면 그것은 내부적으로 버텍스버퍼가있는것이다ㄱ-;
정점을 저장해서 그릴려면 물론 인덱스버퍼사용시에도 버텍스버퍼는 필요하므로 무조건 버텍스버퍼가 필요하기 때문이다!!
한마디로 요약해서 정점의 정보를 저장해두는 버퍼 정도로 알아두면 될것이다.
버텍스 버퍼를 사용하는 과정
버텍스버퍼를 사용하는 과정은 간단하게 몇가지 단계로 나눌수있다.
1. 버텍스버퍼의 생성
IDirect3DDevice9::CreateVertexBuffer 메서드를 통하여 버텍스 버퍼를 생성한다.
(파라미터밑 리턴값은 위의 메서드명을 클릭해서 참조하도록 ,MSDN)
생성시엔 동적버퍼 와 정적버퍼로 생성하는것중 고를수있으니 MSDN을 참고해보면서
자신의 경우엔 어떤 방식의 버퍼를 적용하는게 좋은지 생각해서 적용해보길 바란다.
(보통 변화가많은 파티클시스템에서 동적버퍼를 지형이나 오브젝트같은경우엔 정적버퍼를 사용한다.)
2. 버텍스버퍼의 데이터 채워넣기
- 일단 버텍스 버퍼에 접근하기 위해선IDirect3DVertexBuffer9::Lock 메서드를 호출해주어서
버텍스버퍼의 메모리에대한 독점권과 동시에 버텍스버퍼의 포인터를 얻어온다.
- 그후 얻어온 포인터를 이용해서 데이터를 복사,혹은 삽입
- 삽입후에는IDirect3DVertexBuffer9::Unlock 메서드를 호출해주어서 버텍스버퍼에 대한
독점권을 해제해준다.
3. 버텍스버퍼의 데이터로 정점그리기
버텍스 버퍼의 데이터로 정점을 그리는것은 매우 간단하다.
(1) IDirect3DDevice9::SetStreamSource 메서드를 호출해서 정점을 그리는데 사용할 버텍스버퍼와
연결한다.
(2) IDirect3DDevice9::SetFVF 메서드를 호출해서 그리게 될 정점의 포맷을 설정한다.
(3) 대망의 마지막 그려주는 과정IDirect3DDevice9::DrawPrimitive 메서드를 호출해서
정점들을 그려준다.
4. 버텍스 소멸시켜주기
위에서 만들었던 버텍스버퍼가 더이상 사용되지않을때 (프로그램종료시라던지)
우리는 ->Release 메서드를 이용해서 만들어주었던 버텍스버퍼를 소멸시켜준다.
[##_kaAmo_##]
PS.. 잡설인데 요즘 학원에서 D3D를 진도를 나가는데 예전에 혼자 독학했을때보다 심도있게 나가서 그냥 공부하면서 몇몇가지들을 적어두어 다른분들이 참고하실때 도움이 되고자합니다...Orz
그나저나 글쓰다가 실수로 한번 날려먹었었다는... 흑흑 ㅠㅠ
Leave your greetings here.
그라파 2009/07/30 17:55 Modify/Delete Reply Address
좋은 정보 감사합니다. 퍼갈께요^^( 출처도 꼭 적겠습니다.)
체육복萌!! 2010/12/28 09:12 Modify/Delete Reply Address
sprite와 vertex buffer 의 차이는 뭘까요?
(2D 와 3D라는 차이점 빼고)