DirectX Graphics ÇÁ·Î±×·¡¹Ö °¡ÀÌµå Æ©Å丮¾ó, »ùÇÃ, Åø, ÈùÆ® »ùÇà »ùÇà ÇÁ·¹ÀÓ¿öÅ©(framework)   [¸ñÂ÷¿­¶÷] [ÁÖ¼Òº¹»ç] [½½·Ôºñ¿ì±â]
»ùÇà ÇÁ·¹ÀÓ¿öÅ©(framework)
 
Microsoft DirectX 9.0

»ùÇà ÇÁ·¹ÀÓ¿öÅ©(framework)


Microsoft® DirectX® 9.0 ¹× Microsoft Direct3D® ¼ÒÇÁÆ®¿þ¾î °³¹ß Ŷ (SDK)ÀÇ ±×·¡ÇȽº »ùÇà ÇÁ·¹ÀÓ¿öÅ©(framework)´Â, DirectX 8.0 ÀÇ ±×·¡ÇȽº »ùÇà ÇÁ·¹ÀÓ¿öÅ©(framework)·ÎºÎÅÍ ¹ßÀüÇÑ °ÍÀÌ´Ù. SDK ÀÇ »ùÇÃÀº, µðÆúÆ®·Î (SDK ·çÆ®) \Samples\C++ ¿¡ ÀνºÅç µÈ´Ù. ¿©±â¼­ ÁÖ¸ñÇÏ´Â Æú´õ´Â Common ¿Í Direct3D ÀÌ´Ù. Common Æú´õ¿¡´Â »ùÇà ÇÁ·¹ÀÓ¿öÅ©(framework)°¡ µé¾î°¡ ÀÖ´Ù. Direct3D Æú´õ¿¡´Â, ÀÌ·¯ÇÑ ±×·¡ÇȽº ÇÁ·¹ÀÓ¿öÅ©(framework)¿¡ ±Ù°ÅÇÏ´Â Direct3D »ùÇÃÀÌ µé¾î°¡ ÀÖ´Ù.

±×·¡ÇȽº ÇÁ·¹ÀÓ¿öÅ©(framework)´Â, 5 °³ÀÇ ¼Ò½º ¸ðµâ·ÎºÎÅÍ ±¸¼ºµÇ¾î ÀÖ´Ù.

´ëÀÀÇÏ´Â Çì´õ ÆÄÀÏÀº (SDK ·çÆ®) \Samples\C++\Common\Include Æú´õ¿¡ ÀÖ´Ù.

°¢ »ùÇÃÀº, CD3DApplication ÀÇ ¼­ºê Ŭ·¡½º (ÀϹÝÀûÀ¸·Î CMyD3DApplication ¶ó°í ¸í¸íµÈ´Ù)¿Í ´ÙÀ½¿¡ ³ªÅ¸³»´Â ÀÏ·ÃÀÇ ¿À¹ö¶óÀ̵å(override) °¡´ÉÇÑ ¸Þ¼­µå¸¦ ó¸® ÇÑ´Ù.

// Overridable functions for the 3-D scene created by the application.
virtual HRESULT ConfirmDevice(D3DCAPS9*, DWORD, D3DFORMAT)   { return S_OK; }
virtual HRESULT OneTimeSceneInit()                         { return S_OK; }
virtual HRESULT InitDeviceObjects()                        { return S_OK; }
virtual HRESULT RestoreDeviceObjects()                     { return S_OK; }
virtual HRESULT FrameMove()                                { return S_OK; }
virtual HRESULT Render()                                   { return S_OK; }
virtual HRESULT InvalidateDeviceObjects()                  { return S_OK; }
virtual HRESULT DeleteDeviceObjects()                      { return S_OK; }
virtual HRESULT FinalCleanup()                             { return S_OK; }

/*
    The prototypes for these methods are contained in D3dapp.h in the
    CD3Dapplication class.  The samples create a new 
    application and override those methods that are needed by the
    application.
*/

»ó¼Ó Ŭ·¡½ºÀÇ ¿¹

