ID3DXEffect ÇÁ·¹ÀÓ¿÷¿¡ Ãß°¡

¼ÎÀÌ´õ¸¦ »ç¿ëÇϱâ À§ÇØ ID3DXEffect¸¦ ÇÁ·¹ÀÓ¿÷¿¡ Ãß°¡ÇØ º¸ÀÚ.
xÆÄÀÏ°ú ºÐ¸® ÇÒ·Á°í ÇßÀ¸³ª ¾à°£ÀÇ ¾î·Á¿òÀÌ ÀÖ¾î xÆÄÀÏ°úÀÇ ÀÇÁ¸¼ºÀ» ¿ÏÀüÈ÷ ºÐ¸®ÇÏÁö
¸øÇß´Ù.

CDXEffect Ŭ·¡½º´Â ID3DXEffect °´Ã¼¸¦ °¡Áö°í ÀÖ´Ù.

//dxeffect.h

#ifndef __CDXEFFEXT_H

#define __CDXEFFEXT_H

 

class CDXEffect

{

public:

    CDXEffect();

    virtual ~CDXEffect();

 

public:

    bool Load(IDirect3DDevice9* pDevice, char* szFileName);

    void Release();

    ID3DXEffect* GetEffect();

 

public:

    //·»´õ¸µ½Ã ºÒ·ÁÁö´Â ¸Þ½îµå

    bool SetTechnique(const char* szTechnique);

    UINT Begin();

    bool End();

 

    bool BeginPass(UINT uPass);

    bool EndPass();

    bool CommitChanges();

 

protected:

    IDirect3DDevice9*    m_pDevice;

    ID3DXEffect*        m_pEffect;   

};

ÀÌÆåÆ®´Â 3´Ü°è¿¡ ÀÇÇؼ­ »ç¿ë µÈ´Ù.

1. »ý¼º ¹× ·Îµù

2. ·»´õ¸µ

3. ÇØÁ¦

1. »ý¼º ¹× ·Îµù:

CDXEffect* pkDXEffect = new CDXEffect;
pkDXEffect->Load(pkDevice, "test.fx");

 

2. ·»´õ¸µ

void CXFile::Draw()

{

    HRESULT hr;

    ID3DXEffect* pEffect = m_pDXEffect->GetEffect();//---> (1)

 

    D3DXMATRIX   matWorld, matView, matProj;

    m_pDevice->GetTransform(D3DTS_WORLD,&matWorld);

    m_pDevice->GetTransform(D3DTS_VIEW, &matView);

    m_pDevice->GetTransform(D3DTS_PROJECTION, &matProj);

 

    D3DXMATRIX matWorldView = matWorld * matView;

    D3DXMATRIX matWorldViewProj = matWorld * matView * matProj;

 

    _V(pEffect->SetMatrix("g_matWorldView", &matWorldView));//---> (2)

    _V(pEffect->SetMatrix("g_matWorldViewProj", &matWorldViewProj));

 

    DWORD cPasses;

    for(int i = 0; i < (int)m_materialContainer.size(); ++i)

    { 

        bool bResult;

        if(m_textureContainer[i])

            bResult = m_pDXEffect->SetTechnique("BasicTest"); //---> (3)

        else

            bResult = m_pDXEffect->SetTechnique("NoTextureTest");

 

        cPasses = m_pDXEffect->Begin(); //---> (4)

        for(UINT uPassCount = 0; uPassCount < cPasses; ++uPassCount)

        {

            bResult = m_pDXEffect->BeginPass(uPassCount); //---> (5) 

            //¾Æ·¡ (6)
            
SetAttribute(m_pDXEffect, m_textureContainer[i], &m_materialContainer[i]);

            bResult = m_pDXEffect->CommitChanges(); //--->(7)

            m_pMesh->DrawSubset(i);

            m_pDXEffect->EndPass(); //---> (8)

        }

 

        m_pDXEffect->End(); //---> (9)

    }   

}

 

<ID3DXEffect¸¦ »ç¿ëÇÏ´Â °£´ÜÇÑ ¹æ¹ý>

SetTechnique()
   Begin()
      BeginPass()
      //¸ÞÆ®¸®¾ó ¼³Á¤µµ ¿©±â¼­ ÇÑ´Ù.
      SetTexture()
      CommitChanges()
      //¿©±â¼­ ¸Þ½Ã¸¦ ±×¸°´Ù.
      EndPass()
   End()

1) CDXEffect¿¡¼­ ¾òÀ»¼ö ¾ø´Â ID3DXEffectÀÇ ¸Þ¼Òµå´Â GetEffect()¸¦ ÅëÇؼ­
ID3DXEffect¸¦ Á÷Á¢ ½ÇÇàÇÑ´Ù.

2) SetMatrix()¸¦ ¿ùµåºä°ª°ú ¿ùµåºäÇÁ·ÎÁ§¼Ç °ªÀ» Effect¿¡ ³Ñ±ä´Ù.

3) ÅؽºÃÄ°¡ ÀÖÀ¸¸é "BasicTest" Å×Å©´ÐÀ» ½ÇÇàÇÑ´Ù.
   ÅؽºÃÄ°¡ ¾øÀ¸¸é "NoTextureTest" Å×Å©´ÐÀ» ½ÇÇàÇÑ´Ù.

4) Begin()À» ÅëÇØ Æнº ¼ö¸¦ ¾ò¾î¿Í È°¼ºÈ­µÈ Å×Å©´ÐÀ» ½ÃÀÛÇÑ´Ù.

5) È°¼ºÈ­µÈ Å×Å©´ÐÀÇ Æнº¸¦ ½ÃÀÛÇÑ´Ù.

6) ¸ÞÆ®¸®¾ó °ª°ú ÅؽºÃÄ °ªÀ» ÀÌÆåÆ®¿¡ ³Ñ°ÜÁØ´Ù.

7) ¸ÞÆ®¸®¾ó °ª°ú ÅؽºÃÄ °ªÀÌ »ç¿ë µÇ¾ú±â ¶§¹®¿¡ CommitChanges()À» ½ÇÇàÇÑ´Ù.

8) Æнº¸¦ ³¡³½´Ù.

9) Å×Å©´ÐÀ» ³¡³½´Ù.

 

3. ÇØÁ¦

ID3DXEFFECT * pEffect;

pEffect->Release()

 

ID3DXEffect¿¡ °üÇÑ ¼³¸íÀº ¿©±â(/hlsl/tutorial04.html)