void CDrescher::GetViewMatrix(D3DMATRIX &view)const { if (parent==NULL)return; D3DMATRIX m; const BOOLEAN lookback=game->KeyDown(DIK_B); switch(abs(BYTE(((CPlayer*)parent)->camera%2))) { case 0: // Dachkamera D3DUtil_SetTranslateMatrix(view,-pos.x,-pos.y,-pos.z); if (1==2) { // Mähdrescher gemäß Steigung kippen D3DUtil_SetRotateYMatrix(m,-beta); D3DMath_MatrixMultiply(view,view,m); D3DUtil_SetRotateXMatrix(m,-alpha); D3DMath_MatrixMultiply(view,view,m); D3DUtil_SetRotateYMatrix(m,beta); D3DMath_MatrixMultiply(view,view,m); } D3DUtil_SetTranslateMatrix(m,0,lookback?-2.2f:-2.8f,0); D3DMath_MatrixMultiply(view,view,m); D3DUtil_SetRotateYMatrix(m,-ang.y); D3DMath_MatrixMultiply(view,view,m); D3DUtil_SetTranslateMatrix(m,0,0,lookback?0.7f:2.5f); D3DMath_MatrixMultiply(view,view,m); D3DUtil_SetRotateXMatrix(m,(lookback?0.15f:-0.35f)-schaukelwinkel()*0.5f); D3DMath_MatrixMultiply(view,view,m); if (lookback) { D3DUtil_SetRotateYMatrix(m,g_PI); D3DMath_MatrixMultiply(view,view,m); } break; case 1: // Von oben D3DUtil_SetTranslateMatrix(view,-pos.x,-pos.y-16.0f,-pos.z); D3DUtil_SetRotateYMatrix(m,-ang.y); D3DMath_MatrixMultiply(view,view,m); D3DUtil_SetTranslateMatrix(m,0,0,lookback?-5.0f:10.0f); D3DMath_MatrixMultiply(view,view,m); D3DUtil_SetRotateXMatrix(m,lookback?0.9f:-0.9f); D3DMath_MatrixMultiply(view,view,m); if (lookback) { D3DUtil_SetRotateYMatrix(m,g_PI); D3DMath_MatrixMultiply(view,view,m); } break; } }
void CDrescher::Draw(LPDIRECT3DDEVICE7 lpDevice) { if (!box2->IsVisible())return; lpDevice->SetTexture(0,NULL); D3DMATRIX matrix,m; D3DUtil_SetTranslateMatrix(matrix,pos.x,pos.y+hoehe,pos.z); { // Mähdrescher gemäß Steigung kippen D3DUtil_SetRotateYMatrix(m,beta); D3DMath_MatrixMultiply(matrix,m,matrix); D3DUtil_SetRotateXMatrix(m,alpha); D3DMath_MatrixMultiply(matrix,m,matrix); D3DUtil_SetRotateYMatrix(m,-beta); D3DMath_MatrixMultiply(matrix,m,matrix); } D3DUtil_SetRotateYMatrix(m,ang.y); D3DMath_MatrixMultiply(matrix,m,matrix); if (schaukelphase>0.0f) { // schaukeln const float mittelpunkt=2.0f; D3DUtil_SetTranslateMatrix(m,0,0,-mittelpunkt); D3DMath_MatrixMultiply(matrix,m,matrix); D3DUtil_SetRotateXMatrix(m,schaukelwinkel()); D3DMath_MatrixMultiply(matrix,m,matrix); D3DUtil_SetTranslateMatrix(m,0,0,mittelpunkt); D3DMath_MatrixMultiply(matrix,m,matrix); } lpDevice->SetTransform(D3DTRANSFORMSTATE_WORLD,&matrix); mesh1->Render(lpDevice,FALSE); // Rolle D3DUtil_SetRotateXMatrix(m,rolle); D3DMath_MatrixMultiply(matrix,m,matrix); lpDevice->SetTransform(D3DTRANSFORMSTATE_WORLD,&matrix); mesh2->Render(lpDevice,FALSE); }
const D3DVECTOR CDrescher::GetOutput()const { D3DMATRIX m,matrix; D3DUtil_SetTranslateMatrix(matrix,pos); { // Mähdrescher gemäß Steigung kippen D3DUtil_SetRotateYMatrix(m,beta); D3DMath_MatrixMultiply(matrix,m,matrix); D3DUtil_SetRotateXMatrix(m,alpha); D3DMath_MatrixMultiply(matrix,m,matrix); D3DUtil_SetRotateYMatrix(m,-beta); D3DMath_MatrixMultiply(matrix,m,matrix); } D3DUtil_SetRotateYMatrix(m,ang.y); D3DMath_MatrixMultiply(matrix,m,matrix); D3DUtil_SetTranslateMatrix(m,D3DVECTOR(-1.48f,1.24f,-3.1f)); D3DMath_MatrixMultiply(matrix,m,matrix); if (schaukelphase>0.0f) { // schaukeln const float mittelpunkt=2.0f; D3DUtil_SetTranslateMatrix(m,0,0,-mittelpunkt); D3DMath_MatrixMultiply(matrix,m,matrix); D3DUtil_SetRotateXMatrix(m,schaukelwinkel()); D3DMath_MatrixMultiply(matrix,m,matrix); D3DUtil_SetTranslateMatrix(m,0,0,mittelpunkt); D3DMath_MatrixMultiply(matrix,m,matrix); } D3DVECTOR v; D3DMath_VectorMatrixMultiply(v,D3DVECTOR(0,0,0),matrix); return v; }
HRESULT CImageHandler::DrawBillBoard(LPDIRECT3DDEVICE7 lpDevice, D3DVECTOR vTrans, D3DVECTOR vScale, /*D3DVECTOR vRot, */D3DMATERIAL7 mtrl, /*FLOAT fRotRad, */LPDIRECTDRAWSURFACE7 lpddsTextr) { if ( lpDevice ) { if( SUCCEEDED(lpDevice->BeginScene()) ) { D3DMATRIX matTrans; D3DMATRIX matScale; D3DMATRIX matRot; D3DMATRIX matWorld; D3DMATRIX matTempWorld; D3DMATRIX matWorldOriginal; lpDevice->GetTransform(D3DTRANSFORMSTATE_WORLD, &matWorldOriginal); vTrans.x = vTrans.x+vScale.x/2-400; vTrans.y = -vTrans.y-vScale.y/2+300; D3DUtil_SetTranslateMatrix(matTrans, vTrans); D3DUtil_SetScaleMatrix(matScale, vScale.x, vScale.y, vScale.z); // D3DUtil_SetRotationMatrix(matRot, vRot, fRotRad); D3DMath_MatrixMultiply(/*matTempWorld*/matWorld, matScale, matTrans); // D3DMath_MatrixMultiply(matWorld, matRot, matTempWorld); lpDevice->SetTransform(D3DTRANSFORMSTATE_WORLD, &matWorld); SetBlendRenderState(lpDevice, _BLEND_NORMAL, mtrl); lpDevice->SetMaterial(&mtrl); lpDevice->SetTexture(0, lpddsTextr); lpDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, D3DFVF_VERTEX, m_avBillBoard, 4, NULL); // 원상복귀. ZeroMemory(&mtrl, sizeof(mtrl)); mtrl.diffuse.r = mtrl.diffuse.g = mtrl.diffuse.b = 0.1f; mtrl.ambient.r = mtrl.ambient.g = mtrl.ambient.b = 1.0f; lpDevice->SetMaterial(&mtrl); ResetBlendenderState(lpDevice); lpDevice->SetTransform(D3DTRANSFORMSTATE_WORLD, &matWorldOriginal); } lpDevice->EndScene(); return S_OK; } return E_FAIL; }
void CEi::Draw(LPDIRECT3DDEVICE7 lpDevice) { if (!CBoundingTube::IsSphereVisible(pos,EGG_SIZE))return; D3DMATRIX m,m2; D3DUtil_SetTranslateMatrix(m,pos); D3DUtil_SetRotateYMatrix(m2,ang.y); D3DMath_MatrixMultiply(m,m2,m); D3DUtil_SetRotateXMatrix(m2,-ang.x+g_PI*0.5f); D3DMath_MatrixMultiply(m,m2,m); lpDevice->SetTexture(0,NULL); lpDevice->SetTransform(D3DTRANSFORMSTATE_WORLD,&m); lpMesh->Render(lpDevice,FALSE); }
VOID CLightFog::ShowLightFog(WORD wHalfScrnWidth, WORD wHalfScrnHeight) { if ( g_xMainWnd.Get3DDevice() ) { if( SUCCEEDED(g_xMainWnd.Get3DDevice()->BeginScene()) ) { D3DVECTOR vTrans; D3DMATRIX matTrans; D3DMATRIX matWorldOriginal; g_xMainWnd.Get3DDevice()->GetTransform(D3DTRANSFORMSTATE_WORLD, &matWorldOriginal); g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, TRUE); g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ZERO); g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_SRCCOLOR); vTrans.x = -wHalfScrnWidth; vTrans.y = wHalfScrnHeight; vTrans.z = 0; D3DUtil_SetTranslateMatrix(matTrans, vTrans); g_xMainWnd.Get3DDevice()->SetTransform(D3DTRANSFORMSTATE_WORLD, &matTrans); g_xMainWnd.Get3DDevice()->SetTexture(0, NULL); g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_LIGHTING, FALSE); g_xMainWnd.Get3DDevice()->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, D3DFVF_LVERTEX, m_avLight, NUM_LIGHTTILE_VERTICES, m_pwLightIndices, NUM_LIGHTTILE_INDICES, NULL ); g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_LIGHTING, TRUE); g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE); g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO); g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, FALSE); g_xMainWnd.Get3DDevice()->SetTransform(D3DTRANSFORMSTATE_WORLD, &matWorldOriginal); g_xMainWnd.Get3DDevice()->EndScene(); } } }
const D3DMATRIX CGolfer::BerechneSchlag() { D3DMATRIX m,m2; if (parent==NULL) { D3DUtil_SetTranslateMatrix(m,pos.x,pos.y+0.035f,pos.z); return m; } CPlayer* p=(CPlayer*)parent; D3DUtil_SetTranslateMatrix(m,p->pos); D3DUtil_SetRotateYMatrix(m2,-p->ang.y); D3DMath_MatrixMultiply(m,m2,m); D3DUtil_SetRotateXMatrix(m2,-p->ang.x); D3DMath_MatrixMultiply(m,m2,m); D3DUtil_SetTranslateMatrix(m2,0.0f,-1.25f,0.2f); D3DMath_MatrixMultiply(m,m2,m); // Schläger um y-Achse drehen D3DUtil_SetRotateYMatrix(m2,-g_PI*0.5f-0.2f); D3DMath_MatrixMultiply(m,m2,m); // Privotpunkt auf Halter verschieben D3DUtil_SetTranslateMatrix(m2,0,1.2f,0); D3DMath_MatrixMultiply(m,m2,m); // Schlag schwenken float winkel=1.2f; if (schlag.phase!=0) { const float back=0.5f; const float front=1.1f; if (schlag.phase>0.8f)winkel=1.2f+(schlag.phase-1.0f)*5.0f*back;else if (schlag.phase>0.5f)winkel=1.2f-back;else if (schlag.phase>0.3f)winkel=1.2f-back-(schlag.phase-0.5f)*5.0f*(front+back);else winkel=1.2f+front-(0.3f-schlag.phase)/0.3f*(front); } D3DUtil_SetRotateZMatrix(m2,winkel); D3DMath_MatrixMultiply(m,m2,m); // Nach hinten kippen D3DUtil_SetRotateXMatrix(m2,0.45f); D3DMath_MatrixMultiply(m,m2,m); // Privotpunkt zurücksetzen D3DUtil_SetTranslateMatrix(m2,0,-1.2f,0); D3DMath_MatrixMultiply(m,m2,m); pos.x=m.m[3][0]; pos.y=m.m[3][1]; pos.z=m.m[3][2]; box->SetPos(pos); return m; }
VOID CSelectSrv::Draw3DBorder(RECT rcWnd,COLORREF dwColor,INT nAlpha) { if ( g_xMainWnd.Get3DDevice() ) { D3DVECTOR vTrans; D3DMATRIX matTrans; D3DMATRIX matScale; D3DMATRIX matWorld; D3DMATRIX matView; D3DMATRIX matProj; D3DMATRIX matWorldOriginal; D3DMATERIAL7 mtrl; if( SUCCEEDED(g_xMainWnd.Get3DDevice()->BeginScene())) { g_xMainWnd.Get3DDevice()->GetTransform(D3DTRANSFORMSTATE_WORLD, &matWorldOriginal); ZeroMemory(&matView, sizeof(D3DMATRIX)); D3DVECTOR vEyePt = D3DVECTOR(0, 0, -(float)((g_xMainWnd.m_rcWindow.bottom - g_xMainWnd.m_rcWindow.top)/2)); D3DVECTOR vLookatPt = D3DVECTOR(0, 0, 0); D3DVECTOR vUpVec = D3DVECTOR(0, 1, 0); D3DUtil_SetViewMatrix(matView, vEyePt, vLookatPt, vUpVec); D3DUtil_SetProjectionMatrix(matProj, g_PI/2, float(240.0f/320.0f), -1.0f, 1.0f); g_xMainWnd.Get3DDevice()->SetTransform(D3DTRANSFORMSTATE_VIEW, &matView); g_xMainWnd.Get3DDevice()->SetTransform(D3DTRANSFORMSTATE_PROJECTION, &matProj); vTrans.x = (FLOAT)rcWnd.left - 320.0f + (rcWnd.right - rcWnd.left)/2; vTrans.y = (FLOAT)-rcWnd.top + 240.0f - (rcWnd.bottom - rcWnd.top )/2; vTrans.z = 0; D3DUtil_SetTranslateMatrix(matTrans, vTrans); D3DUtil_SetScaleMatrix(matScale, (FLOAT)(rcWnd.right - rcWnd.left), (FLOAT)(rcWnd.bottom - rcWnd.top), 0.0f); D3DMath_MatrixMultiply(matWorld, matScale, matTrans); g_xMainWnd.Get3DDevice()->SetTransform(D3DTRANSFORMSTATE_WORLD, &matWorld); // 임시 D3DUtil_InitMaterial(mtrl, (FLOAT)GetRValue(dwColor)/255.0f, (FLOAT)GetGValue(dwColor)/255.0f, (FLOAT)GetBValue(dwColor)/255.0f); mtrl.diffuse.a = nAlpha/255.0f; // alpha value g_xMainWnd.Get3DDevice()->SetMaterial(&mtrl); g_xMainWnd.Get3DDevice()->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, TRUE ); g_xMainWnd.Get3DDevice()->SetRenderState( D3DRENDERSTATE_COLORKEYENABLE, TRUE); g_xMainWnd.Get3DDevice()->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE); g_xMainWnd.Get3DDevice()->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE); g_xMainWnd.Get3DDevice()->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE); g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE); g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_INVSRCALPHA); g_xMainWnd.Get3DDevice()->SetTexture(0, NULL); g_xMainWnd.Get3DDevice()->DrawPrimitive(D3DPT_TRIANGLESTRIP, D3DFVF_VERTEX, m_avBillBoard, 4, NULL); g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, FALSE); g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_COLORKEYENABLE, FALSE); g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_SRCBLEND , D3DBLEND_ONE); g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO); g_xMainWnd.Get3DDevice()->SetTransform(D3DTRANSFORMSTATE_WORLD, &matWorldOriginal); g_xMainWnd.Get3DDevice()->EndScene(); } } }
VOID CWater::ShowLightFog(BOOL bShowFog) { if ( g_xMainWnd.Get3DDevice() ) { if( SUCCEEDED(g_xMainWnd.Get3DDevice()->BeginScene()) ) { D3DVECTOR vTrans; D3DMATRIX matTrans; D3DMATRIX matWorldOriginal; g_xMainWnd.Get3DDevice()->GetTransform(D3DTRANSFORMSTATE_WORLD, &matWorldOriginal); // if ( bShowFog ) // SetLightRadiusWithElipse(400, 242, 6, 6, 230, 230, 230); // SetLightRadiusWithElipse(400, 242, 1, 1, 230, 230, 230); // SetLightRadiusWithCircle(400, 242, 8, 230, 230, 230); /* SetLightRadiusWithCircle(586, 248, 3, 230, 230, 230); SetLightRadiusWithCircle(604, 248, 3, 230, 230, 230); */// SetLightRadiusWithRing(400, 242, 7, 230, 230, 230, 8, 230, 230, 230); g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, TRUE); g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ZERO); g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_SRCCOLOR); /* BYTE bOpa = 255; D3DMATERIAL7 mtrl; D3DUtil_InitMaterial(mtrl, (FLOAT)255/255.0f, (FLOAT)255/255.0f, (FLOAT)255/255.0f); mtrl.diffuse.a = (bOpa+1)/255.0f; g_xMainWnd.Get3DDevice()->SetMaterial(&mtrl); SetBlendRenderState(g_xMainWnd.Get3DDevice(), _BLEND_NORMAL, mtrl); */ vTrans.x = -400; vTrans.y = 300; vTrans.z = 0; D3DUtil_SetTranslateMatrix(matTrans, vTrans); g_xMainWnd.Get3DDevice()->SetTransform(D3DTRANSFORMSTATE_WORLD, &matTrans); // g_xMainWnd.Get3DDevice()->SetTexture(0, NULL); static int a = 0; static int b = 0; static float scrlcnt = 0.0f; if ( scrlcnt >= WATER_NUM_CNTX_LIGHTTILE ) scrlcnt = 0; a++; if ( a >= 1 ) { for ( INT nCntY = 0; nCntY < (WATER_NUM_CNTY_LIGHTTILE+1); nCntY++ ) { FLOAT av = (FLOAT)((FLOAT)nCntY/(FLOAT)WATER_NUM_CNTY_LIGHTTILE); for ( INT nCntX = 0; nCntX < (WATER_NUM_CNTX_LIGHTTILE+1); nCntX++ ) { FLOAT au = (FLOAT)((FLOAT)nCntX/(FLOAT)WATER_NUM_CNTX_LIGHTTILE) + scrlcnt; if ( au > 1 ) au = 1-au; FLOAT az = m_avLight[nCntY][nCntX].z; if ( b > 10 ) { // az = (FLOAT)GetRandomNum(0, 50); } FLOAT ax = /*(FLOAT)GetRandomNum(0, 10) + */(FLOAT)(WATER_TILE_START_XPOS+(nCntX*WATER_TILE_WIDTH)); FLOAT ay = /*(FLOAT)GetRandomNum(0, 1) + */(FLOAT)(-WATER_TILE_START_YPOS-(nCntY*WATER_TILE_HEIGHT)); // if ( av > 1 ) av = 1-av; m_avLight[nCntY][nCntX] = D3DLVERTEX(D3DVECTOR(ax, ay, az), m_dwLightColor, RGB(0, 0, 0), au, av); } } memcpy(m_avSaveLight, m_avLight, sizeof(D3DLVERTEX)*(WATER_NUM_CNTY_LIGHTTILE+1)*(WATER_NUM_CNTX_LIGHTTILE+1)); a = 0; } scrlcnt += 0.0006f; if ( b > 10 ) { b = 0; } b++; g_xMainWnd.Get3DDevice()->SetTexture(0, D3DTextr_GetSurface(m_szWater[m_bCurrTexIdx])); g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_LIGHTING, FALSE); g_xMainWnd.Get3DDevice()->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, D3DFVF_LVERTEX, m_avLight, WATER_NUM_LIGHTTILE_VERTICES, m_pwLightIndices, WATER_NUM_LIGHTTILE_INDICES, NULL ); g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_LIGHTING, TRUE); // ResetBlendenderState(g_xMainWnd.Get3DDevice()); g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE); g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO); g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, FALSE); g_xMainWnd.Get3DDevice()->SetTransform(D3DTRANSFORMSTATE_WORLD, &matWorldOriginal); g_xMainWnd.Get3DDevice()->EndScene(); } } }