ÀÌ ¿¹¿¡¼­´Â, ¿À¹ö¶óÀ̵å(override) °¡´ÉÇÑ ¸Þ¼­µåÀÇ ¼­ºê ¼¼Æ®¸¦ »ç¿ëÇÑ´Ù. Ŭ·¡½º CMyD3DApplication ´Â, ´ÙÀ½ÀÇ ¸Þ¼­µå¸¦ Æ÷ÇÔÇϰí ÀÖ´Ù. ´ÙÀ½¿¡, ÀÌ °¢ ¸Þ¼­µå¿¡ ´ëÇØ ¼³¸íÇÑ´Ù.

class CMyD3DApplication : public CD3DApplication
{
public:
    CMyD3DApplication();
protected:
    HRESULT ConfirmDevice( D3DCAPS9*, DWORD, D3DFORMAT );
    HRESULT DeleteRestoreDeviceObjects();
    HRESULT RestoreDeviceObjects();
    HRESULT FrameMove();
    HRESULT Render();
private:
    LPDIRECT3DVERTEXBUFFER9 m_pVB;         // Vertex buffer to hold vertices

ÄÜÆ®¶óũŸ

ÄÜÆ®¶óũŸ´Â, À©µµ¿ì ŸÀÌÆ²ÀÇ ÃʱâÈ­, ±íÀÌ ¹öÆÛ¸µÀÇ À¯È¿È­, ¹× Á¤Á¡ ¹öÆÛÀÇ ÃʱâÈ­¸¦ ½Ç½ÃÇÑ´Ù.

CMyD3DApplication::CMyD3DApplication()
{
    m_strWindowTitle    = _T("D3D Example");    // title bar string
    m_bUseDepthBuffer   = TRUE;                 // enable depth buffer
    m_pVB               = NULL;                 // initialize  
}

À©µµ¿ì ŸÀÌÆ²Àº, ¾ÖÇø®ÄÉÀ̼ÇÀ» ±âµ¿ Çϸé ŸÀÌÆ² ¹Ù ¶Ç´Â À©µµ¿ì Ŭ·¡½º¿¡ Ç¥½ÃµÇ´Â ¿ÍÀ̵å ij¸¯ÅÍ ¶óÀÎÀÌ´Ù. À̰ÍÀº ¿É¼ÇÀÌ´Ù.

base class´Â, ±íÀÌ ¹öÆÛ¸¦ À¯È¿ÇϰÔÇϱâ À§ÇÑ ¸â¹ö º¯¼ö¸¦ Æ÷ÇÔÇÑ´Ù. ÀÌ ºÒ¸®¾ð °ªÀÇ µðÆúÆ®°ªÀº FALSE ·Î, ±íÀÌ ¹öÆÛ´Â ¹«È¿°¡ µÈ´Ù.

À©µµ¿ì ŸÀÌÆ²Àº, Unicode ¿Í ANSI ¹®ÀÚ¸¦ Áö¿ø ÇÏ´Â TCHAR ij¸¯ÅÍ ¶óÀÎÀÌ´Ù. ¾ÖÇø®ÄÉÀ̼ÇÀÇ ±âµ¿½Ã¿¡, ŸÀÌÆ² ¹Ù¿¡ Ç¥½ÃµÈ´Ù. ÀÌ Ä³¸¯ÅÍ ¶óÀÎÀº CMyD3DApplication ÀÇ À¯È¿±â°£Áß, º¸°ü À¯ÁöµÈ´Ù.

ÀåÄ¡ÀÇ È®ÀÎ

prototype´Â, ´ÙÀ½°ú °°ÀÌ µÈ´Ù.

HRESULT ConfirmDevice(D3DCAPS *pCaps, DWORD dwBehavior,
		      D3DFORMAT fmtBackBuffer)
}

