D3DQuery ¸¦ ÀÌ¿ëÇÑ Occlusion Culling
 FrontPage|FindPage|TitleIndex|RecentChanges|UserPreferences E D R S P I M H RSS

CodeOptimizationCollision DetectionConcurrencyPatternsCppProgrammingD3DPOOL ¿­°ÅÇü Á¦´ë·Î ¾Ë±â › D3DQuery ¸¦ ÀÌ¿ëÇÑ Occlusion Culling
Contents:
1 °³¿ä
2 °ü·Ã¼­Àû
3 Áֿ丵ũ
4 D3DQuery ÇÁ·Î±×·¡¹Ö
4.1 D3DQuery º¯¼ö ¼±¾ð
4.2 D3DQuery ÃʱâÈ­
4.3 D3DQuery Occlusion ó¸®
4.4 D3DQuery ÇØÁ¦
5 ÀÀ¿ë
6 ´Ù¿î·Îµå
7 °ü·Ã¸µÅ©


1 °³¿ä #


DirectX 9.0 ºÎÅÍ Çϵå¿þ¾î °¡¼ÓÀ» ÀÌ¿ëÇÑ Occlusion Culling ÀÌ °¡´ÉÇÏ´Ù. IDirect3DQuery9 ÀÎÅÍÆäÀ̽ºÀÇ D3DQUERYTYPE_OCCLUSION Query ¿¡ ÀÇÇÏ¿© ó¸®ÇÑ´Ù.

D3DQuery ÀÇ D3DQUERYTYPE_OCCLUSION Query ´Â ·»´õ¸µµÈ Pixel ¼ö¸¦ ±¸ÇÏ´Â Query ·Î Mesh ¸¦ ½ÇÁ¦·Î ·»´õ¸µÇϱâ Àü¿¡ Àüó¸® °úÁ¤À̶ó°í º¼ ¼ö ÀÖ´Ù.


2 °ü·Ã¼­Àû #



3 Áֿ丵ũ #


4 D3DQuery ÇÁ·Î±×·¡¹Ö #


4.1 D3DQuery º¯¼ö ¼±¾ð #

1  LPDIRECT3DQUERY9    m_pTeapotVizQuery;
2
3  BOOL    m_bDeviceSupportsVizQuery;      // D3DQuery Áö¿ø ¿©ºÎ
4  DWORD   m_dwVizData;                    // ·»´õ¸µµÈ Pixel ¼ö

4.2 D3DQuery ÃʱâÈ­ #

 1  // D3DQUERYTYPE_OCCLUSION Áö¿ø ¿©ºÎ È®ÀÎ
 2  if( D3DERR_NOTAVAILABLE == m_pd3dDevice->CreateQuery(
 3              D3DQUERYTYPE_OCCLUSION, NULL ) )
 4  {
 5      m_bDeviceSupportsVizQuery = FALSE;      // Áö¿ø ¾ÈµÊ
 6  }
 7  else
 8  {
 9      m_bDeviceSupportsVizQuery = TRUE;       // Áö¿ø µÊ
10  }
11
12  // D3DQuery »ý¼º
13  if( m_bDeviceSupportsVizQuery )
14  {
15      m_pd3dDevice->CreateQuery( D3DQUERYTYPE_OCCLUSION,
16                  &m_pTeapotVizQuery );
17  }

4.3 D3DQuery Occlusion ó¸® #

 1  //
 2  // Áö¿øµÉ °æ¿ì Query ½ÃÀÛ
 3  //
 4  if( m_bDeviceSupportsVizQuery )
 5  {
 6      m_pTeapotVizQuery->Issue( D3DISSUE_BEGIN );
 7  }
 8
 9  //
10  // teapot ¸¦ ±×¸°´Ù.
11  //
12  LPDIRECT3DVERTEXBUFFER9 pVB;
13  LPDIRECT3DINDEXBUFFER9 pIB;
14  UINT numVertices, numFaces;
15
16  m_pTeapot->m_pLocalMesh->GetVertexBuffer( &pVB );
17  m_pTeapot->m_pLocalMesh->GetIndexBuffer( &pIB );
18  numVertices = m_pTeapot->m_pLocalMesh->GetNumVertices();
19  numFaces = m_pTeapot->m_pLocalMesh->GetNumFaces();
20
21  m_pd3dDevice->SetFVF( m_pTeapot->m_pLocalMesh->GetFVF() );
22
23  m_pd3dDevice->SetStreamSource( 0, pVB, 0, sizeof( TEAPOT_VERTEX ) );
24  m_pd3dDevice->SetIndices( pIB );
25
26  m_pd3dDevice->DrawIndexedPrimitive( D3DPT_TRIANGLELIST,
27              0, 0, numVertices, 0, numFaces );
28
29  SAFE_RELEASE( pVB );
30  SAFE_RELEASE( pIB );
31
32
33  // Áö¿øµÉ °æ¿ì Query ¸¦ Á¾·áÇÏ°í °á°ú°ª¸¦ ±â´Ù¸°´Ù.
34  if( m_bDeviceSupportsVizQuery )
35  {
36      m_pTeapotVizQuery->Issue(D3DISSUE_END );
37
38      // Stupidly block until we have a query result
39      while( m_pTeapotVizQuery->GetData( (void *) &m_dwVizData,
40                  sizeof( DWORD ), D3DGETDATA_FLUSH ) == S_FALSE )
41      {
42          // asynchronous aspect of GetData() so I can do something
43          // here while the HW is still working on my DrawPrimitives()
44      }
45  }

4.4 D3DQuery ÇØÁ¦ #

1  if( m_bDeviceSupportsVizQuery )
2  {
3      SAFE_RELEASE( m_pTeapotVizQuery );
4  }


5 ÀÀ¿ë #


D3DQUERYTYPE_OCCLUSION Query ´Â ½ÇÁ¦·Î ·»´õ¸µµÇ´Â 2Â÷ ·»´õ¸µ Àü¿¡ Z-Buffer ¸¦ ÀÌ¿ëÇÑ 1Â÷ ·»´õ¸µ½Ã Occlusion ¿©ºÎ¸¦ È®ÀÎÇØ¾ß ÇÑ´Ù.

  • Á¤¹ÐÇÑ Occlusion detection À» À§Çؼ­´Â ½ÇÁ¦ È­¸é°ú µ¿ÀÏÇÑ Å©±âÀÇ Z-Buffer ¸¦ »ý¼ºÇÏ¿© Test ÇÑ´Ù.
  • °£´ÜÇÑ Test °¡ ÇÊ¿äÇÑ °æ¿ì È­¸éº¸´Ù ÀÛÀº Z-Buffer ¸¦ ÀÌ¿ëÇÏ¿© Á¤¹Ðµµ´Â ¶³¾îÁöÁö¸¸ Occlusion Test ¼Óµµ¸¦ ³ôÀÏ ¼ö ÀÖ´Ù.


6 ´Ù¿î·Îµå #



7 °ü·Ã¸µÅ© #




Advanced Rendering Technics

EditText|FindPage|DeletePage|LikePages| Valid XHTML 1.0! Valid CSS! powered by MoniWiki