Programing/DirectX
-
자주 사용하는 API 함수Programing/DirectX 2008. 2. 16. 18:15
Arc( ) 주어진 좌표를 이용하여 아크를 그린다. Global External Function: FUNCTION boolean Arc(ulong hwnd, long r1, long r2, long r3, long r4, long a1, long a2, long a3, long a4) LIBRARY "Gdi32.dll" Script: Boolean rtn ulong l_handle, l_device long lv[8] l_handle = handle(w_main) // 'w_main' is the name of the sample window. l_device = GetDC(l_handle) lv[ ] = {10,40,300,220,0,0,180,0} rtn = Arc(l_device, lv[1], lv..
-
ID3DXSprite 사용하기Programing/DirectX 2008. 2. 13. 15:42
1. d3d 내에서 2D를 표현하기 위한 인터페이스이다. 2. 사용방법 Begin 스프라이트를 드로잉(Drawing) 할 수 있도록(듯이) 장치를 준비한다. Draw 스크린 공간에 단순한 스프라이트를 드로잉(Drawing) 한다. DrawTransform 지정한 행렬에 의해 변환 한 스프라이트를 드로잉(Drawing)하기 위한 구조를 제공한다. End ID3DXSprite::Begin 가 불려 간 시점의 장치 스테이트를 복원한다. GetDevice 스프라이트 개체에 관련지을 수 있는 Direct3D 장치를 얻어온다. OnLostDevice 비디오 메모리 리소스에의 참조를 모두 릴리즈 해, 모든 스테이트 블록을 삭제한다. OnResetDevice 장치가 리셋 된 후에 호출할 필요가 있다.| IDirect3..
-
D3DXCreateTextureFromFileEx 함수Programing/DirectX 2008. 1. 30. 17:48
파일을 기본으로 해 텍스처를 생성 한다. 이것은, D3DXCreateTextureFromFile 의 상위의 함수이다. HRESULT D3DXCreateTextureFromFileEx( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, UINT Width, UINT Height, UINT MipLevels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey, D3DXIMAGE_INFO *pSrcInfo, PALETTEENTRY *pPalette, LPDIRECT3DTEXTURE9 *ppTexture ); pDevice: IDirect3DDevice9 인터페이스..
-
DrawPrimitive, DrawIndexedPrimitive, DrawPrimitiveUP, DrawIndexedPrimitiveUPPrograming/DirectX 2008. 1. 28. 13:46
1. DrawPrimitive DrawPrimitive 는 버텍스 버퍼를 이용해 Draw할때 쓰임. m_pD3DDevice->SetStreamSource( 0, pVB, 0, sizeof(CUSTOMVERTEX)); m_pD3DDevice->SetFVF( D3DFVF_CUSTOMVERTEX ); m_pD3DDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 2); 2. DrawIndexedPrimitive 인덱스 버퍼의 장점은 정점을 여러번 나열하는 메모리 소모량을 줄일수 있고 정점 캐시에 저장해서 높은 효율을 낼수 있다. 예를 들어서 사각형은 삼각형이 2개가 필요하다. 이걸 버텍스 버퍼를 이용해 그리게 되면 정점을 6개 선언해야하지만 사실 정점은 4개만 선언하고 그릴수 있..
-
렌더링 파이프라인Programing/DirectX 2008. 1. 27. 20:29
간단하게 3D 세계를 2D로 표현하는 방법론이라 할 수 있다. 1. 로컬 스페이스 -> 월드 스페이스로 변환 : 3차원 그래픽에서 모든 정점은 기본적으로 로컬 좌표계값을 갖는다. 하나의 물체라면 모를까.. 두개 이상의 물체라면 원점을 공유하여 겹치는 현상이 생긴다. 이를 위하여 월드 좌표계로의 변환이 필요하다. 이를 변환 행렬 TM(Transform Matrix)라 한다. SetTransform 메서드를 사용한다. ex) g_pd3dDevice->SetTransform(D3DTS_WORLD, &matWorld); 2. 월드 스페이스 -> 뷰 스페이스 : 카메라 관점의 변환이다. 카메라는 원점에 위치시키고 물체를 바라보고 있다고 생각하자. 이때 사용하는 메소드가 D3DXMatrixLookAtLH 이다. D..
-
버텍스 렌더링 하기Programing/DirectX 2008. 1. 26. 21:26
버텍스 버퍼를 만들고 렌더링을 하기 위하여 아래와 같은 3단계를 거쳐야 한다. 1. 정점 정보가 담겨 있는 정점 버퍼를 출력 스트림으로 할당 (SetStreamSource 메서드 사용) HRESULT SetStreamSource( UINT StreamNumber, IDirect3DVertexBuffer9 * pStreamData, UINT OffsetInBytes, UINT Stride ); StreamNumber : 버텍스 버퍼를 연결할 스트림 소스를 지정, 스트림을 사용하지 않을시에 0 pStreamData : 스트림과 연결하고자 하는 버텍스 버퍼로의 포인터 OffsetInBytes : 렌더링 파이프라인으로 공급될 버텍스 데이터의 시작을 지정하는 스트림의 시작 오프셋 보통 0 Stride : 스트림에..
-
Lock()Programing/DirectX 2008. 1. 26. 20:49
버텍스 버퍼 메모리에 접근하기 위해서는 일단 해당 메모리 영역을 잠궈야 한다.(Lock) 사용이 끝나면 반드시 닫아 주어야 한다.(unLock) HRESULT Lock( UINT OffsetToLock, UINT SizeToLock, VOID ** ppbData, DWORD Flags ); OffsetToLock : 잠금을 시작할 버퍼 위치의 오프셋 SizeToLock : 잠글 바이트의 수 ppbData : 잠근 메모리의 시작을 가리키는 포인터(해당 포인터로 시작지점을 가져온다) Flags : 잠금을 이루는 방법, 보통 0을 사용하나 다음과 같은 플래그들이 있다. - D3DLOCK_DISCARD : 동적 버퍼에만 이용할 수 있다. : 하드웨어에게 버퍼를 버리도록 지시하고 새로 할당된 버퍼의 포인터를 리턴..
-
CreateVertexBuffer 메서드Programing/DirectX 2008. 1. 26. 20:21
정점 버퍼를 생성 한다. HRESULT CreateVertexBuffer( UINT Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer9** ppVertexBuffer, HANDLE* pHandle ); Length : 버퍼에 할당할 바이트 수. 예를들어 3개의 버텍스를 보관할수 있는 버텍스 버퍼를 만들고자 한다면 3 * sizeof(버텍스 구조체)로 지정한다. Usage : 버퍼가 이용되는 방법을 결정 보통은 0을 사용한다. 또한 다음과 같은 플래그를 사용할 수 있다. D3DUSAGE_DYNAMIC : 동적 버퍼생성, 비디오 메모리에 저장. 갱신이 빠름. 파티클등에 사용 D3DUSAGE_POINTS : 포인트 기본형을 보관할 것임을 ..