[in] pCaps - È®ÀÎ ´ë»ó ÀåÄ¡ÀÇ D3DCAPS ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ. ÀÌ ±¸Á¶Ã¼ÀÇ ¸â¹ö¸¦ Á¶»çÇØ, ÁöÁ¤µÈ ÀåÄ¡¿¡ ¾ÖÇø®ÄÉÀ̼ÇÀÌ ÇÊ¿ä·Î ÇÏ´Â ´É·ÂÀÌ ÀÖÀ»Áö ¾î¶³Áö¸¦ ÆÇ´ÜÇÑ´Ù.

[in] dwBehavior - IDirect3D9::CreateDevice ÀÇ µ¿ÀÛ Ç÷¡±×¿¡ ´ëÀÀÇÏ´Â 0 ȤÀº º¹¼ö°³ÀÇ Ç÷¡±×. ´ÙÀ½ÀÇ Ç÷¡±×´Â ÁöÁ¤µÈ ÀåÄ¡ÀÇ µ¿ÀÛÀ» ³ªÅ¸³½´Ù.

D3DCREATE_PUREDEVICE
D3DCREATE_HARDWARE_VERTEXPROCESSING
D3DCREATE_SOFTWARE_VERTEXPROCESSING
D3DCREATE_MIXED_VERTEXPROCESSING
}

CD3DApplication ´Â ´ÙÀ½ÀÇ ¼ø¼­·Î ÀåÄ¡ÀÇ µ¿ÀÛÀ» È®ÀÎÇÑ´Ù.

Ç»¾î ÀåÄ¡ µ¿ÀÛ¿¡ ´ëÇØ¼­´Â, Ç»¾î ÀåÄ¡¿¡ ´ëÇÑ Áö¿øÀÌ ³ªÅ¸³ª°í ÀÖ´Â ÀåÄ¡¸¸À» È®ÀÎÇÑ´Ù.

Çϵå¿þ¾î Á¤Á¡ 󸮿¡ ´ëÇØ¼­´Â, Çϵå¿þ¾î¿¡ ÀÇÇÑ º¯È¯°ú Á¶¸í¿¡ ´ëÇÑ Áö¿øÀÌ ³ªÅ¸³ª°í ÀÖ´Â ÀåÄ¡¸¸À» È®ÀÎÇÑ´Ù.

[in] fmtBackBuffer - ÀåÄ¡ÀÇ µðÆúÆ®ÀÇ ½º¿Ò üÀο¡ °ü·ÃµÈ ¹é ¹öÆÛÀÇ ÁöÁ¤µÈ Æ÷¸Ë.

ÀÌ ¸Þ¼­µå¸¦ ¿À¹ö¶óÀ̵å(override) ÇÒ ¶§, ÁöÁ¤µÈ ÀåÄ¡ÀÇ ´É·Â, µ¿ÀÛ ¹× ¹é ¹öÆÛ Æ÷¸ËÀ» Çã¿ë ÇÒ ¼ö ÀÖ´Â °ÍÀÎ °æ¿ì´Â, ¾ÖÇø®ÄÉÀ̼ǿ¡¼­´Â S_OK ¸¦ µ¹·ÁÁÙ Çʿ䰡 ÀÖ´Ù. ±× ÀÌ¿ÜÀÇ °æ¿ì´Â, E_FAIL ¸¦ µ¹·ÁÁÙ Çʿ䰡 ÀÖ´Ù.

DeleteDeviceObjects

DeleteDeviceObjects ´Â, ¾ÖÇø®ÄÉÀ̼ÇÀ» Á¾·á ÇÒ ¶§ ¶Ç´Â ÀåÄ¡¸¦ º¯°æÇÒ °æ¿ì¿¡ È£ÃâµÈ´Ù. Á¤Á¡ ¹öÆÛ µî, ÀåÄ¡¿¡ ÀÇÁ¸ÇÏ´Â °³Ã¼¸¦ »èÁ¦ÇÒ °æ¿ì¿¡ ÀÌ ¸Þ¼­µå¸¦ »ç¿ëÇÑ´Ù.

