Пример #1
0
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);
}
Пример #2
0
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);
}
Пример #3
0
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;
}
Пример #4
0
CEi::CEi(const D3DVECTOR vpos,const D3DVECTOR vang,D3DVECTOR ospeed,const D3DVECTOR opos,const BOOLEAN relativespeed,const float vspeed,const UID vowner)
:pos(vpos),ang(vang),speed(D3DVECTOR(0,0,vspeed)),owner(vowner),lpMesh(game->models->FindObject("Ei"))
{
	D3DVECTOR v;
	D3DMATRIX m,m2;
	D3DUtil_SetRotateYMatrix(m,ang.y);
	if (!relativespeed)D3DMath_VectorMatrixMultiply(ospeed,ospeed,m);
	D3DUtil_SetRotateXMatrix(m2,-ang.x);
	D3DMath_MatrixMultiply(m,m2,m);

	D3DMath_VectorMatrixMultiply(v,D3DVECTOR(0,0,1)+opos,m);
	pos+=v;

	D3DMath_VectorMatrixMultiply(speed,speed,m);
	speed+=ospeed;
	speed.y+=ei_offsety;
	id=MakeUID(IDEi);
}
Пример #5
0
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;
}
Пример #6
0
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;
}
Пример #7
0
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;
	}
}
Пример #8
0
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();
		}
	}
}