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 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); }
void CGras::DrawUI(LPDIRECT3DDEVICE7 lpDevice) { if (lpVertices==NULL)return; if (game->lpTexture[40]==NULL) { // Gras Textur nachladen game->lpTexture[40]=CreateTextureFromResource(lpDevice,game->lpDD,NULL,"grass.bmp",4,FALSE,TRUE); MakeTransparent(game->lpTexture[40],FALSE); // Gras } lpDevice->SetRenderState(D3DRENDERSTATE_LIGHTING,FALSE); DWORD old; lpDevice->GetRenderState(D3DRENDERSTATE_CULLMODE,&old); lpDevice->SetRenderState(D3DRENDERSTATE_CULLMODE,D3DCULL_NONE); if (Config.alpha) { lpDevice->SetTextureStageState(0,D3DTSS_ALPHAARG1,D3DTA_TEXTURE); lpDevice->SetRenderState(D3DRENDERSTATE_ALPHATESTENABLE,TRUE); lpDevice->SetRenderState(D3DRENDERSTATE_ALPHAREF,192); lpDevice->SetRenderState(D3DRENDERSTATE_ALPHAFUNC,D3DCMP_GREATEREQUAL); } lpDevice->SetTexture(0,game->lpTexture[40]); D3DMATRIX m; D3DUtil_SetIdentityMatrix(m); lpDevice->SetTransform(D3DTRANSFORMSTATE_WORLD,&m); for (int i=0;i<vertexbuffers;i++) lpDevice->DrawIndexedPrimitiveVB(D3DPT_TRIANGLELIST,lpVertices[i],0,vertexnum[i],Indices,vertexnum[i]/4*6,0); lpDevice->SetRenderState(D3DRENDERSTATE_ALPHATESTENABLE,0); lpDevice->SetRenderState(D3DRENDERSTATE_LIGHTING,TRUE); lpDevice->SetRenderState(D3DRENDERSTATE_CULLMODE,old); }
void CGolfer::Draw(LPDIRECT3DDEVICE7 lpDevice) { if ((parent==NULL)&&(!box->IsVisible()))return; D3DMATRIX m=BerechneSchlag(); lpDevice->SetTexture(0,NULL); lpDevice->SetTransform(D3DTRANSFORMSTATE_WORLD,&m); mesh->Render(lpDevice,FALSE); }
void CSprite::DrawSmooth(LPDIRECT3DDEVICE7 lpDevice,const D3DVECTOR pos,const float w,const float h,const DWORD color,const int spritenr) { D3DVECTOR rightVect,upVect; D3DMATRIX mat; { lpDevice->GetTransform(D3DTRANSFORMSTATE_VIEW,&mat); rightVect=Normalize(D3DVECTOR(mat._11,mat._21,mat._31))*w*0.5f; upVect=Normalize(D3DVECTOR(mat._12,mat._22,mat._32))*h*0.5f; } const D3DVECTOR n=D3DVECTOR(0,0,0); D3DLVERTEX verts[4]= { D3DLVERTEX(pos-rightVect+upVect, color,0, 1.0f, 0.0f), D3DLVERTEX(pos+rightVect+upVect, color,0, 0.0f, 0.0f), D3DLVERTEX(pos-rightVect-upVect, color,0, 1.0f, 1.0f), D3DLVERTEX(pos+rightVect-upVect, color,0, 0.0f, 1.0f) }; D3DUtil_SetIdentityMatrix(mat); lpDevice->SetTransform(D3DTRANSFORMSTATE_WORLD,&mat); if (Config.alpha) { lpDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE,FALSE); lpDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, TRUE); lpDevice->SetRenderState(D3DRENDERSTATE_LIGHTING,FALSE); lpDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE); lpDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1); lpDevice->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_MODULATE); lpDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND,D3DBLEND_SRCCOLOR); lpDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND,D3DBLEND_INVSRCCOLOR); lpDevice->SetRenderState(D3DRENDERSTATE_ALPHATESTENABLE,TRUE); lpDevice->SetRenderState(D3DRENDERSTATE_ALPHAREF,0x08); } lpDevice->SetTexture(0,GetSurface(spritenr)); lpDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,D3DFVF_LVERTEX,verts,4,0); lpDevice->SetTexture(0,NULL); if (Config.alpha) { lpDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, FALSE); lpDevice->SetRenderState(D3DRENDERSTATE_LIGHTING,TRUE); lpDevice->SetRenderState(D3DRENDERSTATE_ALPHATESTENABLE,FALSE); lpDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE,TRUE); } }
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); }
/// <summary> /// <c>wSetTransform</c> /// </summary> /// <remarks> /// </remarks> /// <param name="d3dDevice7"></param> /// <param name="dtstTransformStateType"></param> /// <param name="lpD3DMatrix"></param> /// <returns></returns> HRESULT __stdcall wSetTransform( LPDIRECT3DDEVICE7 d3dDevice7, D3DTRANSFORMSTATETYPE dtstTransformStateType, LPD3DMATRIX lpD3DMatrix) { PSTR pszTransformType; PSTR pszErrorMessage; HRESULT hResult; pszTransformType = GetTransformType(dtstTransformStateType); InternalFunctionSpew("GameOS_Direct3D", "SetTransform(%s)", pszTransformType); hResult = d3dDevice7->SetTransform(dtstTransformStateType, lpD3DMatrix); if (FAILED(hResult)) { pszTransformType = GetTransformType(dtstTransformStateType); pszErrorMessage = ErrorNumberToMessage(hResult); if ( InternalFunctionPause("FAILED (0x%x - %s) - SetTransform(%s)", hResult, pszErrorMessage, pszTransformType) ) ENTER_DEBUGGER; } return hResult; }