HRESULT CVShader1::DeleteDeviceObjects()
{
    m_pQuadVB->Release();
    m_pQuadVB = NULL;
    return S_OK;

RestoreDeviceObjects

ÀÌ ¸Þ¼­µå´Â, ¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î ÀåÄ¡ ¸Þ¸ð¸® °³Ã¼ ¹× ÀåÄ¡ ½ºÅ×ÀÌÆ®¸¦ º¹¿øÇÒ Çʿ䰡 ÀÖÀ» ¶§ È£ÃâµÈ´Ù. DirectX ÀåÄ¡¸¦ »ý¼º ¶Ç´Â »çÀÌÁî º¯°æÇßÀ» ¶§¿¡´Â, À̰ÍÀÌ ÇÊ¿äÇÏ°Ô µÈ´Ù. ÀÌ ¸Þ¼­µå´Â, °³Ã¼ÀÇ »ý¼º°ú ·»´õ¸µ ½ºÅ×ÀÌÆ®ÀÇ ÃʱâÈ­¿¡ °üÇÑ ´ëºÎºÐÀÇ ÀÛ¾÷À» ½Ç½ÃÇÑ´Ù.

HRESULT CMyD3DApplication::RestoreDeviceObjects()
{
    // Create the vertex buffer.Allocate enough memory (from the default pool) 
	//   to hold the custom vertices.Specify the flexible vertex format (FVF),
    //   so the vertex buffer knows what data it contains.
    if( FAILED( m_pd3dDevice->CreateVertexBuffer(
                          NUM_VERTS*sizeof(CUSTOMVERTEX),
                          0,
                          D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &m_pVB ) ) )
    {
        return E_FAIL;
    }
    // Fill the vertex buffer.First, lock the vertex buffer to get access to
    //   the vertices.This mechanism is required because vertex buffers 
    //   may be in device memory.Then use memcpy to do a fast data copy.
    VOID* pVertices;
    if( FAILED( m_pVB->Lock( 0, sizeof(g_Vertices), 
     (BYTE**) &pVertices, 0 ) ) )
        return E_FAIL;
    memcpy( pVertices, g_Vertices, sizeof(g_Vertices) );
    m_pVB->Unlock();

    // Set the projection matrix.The size of the back buffer comes from the
    //   base class.
    D3DXMATRIX matProj;
    FLOAT fAspect = m_d3dsdBackBuffer.Width / 
                    (FLOAT) m_d3dsdBackBuffer.Height;
    D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, fAspect, 
                                 1.0f, 100.0f );
    m_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );

    // Set up the view matrix.A view matrix can be defined from an eye 
    //   point, a look-at point, and an up-direction vector.In this example, 
    //   the eye position is (0,1,-4) the look-at point is (0,0,0) and the 
    //   up vector is (0,1,0).
    D3DXMATRIX matView;
    D3DXMatrixLookAtLH( &matView, &D3DXVECTOR3( 0.0f, 1.0f,-4. 0f ),
                                  &D3DXVECTOR3( 0.0f, 0.0f, 0.0f ),
                                  &D3DXVECTOR3( 0.0f, 1.0f, 0.0f ) );
    m_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );

    // Set up default texture states.
    // Set up render states (this is only one example render state).
    m_pd3dDevice->SetRenderState( D3DRS_CULLMODE,     D3DCULL_NONE );

    return S_OK;

ÀÌ ¸Þ¼­µå´Â, Á¤Á¡ ¹öÆÛ¸¦ »ý¼º ÇØ, ±× Áß¿¡ Á¤Á¡ µ¥ÀÌÅ͸¦ º¹»ç ÇÑ´Ù. ºä Çà·Ä ¹× Åõ¿µ Çà·Äµµ »ý¼º ÇÑ´Ù. ÀÌ·¯ÇÑ Çà·ÄÀº, Á¤Á¡ ¹öÆÛ³»ÀÇ °³Ã¼¿¡ ´ëÇÑ Ä«¸Þ¶óÀÇ ¹æÇâÀ» Á¤ÀÇÇÑ´Ù. ÀÌ ¿¹¿¡¼­´Â °¡Áö ¾ÊÁö¸¸, ÀÌ ¸Þ¼­µå·Î ÅØ½ºÃ³ ½ºÅ×ÀÌÁö ½ºÅ×ÀÌÆ®¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. º¯°æµÉ °¡´É¼ºÀÇ ³·Àº ·»´õ¸µ ½ºÅ×ÀÌÆ®°¡ ¼³Á¤µÈ´Ù. À̰͵鿡 ÀÇÇØ, Àå¸é(scene)ÀÇ ·»´õ¸µ ¹æ¹ýÀÌ Á¤ÇØÁø´Ù.

