//------------------------------------------------------------- // Name: RestoreDeviceObjects() // Desc: 화면크기가 변했을때 호출됨 // 확보한 메모리는 InvalidateDeviceObjects()에서 해제 //------------------------------------------------------------- HRESULT CMyD3DApplication::RestoreDeviceObjects() { // 메시 m_pMesh ->RestoreDeviceObjects( m_pd3dDevice ); m_pMeshBg->RestoreDeviceObjects( m_pd3dDevice ); // 셰이더 m_pEffect->OnResetDevice(); // 재질설정 D3DMATERIAL9 mtrl; D3DUtil_InitMaterial( mtrl, 1.0f, 0.0f, 0.0f ); m_pd3dDevice->SetMaterial( &mtrl ); // 렌더링 상태설정 RS( D3DRS_DITHERENABLE, FALSE ); RS( D3DRS_SPECULARENABLE, FALSE ); RS( D3DRS_ZENABLE, TRUE ); RS( D3DRS_AMBIENT, 0x000F0F0F ); RS( D3DRS_LIGHTING, TRUE ); TSS( 0, D3DTSS_COLOROP, D3DTOP_MODULATE ); TSS( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE ); TSS( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE ); TSS( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 ); TSS( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE); SAMP( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR ); SAMP( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR ); SAMP( 0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP ); SAMP( 0, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP ); // 월드행렬 D3DXMATRIX matIdentity; D3DXMatrixIdentity( &m_mWorld ); // 뷰행렬 D3DXVECTOR3 vFromPt = D3DXVECTOR3( 0.0f, 0.0f, -5.0f ); D3DXVECTOR3 vLookatPt = D3DXVECTOR3( 0.0f, 0.0f, 0.0f ); D3DXVECTOR3 vUpVec = D3DXVECTOR3( 0.0f, 1.0f, 0.0f ); D3DXMatrixLookAtLH( &m_mView, &vFromPt, &vLookatPt, &vUpVec ); // 투영행렬 FLOAT fAspect = ((FLOAT)m_d3dsdBackBuffer.Width) / m_d3dsdBackBuffer.Height; D3DXMatrixPerspectiveFovLH( &m_mProj, D3DX_PI/4, fAspect, 1.0f, 100.0f ); // 폰트 m_pFont->RestoreDeviceObjects(); return S_OK; }
//------------------------------------------------------------- // Name: RestoreDeviceObjects() // Desc: 화면크기가 변했을때 호출됨 // 확보한 메모리는 InvalidateDeviceObjects()에서 해제 //------------------------------------------------------------- HRESULT CMyD3DApplication::RestoreDeviceObjects() { // 이펙트 if(m_pEffect) m_pEffect->OnResetDevice(); // 메시 m_pMeshBg->RestoreDeviceObjects( m_pd3dDevice ); //--------------------------------------------------------- // FVF로 처리하지 않은 정점선언은 직접 처리 //--------------------------------------------------------- if( m_pMesh && m_pMesh->GetSysMemMesh() ){ LPD3DXMESH pMesh; m_pMesh->GetSysMemMesh()->CloneMesh( m_pMesh->GetSysMemMesh()->GetOptions(), decl, m_pd3dDevice, &pMesh ); D3DXComputeNormals( pMesh, NULL ); D3DXComputeTangent( pMesh, 0, 0, 0, TRUE, NULL ); SAFE_RELEASE(m_pMesh->m_pLocalMesh); m_pMesh->m_pLocalMesh = pMesh; } // 렌더링 상태설정 RS( D3DRS_ZENABLE, TRUE ); RS( D3DRS_LIGHTING, FALSE ); SAMP( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR ); SAMP( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR ); SAMP( 0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP ); SAMP( 0, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP ); // 뷰행렬 D3DXVECTOR3 vFromPt = D3DXVECTOR3( 0.0f, 0.0f, -5.0f ); D3DXVECTOR3 vLookatPt = D3DXVECTOR3( 0.0f, 0.0f, 0.0f ); D3DXVECTOR3 vUpVec = D3DXVECTOR3( 0.0f, 1.0f, 0.0f ); D3DXMatrixLookAtLH( &m_mView, &vFromPt, &vLookatPt, &vUpVec ); // 투영행렬 FLOAT fAspect = ((FLOAT)m_d3dsdBackBuffer.Width) / m_d3dsdBackBuffer.Height; D3DXMatrixPerspectiveFovLH( &m_mProj, D3DX_PI/4, fAspect, 1.0f, 100.0f ); // 폰트 m_pFont->RestoreDeviceObjects(); return S_OK; }
//------------------------------------------------------------- // Name: RestoreDeviceObjects() // Desc: 화면크기가 변했을때 호출됨 // 확보한 메모리는 InvalidateDeviceObjects()에서 해제 //------------------------------------------------------------- HRESULT CMyD3DApplication::RestoreDeviceObjects() { // 렌더링 상태설정 RS( D3DRS_DITHERENABLE, FALSE ); RS( D3DRS_SPECULARENABLE, FALSE ); RS( D3DRS_ZENABLE, TRUE ); SAMP( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR ); SAMP( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR ); SAMP( 0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP ); SAMP( 0, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP ); // 폰트 m_pFont->RestoreDeviceObjects(); m_pEffect->OnResetDevice(); return S_OK; }
//------------------------------------------------------------- // Name: RestoreDeviceObjects() // Desc: 화면크기가 변했을때 호출됨 // 확보한 메모리는 InvalidateDeviceObjects()에서 해제 //------------------------------------------------------------- HRESULT CMyD3DApplication::RestoreDeviceObjects() { // 메시 m_pMesh ->RestoreDeviceObjects( m_pd3dDevice ); m_pMeshBg->RestoreDeviceObjects( m_pd3dDevice ); // 셰이더 m_pEffect->OnResetDevice(); // 재질설정 D3DMATERIAL9 mtrl; D3DUtil_InitMaterial( mtrl, 1.0f, 0.0f, 0.0f ); m_pd3dDevice->SetMaterial( &mtrl ); // 렌더링 상태설정 RS( D3DRS_DITHERENABLE, FALSE ); RS( D3DRS_SPECULARENABLE, FALSE ); RS( D3DRS_ZENABLE, TRUE ); RS( D3DRS_AMBIENT, 0x000F0F0F ); RS( D3DRS_LIGHTING, TRUE ); TSS( 0, D3DTSS_COLOROP, D3DTOP_MODULATE ); TSS( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE ); TSS( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE ); TSS( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 ); TSS( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE); SAMP( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR ); SAMP( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR ); SAMP( 0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP ); SAMP( 0, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP ); // 월드행렬 D3DXMATRIX matIdentity; D3DXMatrixIdentity( &m_mWorld ); // 뷰행렬 D3DXVECTOR3 vFromPt = D3DXVECTOR3( 0.0f, 0.0f, -5.0f ); D3DXVECTOR3 vLookatPt = D3DXVECTOR3( 0.0f, 0.0f, 0.0f ); D3DXVECTOR3 vUpVec = D3DXVECTOR3( 0.0f, 1.0f, 0.0f ); D3DXMatrixLookAtLH( &m_mView, &vFromPt, &vLookatPt, &vUpVec ); // 투영행렬 FLOAT fAspect = ((FLOAT)m_d3dsdBackBuffer.Width) / m_d3dsdBackBuffer.Height; D3DXMatrixPerspectiveFovLH( &m_mProj, D3DX_PI/4, fAspect, 1.0f, 100.0f ); // 폰트 m_pFont->RestoreDeviceObjects(); // 렌더링타겟 생성 if (FAILED(m_pd3dDevice->CreateDepthStencilSurface( MAP_WIDTH, MAP_HEIGHT, D3DFMT_D16, D3DMULTISAMPLE_NONE, 0, TRUE, &m_pZBg, NULL))) return E_FAIL; if (FAILED(m_pd3dDevice->CreateTexture( MAP_WIDTH, MAP_HEIGHT, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &m_pTexBg, NULL))) return E_FAIL; if (FAILED(m_pTexBg->GetSurfaceLevel(0, &m_pSurfBg))) return E_FAIL; if (FAILED(m_pd3dDevice->CreateDepthStencilSurface( MAP_WIDTH, MAP_HEIGHT, D3DFMT_D16, D3DMULTISAMPLE_NONE, 0, TRUE, &m_pZObj, NULL))) return E_FAIL; if (FAILED(m_pd3dDevice->CreateTexture( MAP_WIDTH, MAP_HEIGHT, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &m_pTexObj, NULL))) return E_FAIL; if (FAILED(m_pTexObj->GetSurfaceLevel(0, &m_pSurfObj))) return E_FAIL; return S_OK; }
/* sampling. */ image *image_border(image *src) { image *dst = 0; const int d = 1; if ((src) && (dst = image_alloc(6, src[0].w + 2 * d, src[0].w + 2 * d, src[0].c ))) { const int n = src[0].w; const int c = src[0].c; const int b = 4; const int N = n + 2 * d; /* Copy all page data. */ blit(dst[0].p, N, d, d, src[0].p, n, 0, 0, n, n, c, b); blit(dst[1].p, N, d, d, src[1].p, n, 0, 0, n, n, c, b); blit(dst[2].p, N, d, d, src[2].p, n, 0, 0, n, n, c, b); blit(dst[3].p, N, d, d, src[3].p, n, 0, 0, n, n, c, b); blit(dst[4].p, N, d, d, src[4].p, n, 0, 0, n, n, c, b); blit(dst[5].p, N, d, d, src[5].p, n, 0, 0, n, n, c, b); border(dst + 0, rotN, dst + 5, rotN, d); border(dst + 5, rotN, dst + 1, rotN, d); border(dst + 1, rotN, dst + 4, rotN, d); border(dst + 4, rotN, dst + 0, rotN, d); border(dst + 1, rotR, dst + 2, rotN, d); border(dst + 1, rotL, dst + 3, rotN, d); border(dst + 2, rotN, dst + 0, rotL, d); border(dst + 3, rotN, dst + 0, rotR, d); border(dst + 2, rotL, dst + 4, rotL, d); border(dst + 2, rotR, dst + 5, rotL, d); border(dst + 3, rotL, dst + 5, rotR, d); border(dst + 3, rotR, dst + 4, rotR, d); #if 0 /* Corner patch hack. */ for (f = 0; f < 6; f++) for (k = 0; k < c; k++) { SAMP(dst[f], 0, 0, k) = (SAMP(dst[f], 1, 0, k) + SAMP(dst[f], 0, 1, k) + SAMP(dst[f], 1, 1, k)) / 3.0f; SAMP(dst[f], 0, M, k) = (SAMP(dst[f], 1, M, k) + SAMP(dst[f], 0, L, k) + SAMP(dst[f], 1, L, k)) / 3.0f; SAMP(dst[f], M, 0, k) = (SAMP(dst[f], L, 0, k) + SAMP(dst[f], M, 1, k) + SAMP(dst[f], L, 1, k)) / 3.0f; SAMP(dst[f], M, M, k) = (SAMP(dst[f], L, M, k) + SAMP(dst[f], M, L, k) + SAMP(dst[f], L, L, k)) / 3.0f; } #endif } return dst; }
//------------------------------------------------------------- // Name: RestoreDeviceObjects() // Desc: ȸéÅ©±â°¡ º¯ÇßÀ»¶§ È£ÃâµÊ // È®º¸ÇÑ ¸Þ¸ð¸®´Â InvalidateDeviceObjects()¿¡¼ ÇØÁ¦ //------------------------------------------------------------- HRESULT CMyD3DApplication::RestoreDeviceObjects() { // ¸Þ½Ã m_pMesh ->RestoreDeviceObjects( m_pd3dDevice ); m_pMeshBg->RestoreDeviceObjects( m_pd3dDevice ); // ·»´õ¸µ »óż³Á¤ RS( D3DRS_DITHERENABLE, FALSE ); RS( D3DRS_SPECULARENABLE, FALSE ); RS( D3DRS_ZENABLE, TRUE ); RS( D3DRS_AMBIENT, 0x000F0F0F ); TSS( 0, D3DTSS_COLOROP, D3DTOP_MODULATE ); TSS( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE ); TSS( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE ); TSS( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 ); TSS( 0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE ); SAMP( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR ); SAMP( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR ); SAMP( 0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP ); SAMP( 0, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP ); // ¿ùµåÇà·Ä D3DXMATRIX matIdentity; D3DXMatrixIdentity( &m_mWorld ); // ºäÇà·Ä D3DXVECTOR3 vFromPt = D3DXVECTOR3( 0.0f, 0.2f, -5.0f ); D3DXVECTOR3 vLookatPt = D3DXVECTOR3( 0.0f, 0.5f, 0.0f ); D3DXVECTOR3 vUpVec = D3DXVECTOR3( 0.0f, 1.0f, 0.0f ); D3DXMatrixLookAtLH( &m_mView, &vFromPt, &vLookatPt, &vUpVec ); // Åõ¿µÇà·Ä FLOAT fAspect = ((FLOAT)m_d3dsdBackBuffer.Width) / m_d3dsdBackBuffer.Height; D3DXMatrixPerspectiveFovLH( &m_mProj, D3DX_PI/4, fAspect, 1.0f, 7.0f ); // ÆùÆ® m_pFont->RestoreDeviceObjects(); // ·»´õ¸µÅ¸°Ù »ý¼º // ±íÀ̹öÆÛ if (FAILED(m_pd3dDevice->CreateDepthStencilSurface( MAP_WIDTH, MAP_HEIGHT, D3DFMT_D16, D3DMULTISAMPLE_NONE, 0, TRUE, &m_pMapZ, NULL))) return E_FAIL; // »öÁ¤º¸ if (FAILED(m_pd3dDevice->CreateTexture( MAP_WIDTH, MAP_HEIGHT, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &m_pOriginalTex, NULL))) return E_FAIL; if (FAILED(m_pOriginalTex->GetSurfaceLevel(0, &m_pOriginalSurf))) return E_FAIL; // ¹ý¼±¸Ê if (FAILED(m_pd3dDevice->CreateTexture( MAP_WIDTH, MAP_HEIGHT, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &m_pNormalTex, NULL))) return E_FAIL; if (FAILED(m_pNormalTex->GetSurfaceLevel(0, &m_pNormalSurf))) return E_FAIL; m_pEffect->OnResetDevice(); return S_OK; }
//------------------------------------------------------------- // Name: RenderScene() // Desc: ȭ�� ���� //------------------------------------------------------------- void CMyD3DApplication::RenderScene() { D3DXMATRIX m, mT, mR, mView, mProj; D3DXMATRIX mWorld; D3DXVECTOR4 v, light_pos, eye_pos; DWORD i; //----------------------------------------------------- // �������� //----------------------------------------------------- // ������� D3DXMatrixScaling( &m, 3.0f, 3.0f, 3.0f ); D3DXMatrixRotationY( &mR, D3DX_PI ); D3DXMatrixTranslation( &mT, 0.0f,-2.0f ,0.0f ); mWorld = m * mR * mT; // ��ļ��� m_pd3dDevice->SetTransform( D3DTS_WORLD, &mWorld); m_pd3dDevice->SetTransform( D3DTS_VIEW, &m_mView ); m_pd3dDevice->SetTransform( D3DTS_PROJECTION, &m_mProj ); TSS( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1 ); TSS( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE ); SAMP( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR ); SAMP( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR ); m_pMeshBg->Render( m_pd3dDevice ); if( m_pEffect != NULL ) { //------------------------------------------------- // ���̴� ���� //------------------------------------------------- m_pEffect->SetTechnique( m_hTechnique ); m_pEffect->Begin( NULL, 0 ); m_pEffect->Pass( 0 ); //------------------------------------------------- // ������ ���� //------------------------------------------------- // �������(ȸ��) D3DXMatrixRotationY( &mWorld, m_fTime ); // ����-������ȯ��� m = mWorld * m_mView * m_mProj; m_pEffect->SetMatrix( m_hmWVP, &m ); // ��������(������ǥ��) light_pos = D3DXVECTOR4( -0.577f, -0.577f, -0.577f,0); D3DXMatrixInverse( &m, NULL, &mWorld); D3DXVec4Transform( &v, &light_pos, &m ); D3DXVec3Normalize( (D3DXVECTOR3 *)&v, (D3DXVECTOR3 *)&v ); v.w = -0.5f; // ȯ�汤��� m_pEffect->SetVector( m_hvLightDir, &v ); // ����(������ǥ��) m = mWorld * m_mView; D3DXMatrixInverse( &m, NULL, &m); v = D3DXVECTOR4( 0, 0, 0, 1); D3DXVec4Transform( &v, &v, &m ); m_pEffect->SetVector( m_hvEyePos, &v ); // ������ m_pEffect->SetTexture( m_htNormalMap, m_pNormalMap ); // �������� m_pd3dDevice->SetVertexDeclaration( m_pDecl ); D3DMATERIAL9 *pMtrl = m_pMesh->m_pMaterials; for( i=0; i<m_pMesh->m_dwNumMaterials; i++ ) { v.x = pMtrl->Diffuse.r; v.y = pMtrl->Diffuse.g; v.z = pMtrl->Diffuse.b; m_pEffect->SetVector( m_hvColor, &v ); m_pEffect->SetTexture( m_htDecaleTex, m_pMesh->m_pTextures[i] ); m_pMesh->m_pLocalMesh->DrawSubset( i ); // ���� pMtrl++; } m_pEffect->End(); } }
//------------------------------------------------------------- // Name: RestoreDeviceObjects() // Desc: ȭ��ũ�Ⱑ �������� ȣ��� // Ȯ���� �� InvalidateDeviceObjects()���� ���� //------------------------------------------------------------- HRESULT CMyD3DApplication::RestoreDeviceObjects() { m_LighPos = D3DXVECTOR3(0.0f, 5.488f, 2.770f); // �������� D3DMATERIAL9 mtrl; D3DUtil_InitMaterial( mtrl, 1.0f, 0.0f, 0.0f ); m_pd3dDevice->SetMaterial( &mtrl ); // �ؽ�ó ���� TSS( 0, D3DTSS_COLOROP, D3DTOP_MODULATE ); TSS( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE ); TSS( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE ); TSS( 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE ); TSS( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE ); TSS( 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE ); SAMP( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR ); SAMP( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR ); // ������ ���¼��� RS( D3DRS_DITHERENABLE, FALSE ); RS( D3DRS_SPECULARENABLE, FALSE ); RS( D3DRS_ZENABLE, TRUE ); RS( D3DRS_AMBIENT, 0x000F0F0F ); // ������� D3DXMATRIX matIdentity; D3DXMatrixIdentity( &matIdentity ); m_pd3dDevice->SetTransform( D3DTS_WORLD, &matIdentity ); // ����� D3DXVECTOR3 vFromPt = D3DXVECTOR3( 0.0f, 0.0f, -5.0f ); D3DXVECTOR3 vLookatPt = D3DXVECTOR3( 0.0f, 0.0f, 0.0f ); D3DXVECTOR3 vUpVec = D3DXVECTOR3( 0.0f, 1.0f, 0.0f ); D3DXMatrixLookAtLH( &m_mView, &vFromPt, &vLookatPt, &vUpVec ); m_pd3dDevice->SetTransform( D3DTS_VIEW, &m_mView ); // ������� FLOAT fAspect = ((FLOAT)m_d3dsdBackBuffer.Width) / m_d3dsdBackBuffer.Height; D3DXMatrixPerspectiveFovLH( &m_mProj, 0.21f*D3DX_PI, fAspect, 1.0f, 100.0f ); m_pd3dDevice->SetTransform( D3DTS_PROJECTION, &m_mProj ); // �������� D3DLIGHT9 light; D3DUtil_InitLight( light, D3DLIGHT_DIRECTIONAL, -0.0f, -1.0f, 0.2f ); light.Diffuse.r = 0.5f; light.Diffuse.g = 0.5f; light.Diffuse.b = 0.5f; light.Ambient.r = 0.5f; light.Ambient.g = 0.5f; light.Ambient.b = 0.5f; m_pd3dDevice->SetLight( 0, &light ); m_pd3dDevice->LightEnable( 0, TRUE ); m_pd3dDevice->SetRenderState( D3DRS_LIGHTING, TRUE ); // �簢�� m_pBigSquare->RestoreDeviceObjects( (FLOAT)m_d3dsdBackBuffer.Width, (FLOAT)m_d3dsdBackBuffer.Height ); // �� m_pMeshBG->RestoreDeviceObjects(m_pd3dDevice); m_pMeshBox->RestoreDeviceObjects(m_pd3dDevice); // ����Ʈ if( m_pEffect != NULL ) m_pEffect->OnResetDevice(); m_pFont->RestoreDeviceObjects(); // ��Ʈ return S_OK; }
//------------------------------------------------------------- // Name: RestoreDeviceObjects() // Desc: 화면크기가 변했을때 호출됨 // 확보한 메모리는 InvalidateDeviceObjects()에서 해제 //------------------------------------------------------------- HRESULT CMyD3DApplication::RestoreDeviceObjects() { LPDIRECT3DSURFACE9 pOldBackBuffer, pOldZBuffer; m_pd3dDevice->GetRenderTarget(0, &pOldBackBuffer); m_pd3dDevice->GetDepthStencilSurface(&pOldZBuffer); // 메시 m_pMesh ->RestoreDeviceObjects( m_pd3dDevice ); m_pMeshBg->RestoreDeviceObjects( m_pd3dDevice ); // 재질설정 D3DMATERIAL9 mtrl; D3DUtil_InitMaterial( mtrl, 1.0f, 0.0f, 0.0f ); m_pd3dDevice->SetMaterial( &mtrl ); // 렌더링 상태설정 RS( D3DRS_DITHERENABLE, FALSE ); RS( D3DRS_SPECULARENABLE, FALSE ); RS( D3DRS_ZENABLE, TRUE ); RS( D3DRS_AMBIENT, 0x000F0F0F ); TSS( 0, D3DTSS_COLOROP, D3DTOP_MODULATE ); TSS( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE ); TSS( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE ); TSS( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 ); TSS( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE); SAMP( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR ); SAMP( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR ); SAMP( 0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP ); SAMP( 0, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP ); // 월드행렬 D3DXMATRIX matIdentity; D3DXMatrixIdentity( &m_mWorld ); // 뷰행렬 D3DXVECTOR3 vFromPt = D3DXVECTOR3( 0.0f, 0.0f, -5.0f ); D3DXVECTOR3 vLookatPt = D3DXVECTOR3( 0.0f, 0.0f, 0.0f ); D3DXVECTOR3 vUpVec = D3DXVECTOR3( 0.0f, 1.0f, 0.0f ); D3DXMatrixLookAtLH( &m_mView, &vFromPt, &vLookatPt, &vUpVec ); // 투영행렬 FLOAT fAspect = ((FLOAT)m_d3dsdBackBuffer.Width) / m_d3dsdBackBuffer.Height; D3DXMatrixPerspectiveFovLH( &m_mProj, D3DX_PI/4, fAspect, 1.0f, 100.0f ); // 폰트 m_pFont->RestoreDeviceObjects(); // 렌더링타겟 생성 if (FAILED(m_pd3dDevice->CreateDepthStencilSurface( MAP_WIDTH, MAP_HEIGHT, D3DFMT_D16, D3DMULTISAMPLE_NONE, 0, TRUE, &m_pZ, NULL))) return E_FAIL; m_pd3dDevice->SetDepthStencilSurface(NULL); if( SUCCEEDED( m_pd3dDevice->BeginScene() ) ){ if (FAILED(m_pd3dDevice->CreateTexture( MAP_WIDTH, MAP_HEIGHT, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &m_pTex, NULL))) return E_FAIL; if (FAILED(m_pTex->GetSurfaceLevel(0, &m_pSurf))) return E_FAIL; // 표면초기화 m_pd3dDevice->SetRenderTarget(0, m_pSurf); m_pd3dDevice->Clear(0L, NULL, D3DCLEAR_TARGET , 0xffffffff, 1.0f, 0L); m_pd3dDevice->EndScene(); } //----------------------------------------------------- // 렌더링타겟 복구 //----------------------------------------------------- m_pd3dDevice->SetRenderTarget(0, pOldBackBuffer); m_pd3dDevice->SetDepthStencilSurface(pOldZBuffer); pOldBackBuffer->Release(); pOldZBuffer->Release(); return S_OK; }
//------------------------------------------------------------- // Name: RestoreDeviceObjects() // Desc: ȭ��ũ�Ⱑ �������� ȣ��� // Ȯ���� �� InvalidateDeviceObjects()���� ���� //------------------------------------------------------------- HRESULT CMyD3DApplication::RestoreDeviceObjects() { // ���ڸ� ���� if (FAILED(m_pd3dDevice->CreateTexture( SHADOW_MAP_SIZE, SHADOW_MAP_SIZE, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &m_pShadowTex, NULL))) return E_FAIL; if (FAILED(m_pShadowTex->GetSurfaceLevel(0, &m_pShadowSurf))) return E_FAIL; if (FAILED(m_pd3dDevice->CreateDepthStencilSurface( SHADOW_MAP_SIZE, SHADOW_MAP_SIZE, D3DFMT_D16, D3DMULTISAMPLE_NONE, 0, TRUE, &m_pZ, NULL))) return E_FAIL; // �� m_pMesh ->RestoreDeviceObjects( m_pd3dDevice ); m_pMeshBg->RestoreDeviceObjects( m_pd3dDevice ); // �������� D3DMATERIAL9 mtrl; D3DUtil_InitMaterial( mtrl, 1.0f, 0.0f, 0.0f ); m_pd3dDevice->SetMaterial( &mtrl ); // �����ũ�� #define RS m_pd3dDevice->SetRenderState #define TSS m_pd3dDevice->SetTextureStageState #define SAMP m_pd3dDevice->SetSamplerState // ������ ���¼��� RS( D3DRS_DITHERENABLE, FALSE ); RS( D3DRS_SPECULARENABLE, FALSE ); RS( D3DRS_ZENABLE, TRUE ); RS( D3DRS_AMBIENT, 0x000F0F0F ); TSS( 0, D3DTSS_COLOROP, D3DTOP_MODULATE ); TSS( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE ); TSS( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE ); TSS( 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE ); TSS( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE ); TSS( 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE ); SAMP( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR ); SAMP( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR ); // ������� D3DXMATRIX matIdentity; D3DXMatrixIdentity( &m_mWorld ); // ����� D3DXVECTOR3 vFromPt = D3DXVECTOR3( 0.0f, 0.0f, -5.0f ); D3DXVECTOR3 vLookatPt = D3DXVECTOR3( 0.0f, 0.0f, 0.0f ); D3DXVECTOR3 vUpVec = D3DXVECTOR3( 0.0f, 1.0f, 0.0f ); D3DXMatrixLookAtLH( &m_mView, &vFromPt, &vLookatPt, &vUpVec ); // ������� FLOAT fAspect = ((FLOAT)m_d3dsdBackBuffer.Width) / m_d3dsdBackBuffer.Height; D3DXMatrixPerspectiveFovLH( &m_mProj, D3DX_PI/4, fAspect, 1.0f, 100.0f ); // ��Ʈ m_pFont->RestoreDeviceObjects(); m_pEffect->OnResetDevice(); return S_OK; }