»ùÇà ÇÁ·Î±×·¥À» ½±°Ô »ç¿ëÇϱâ À§ÇØ DX ÇÁ·¹ÀÓÀ» ¸¸µé¾úÁö¸¸ ½Ã°£ÀÌ ¾î´ÀÁ¤µµ Áö³ª°í ³ª¼ ³ªµµ Âg±ò¸°´Ù. ±×·¡¼ °£´ÜÇÏ°Ô ÇÁ·¹ÀÓÀ» »ç¿ëÇÒ ¼ö ÀÖ´Â ¿¹¸¦º¸ÀÌ°Ù´Ù. ±×¸®°í °£´ÜÇÏ°Ô, ¸¶¿ì½º ÈÙ¿¡ ´ëÇÑ Ã³¸® ¼öÁ¤°ú ¹öÀüÀ» µµÀÔ ÇÏ¿´´Ù.
ÇÁ·¹ÀÓÀ» »ç¿ëÇϱâ À§ÇØ ¸ÕÀú ÇÒ ÀÏÀº CApplciationÀ» »ó¼ÓÇÑ testapp.h, testapp.cpp ÆÄÀÏÀ» ¸¸µç´Ù. ¾Æ·¡ÀÇ °¡»ó ÇÔ¼öµéÀ» »ó¼ÓÇÑ´Ù.
½ÇÁ¦ ¿¹¸¦ º¸À̱â À§ÇØ ÁÖÀüÀÚ¿Í Directional Light¿Í ÅؽºÃÄ ·»´õ¸µÇÑ´Ù.
testapp.h
protected:
virtual bool ProcessKey(HWND hWnd, WPARAM wKey);
virtual bool PostGraphics();
virtual void Cleanup();
virtual void Render();
virtual void Update();
|
testapp.cpp
bool CTestApp::PostGraphics()
{
return true;
}
//---------------------------------------------------------------------------------
void CTestApp::Cleanup()
{
CApplication::Cleanup();
}
//---------------------------------------------------------------------------------
void CTestApp::Update()
{
}
//---------------------------------------------------------------------------------
void CTestApp::Render()
{
}
//---------------------------------------------------------------------------------
bool CTestApp::ProcessKey(HWND hWnd, WPARAM wKey)
{
return CApplication::ProcessKey(hWnd, wKey);
}
|
ÁÖÀüÀÚ ±×¸®±â
//1. ¼±¾ð
ID3DXMesh* m_pTeapotMesh;
//2. »ý¼º
IDirect3DDevice9 * pDevice = m_pGraphics->GetDevice();
D3DXCreateTeapot(pDevice, &m_pTeapotMesh, 0);
//3. ·»´õ¸µ
m_pTeapotMesh->DrawSubset(0);
//4. ÇØÁ¦
if(m_pTeapotMesh)
{
m_pTeapotMesh->Release();
m_pTeapotMesh = 0;
}
|
¼Ò½º Äڵ常À¸·Îµµ ½±°Ô ÀÌÇØ°¡ °¥ °ÍÀÌ´Ù.
ÁÖÀüÀÚ¿¡ Directional Light ºñÃß±â
void CTestApp::InitDirectionalLight()
{
IDirect3DDevice9 * pDevice = m_pGraphics->GetDevice();
D3DLIGHT9 light;
ZeroMemory( &light, sizeof(light) );
light.Type = D3DLIGHT_DIRECTIONAL;
D3DXVECTOR3 vecDir;
vecDir = D3DXVECTOR3(0.0f, 0.0f, 1.0f);
D3DXVec3Normalize((D3DXVECTOR3*)&light.Direction, &vecDir );
// set directional light diffuse color
light.Type = D3DLIGHT_DIRECTIONAL;
light.Diffuse = D3DXCOLOR( 1.f, 1.f, 1.f, 1.f );
light.Ambient = D3DXCOLOR( 0.f, 0.f, 0.f, 1.f );
pDevice->SetLight( 0, &light );
pDevice->LightEnable( 0, TRUE );
pDevice->SetRenderState( D3DRS_LIGHTING, TRUE );
pDevice->SetRenderState( D3DRS_ZENABLE, TRUE );
//Ambient Light ¼³Á¤
pDevice->SetRenderState(D3DRS_AMBIENT, 0x00202020);
D3DMATERIAL9 mtrl;
ZeroMemory( &mtrl, sizeof(mtrl) );
mtrl.Diffuse = D3DXCOLOR( 1.0f, 1.0f, 1.0f, 1.0f );
mtrl.Ambient = D3DXCOLOR( 1.0f, 1.0f, 1.0f, 1.0f );
pDevice->SetMaterial( &mtrl );
pDevice->SetRenderState(D3DRS_DIFFUSEMATERIALSOURCE, D3DMCS_MATERIAL);
//·»´õ¸µÀü¿¡ ¹öÅؽºÀÇ ³ë¸»°ªÀ» Á¤±ÔÈ
//pDevice->SetRenderState(D3DRS_NORMALIZENORMALS, TRUE);
}
|
¿©±âµµ ¼Ò½º¸¦ º¸¸é¼ °³ÀÎÀûÀ¸·Î ÀÌÇØÇϱ⠹ٶõ´Ù.
ÁÖÀÇ) ÇÁ·¹ÀÓ¿¡¼ ÈÙ¸¶¿ì½º¸¦ ¿òÁ÷À̸é Scale Matrix¿¡ ÀÇÇØ È®´ë Ãà¼Ò¸¦ Çϴµ¥, È®´ë ½Ãų¼ö·Ï ÁÖÀüÀÚ°¡ įįÇØÁö°í ÀÖ´Ù. ¿ì¼± ÀÌÀ¯ÀÎÁö ¸ô¶ó¼ Á¶»çÇغ¸´Ï, È®´ë Ãà¼Ò°¡ ÀÖ´Â °æ¿ì ³ë¸Ö°ªÀÌ ºñÁ¤±ÔÈ µÇ±â ¶§¹®¿¡ ¾Æ·¡ÀÇ ÄÚµå·Î ÀçÁ¤±ÔÈ ½ÃÄÑ¾ß ÇÑ´Ù.
pDevice->SetRenderState(D3DRS_NORMALIZENORMALS, TRUE);
D3DRS_NORMALIZENORMALS·Î ¸Å ÇÁ·¹ÀÓ¸¶´Ù ÀçÁ¤±ÔÈ ÇÏ°Ô µÇ¸é ¼Óµµ ÀúÇÏ°¡ Àֱ⠶§¹®¿¡ È®´ë, Ãà¼Òº¸´Ù´Â Ä«¸Þ¶ó À§Ä¡¸¦ ¹Ù²Ù°Å³ª, ¸ðµ¨À» À̵¿ÇÏ¿© È®´ë Ãà¼Ò¸¦ Ç¥ÇöÇϴ°ɷΠ¼öÁ¤ ÇÏ¿´´Ù.
±×¸®°í ÇÁ·¹ÀÓÀÇ ¹öÀü ¹øÈ£¸¦ ºÙÀ̱â·Î Çß´Ù.
application.h¿¡ ´ÙÀ½°ú °°ÀÌ ¹öÀü Ãß°¡
//application.h //ver 0.77
½ºÄÉÀÏÀ» ¸Þ½¬ À̵¿À¸·Î ¼öÁ¤
±âÁ¸ ÄÚµå
void CTestApp::Render()
{
D3DXMATRIX matScale, matRot, matWorld;
D3DXMatrixScaling( &matScale, m_cameraRef.fScale, m_cameraRef.fScale, m_cameraRef.fScale);
D3DXMatrixRotationYawPitchRoll( &matRot, D3DXToRadian(m_cameraRef.fRotateX), D3DXToRadian(m_cameraRef.fRotateY), 0.0f );
matWorld = matScale * matRot;
IDirect3DDevice9 * pDevice = m_pGraphics->GetDevice();
pDevice->SetTransform(D3DTS_WORLD, &matWorld);
........
}
|
¼öÁ¤µÈ ÄÚµå
oid CTestApp::Render()
{
D3DXMATRIX matTranslation, matRot, matWorld;
D3DXMatrixTranslation( &matTranslation, 0.0f, 0.0f, m_cameraRef.wheel * 2.0f);
D3DXMatrixRotationYawPitchRoll( &matRot, D3DXToRadian(m_cameraRef.fRotateX), D3DXToRadian(m_cameraRef.fRotateY), 0.0f );
IDirect3DDevice9 * pDevice = m_pGraphics->GetDevice();
matWorld = matRot * matTranslation;
pDevice->SetTransform( D3DTS_WORLD, &matWorld);
........
}
|
Ä«¸Þ¶ó°¡ Y-UPÀ̱⠶§¹®¿¡, Z°ª¿¡ ÀÇÇØ È®´ë, Ãà¼Òó·³ º¸ÀÌ°Ô²û ¼öÁ¤Çß´Ù. CameraReference ±¸Á¶Ã¼ÀÇ fScale ¸â¹ö º¯¼ö¸¦ wheel º¯¼ö·Î ¼öÁ¤ÇÏ¿´´Ù.
ÁÖÀüÀÚÀÇ Å©±â ¶§¹®¿¡ void CGraphics::SetupCamera()¸Þ½îµåÀÇ Ä«¸Þ¶ó À§Ä¡¸¦ -15·Î ¼öÁ¤ÇÑ °Í ¹Û¿¡ ¾ø´Ù.
¸¶¿ì½º·Î ȸÀüÇÒ ¶§, ÁÂÇ¥ Ãà°ú Á¤È®ÇÏ°Ô ÀÏÄ¡ÇÏÁö ¾Ê´Â´Ù. (¹ö±× T.T) ÁÖÀüÀÚ¿¡ ÅؽºÃĸ¦ ÀÔÈ÷´Â °ÍÀº D3DXCreateTeapot()·Î ¸Þ½¬ »ý¼º½Ã ÅؽºÃÄ ÁÂÇ¥°¡ ¾ø±â ¶§¹®¿¡ ºÒ°¡´ÉÇÑ°Í °°´Ù. ¸¸¾à¿¡ °¡´É ÇÏ´Ù¸é ¿¬¶ô ÇØÁֱ⠹ٶõ´Ù.
|