FrameMove

ÀÌ ¸Þ¼­µå¿¡´Â, ¾Ö´Ï¸ÞÀ̼ǰú °°ÀÌ 1 ÇÁ·¹ÀÓ ¸¶´Ù ÀϾ´Â ¾×¼ÇÀ» ³Ö´Â´Ù. ÀÌ ¿¹¿¡¼­´Â, ¿ùµå º¯È¯¿¡, y ÃàÀ» Áß½ÉÀ¸·Î ÇÑ È¸ÀüÀ» ´õÇϰí ÀÖ´Ù.

HRESULT CMyD3DApplication::FrameMove()
{
    // For our world matrix, just rotate the object about the y-axis.
    D3DXMATRIX matWorld;
    D3DXMatrixRotationY( &matWorld, ::TimeGetTime()/150. 0f );
    m_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );

    return S_OK;
}

Windows ¸Þ¼­µå ::TimeGetTime()´Â, ÇöÀç ½Ã°¢À» µ¹·ÁÁØ´Ù. À̰ÍÀ» 150 À¸·Î ³ª´©¸é °³Ã¼¸¦ ÀÏÁ¤ °¢µµ¾¿ ȸÀü ÇÒ ¶§ÀÇ 1 ȸ ºÐÀÇ È¸Àü °¢µµ¸¦ ¾òÀ» ¼ö ÀÖ´Ù.

Render

ÀÌ ¸Þ¼­µå´Â, Ãâ·ÂÀ» ·»´õ¸µ ÇÒ °æ¿ì¿¡ È£ÃâµÈ´Ù. ºäÆ÷Æ®¸¦ Ŭ¸®¾î ÇØ, Àå¸é(scene)¿Í ½ºÅ×ÀÌÆ®ÀÇ º¯°æÀ» ·»´õ¸µ ÇÑ´Ù.

HRESULT CMyD3DApplication::Render()
{
    // Clear the viewport.
    m_pd3dDevice->Clear( 0L, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, 
		D3DCOLOR_XRGB(0,0,0), 1.0f, 0L );

    // Begin the scene.
    if( SUCCEEDED( m_pd3dDevice->BeginScene() ) )
    {
        m_pd3dDevice->SetStreamSource( 0, m_pVB, sizeof(CUSTOMVERTEX) );
	    m_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
        m_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLEFAN, 0, NUM_TRIS );
        m_pd3dDevice->EndScene();
    }

    return S_OK;
}

Render ¸Þ¼­µå´Â, ¿ì¼±, Clear ¸¦ »ç¿ëÇØ ºäÆ÷Æ®¸¦ Ŭ¸®¾î ÇÑ´Ù. ´ÙÀ½¿¡, ´ë°¡ µÈ BeginScene ¿Í EndScene ÀÇ »çÀÌ¿¡, SetStreamSource ¸¦ »ç¿ëÇØ, Ä¿½ºÅÒ Á¤Á¡ ŸÀÔÀÇ »çÀÌÁîÀÇ º¸Æø°ú ÇÔ²² Á¤Á¡ ¹öÆÛ m_pVB ¸¦ »ç¿ëÇÏ´Â °ÍÀ» ·±Å¸ÀÓ¿¡°Ô ÀüÇÑ´Ù. ´ÙÀ½¿¡, °¡Àå ´Ü¼øÇÑ Å¸ÀÔÀÇ À¯¿¬ÇÑ Á¤Á¡ Æ÷¸Ë (FVF) ¼ÎÀÌ´õ¸¦ »ç¿ëÇÏ´Â °ÍÀ» ·±Å¸ÀÓ¿¡°Ô ÀüÇÑ´Ù. ¸¶Áö¸·À¸·Î, DrawPrimitive ¸¦ È£ÃâÇØ »ç°¢ÇüÀ» ·»´õ¸µ ÇÑ´Ù.

±× ¿ÜÀÇ ÇÔ¼ö

DeleteDeviceObjects ´Â, ¾ÖÇø®ÄÉÀ̼ÇÀ» Á¾·á ÇÒ ¶§ ¶Ç´Â ÀåÄ¡¸¦ º¯°æÇÒ °æ¿ì¿¡ È£ÃâµÈ´Ù. ÀÌ ¸Þ¼­µå´Â, ÀåÄ¡¿¡ ÀÇÁ¸ÇÏ´Â °³Ã¼¸¦ »èÁ¦Çϱâ À§Çؼ­ »ç¿ëÇÑ´Ù.

ConfirmDevice ´Â, ÀåÄ¡°¡ ÃÖ¼ÒÇÑÀÇ ±â´É ¼¼Æ®¸¦ °®Ãß°í ÀÖ´ÂÁö¸¦ üũÇÑ´Ù. ÀÌ ¸Þ¼­µå´Â, ÀåÄ¡ÀÇ ÃʱâÈ­Áß¿¡ È£ÃâµÈ´Ù.

InvalidateDeviceObjects ´Â, ÀåÄ¡¿¡ ÀÇÁ¸ÇÏ´Â °³Ã¼°¡ »èÁ¦µÉ °¡´É¼ºÀÌ ÀÖÀ» ¶§ È£ÃâµÈ´Ù. º¸Åë, ÀÌ ¸Þ¼­µå¿¡´Â, Á¤Á¡ ¹öÆÛµîÀÇ ÀåÄ¡¿¡ ÀÇÁ¸ÇÏ´Â °³Ã¼¸¦ Ãß°¡ÇÑ´Ù.

OneTimeSceneInit ´Â, ÃÖÃÊÀÇ ¾ÖÇø®ÄÉÀÌ¼Ç ±âµ¿½Ã¿¡ ½ÇÇàÇÒ Çʿ䰡 ÀÖ´Â ÄÚµå¿ëÀÌ´Ù.

¸ÞÀϸµ¸®½ºÆ®

±×·¡ÇȽº¸¦ Ãë±ÞÇϰí ÀÖ´Â ´Ù¸¥ °³¹ßÀÚ°¡ ¹ß°ßµÇ´Â Àå¼ÒÀÇ 1 °³¿¡, DirectX °³¹ßÀÚÀÇ ¸ÞÀϸµ¸®½ºÆ®°¡ ÀÖ´Ù. À̰ÍÀº DirectX °³¹ßÀÚÀü¿ëÀÇ ±â¼úÀûÀÎ µð½ºÄ¿¼ÇÀÇ Æ÷·³À̸ç, ±×·¡ÇȽº, ³×Æ®¿öÅ©, ¹× ÀԷ¿¡ °üÇÑ ¿µ¿ªÀ» Ä¿¹öÇϰí ÀÖ´Ù. ÀÌ ¸ÞÀϸµ¸®½ºÆ®ÀÇ ¾îÄ«À̺ê(archive)´Â,DirectX Dev  World Wide Web ¸µÅ©¿¡ ÀÖ´Ù. ´Ù¸¥ ¸ÞÀϸµ¸®½ºÆ®¿Í °°ÀÌ, À̰ÍÀº ±â¼ú Áö¿øÀÇ Æ÷·³Àº ¾Æ´Ï´Ù. ±×·¯³ª, DirectX ¿¡ °üÇÑ Á¤º¸ ¼Ò½º·Î¼­ À¯¿ëÇÏ´Ù.



© 2002 Microsoft Corporation. All rights reserved.
¡èTOP