⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mcmachine.cpp

📁 国外网游源码....除工具源码缺少之外,其余程序都全...至于,什么游戏,因为国内还没有,所以找不到测试
💻 CPP
字号:
// MCMachine.cpp: implementation of the CMCMachine class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MCMachine.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMCMachine::CMCMachine()
{
	/*
	m_pBasis		= NULL;
	m_pd3dDevice	= NULL;
	m_nPartType		= 0;
	m_pModel		= NULL;
	m_pTag			= NULL;
	m_nCurFrame		= 0;
	m_nNextFrame	= 0;
	m_dwMSPF		= 0;	// Mill Second Per Frame
	m_dwAccTime		= 0;	// 穿利~
	m_finterPolation= 0;	// 焊埃俊 静捞绰芭

	m_bParentsPosApply	  = TRUE;
	m_wParentsRotateApply = TRUE;

	m_pPlayer		= NULL;
	*/
}

CMCMachine::~CMCMachine()
{
	/*
	m_pModel	= NULL;	// Main Scene 何盒俊辑 颇鲍窃.(皋葛府包府窍绰镑 捞扼带啊)
	m_pBasis	= NULL; // 按眉 颇鲍绰 Basis 磊脚捞 舅酒辑 窃
	m_pTag		= NULL; // m_pModel俊辑 颇鲍窃
	*/
}

/*
HRESULT CMCMachine::CreateParts(LPDIRECT3DDEVICE9 pD3dDevice, DWORD nPartType, CMCModel *pModel, CPlayerMachine *pPlayer)
{
	//----------------------------------------------//
	// Direct3D Device
	//----------------------------------------------//
	m_pd3dDevice = pD3dDevice;
	//----------------------------------------------//
	// PartType
	//----------------------------------------------//
	m_nPartType = nPartType;
	//----------------------------------------------//
	// MD3Model
	//----------------------------------------------//
	m_pModel = pModel;
	//----------------------------------------------//
	// this甫 啊瘤绊 乐绰 PlayerMachine
	//----------------------------------------------//
	m_pPlayer = pPlayer;
	//----------------------------------------------//
	// Tag 林家甫 祈狼甫 困秦 爱绊 乐绰促.
	//----------------------------------------------//
	m_pTag = m_pModel->GetTag();
	//----------------------------------------------//
	// Data Init
	//----------------------------------------------//
	m_vLook		= D3DXVECTOR3(0.0f,0.0f,1.0f);
	m_vRight	= D3DXVECTOR3(1.0f,0.0f,0.0f);
	m_vUp		= D3DXVECTOR3(0.0f,1.0f,0.0f);
	
	D3DXQuaternionIdentity(&m_quateRotate);
	D3DXQuaternionIdentity(&m_quateResult);
	D3DXMatrixIdentity(&m_matWorld);
	D3DXMatrixIdentity(&m_matScale);
	D3DXMatrixIdentity(&m_matTrans);

	//----------------------------------------------//
	// 冠胶俊 鞘夸茄 何盒
	//----------------------------------------------//
	DWORD dwFrameNum = m_pModel->GetMD3Header()->iBoneFrameNum; // 关俊 拌魂窍扁 困秦
	m_vpBoxVertex = new D3DXVECTOR3[ dwFrameNum * 8 ];
	m_vpBoxCenter = new D3DXVECTOR3[ dwFrameNum ];
	m_pPlane	  = new D3DXPLANE[ dwFrameNum * 6 ];

	ZeroMemory(m_pPlane,sizeof(D3DXPLANE)*dwFrameNum*6);
	ZeroMemory(m_vpBoxVertex,sizeof(D3DXVECTOR3)*dwFrameNum*8 );
	ZeroMemory(m_vpBoxCenter,sizeof(D3DXVECTOR3)*dwFrameNum );
	
	D3DXVECTOR3 vMins,vMaxs;

	int i;
	for(i=0; i<dwFrameNum; i++)
	{
		vMaxs = m_pModel->GetBoundBox(i)->vMaxs;
		vMins = m_pModel->GetBoundBox(i)->vMins;
		
		// 冠胶狼 8谅钎甫 父惦.
		this->SetBox(&m_vpBoxVertex[i*8],vMins,vMaxs);
		
		// 乞搁阑 父电促.
		D3DXPlaneFromPoints(&m_pPlane[i*6],&m_vpBoxVertex[i*8],&m_vpBoxVertex[i*8+2],&m_vpBoxVertex[i*8+1]); // botton
		D3DXPlaneFromPoints(&m_pPlane[i*6+1],&m_vpBoxVertex[i*8+4],&m_vpBoxVertex[i*8+5],&m_vpBoxVertex[i*8+7]); // Top
		D3DXPlaneFromPoints(&m_pPlane[i*6+2],&m_vpBoxVertex[i*8+5],&m_vpBoxVertex[i*8+1],&m_vpBoxVertex[i*8+7]); // Right
		D3DXPlaneFromPoints(&m_pPlane[i*6+3],&m_vpBoxVertex[i*8],&m_vpBoxVertex[i*8+4],&m_vpBoxVertex[i*8+6]); // Left
		D3DXPlaneFromPoints(&m_pPlane[i*6+4],&m_vpBoxVertex[i*8],&m_vpBoxVertex[i*8+5],&m_vpBoxVertex[i*8+4]); // Near
		D3DXPlaneFromPoints(&m_pPlane[i*6+5],&m_vpBoxVertex[i*8+6],&m_vpBoxVertex[i*8+7],&m_vpBoxVertex[i*8+3]); // Far
		
		m_vpBoxCenter[i] = ((vMaxs - vMins)/2)+vMins;	// 吝缴痢阑 备窃
	}

	return S_OK;
}

bool CMCMachine::Render(bool bBoxbound/*=false*//*)
{
	// 鞘磐傅
	m_pd3dDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
	m_pd3dDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
	m_pd3dDevice->SetSamplerState( 0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);
	m_pd3dDevice->SetSamplerState( 1, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
	m_pd3dDevice->SetSamplerState( 1, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
	m_pd3dDevice->SetSamplerState( 1, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);

	// tag蔼 盎脚
	CMCMachine::TagRender();

	// 皋浆甫 罚歹傅
	CMCMachine::SetWorldMatrix();
	m_pd3dDevice->SetTransform(D3DTS_WORLD,&m_matWorld);
	m_pModel->Render(m_nCurFrame,m_nNextFrame,m_finterPolation);

	// 官款爹 冠胶甫 弊副搏瘤 八荤.
	if(bBoxbound) m_pModel->BoundingBoxRender(m_nCurFrame, m_matWorld);
	
	return true;
}

void CMCMachine::TagRender()
{
	D3DXMATRIXA16 matResult;

	if(m_pBasis)
	{
		m_pBasis->TagRender();
		m_pBasis->SetWorldMatrix();	// 刚历 海捞胶狼 雀傈苞 谅钎甫 炼钦矫挪促.

		D3DTAG *pCurTag = m_pBasis->GetCurTag();
		D3DTAG *pNextTag = m_pBasis->GetNextTag();
		
		bool bFind=false;
		int i,j;
		for(i=0; i<m_pBasis->GetModel()->GetMD3Header()->iTagNum; i++)
		{
			for(j=0; j<m_pModel->GetMD3Header()->iTagNum; j++)
			{
				if(!strcmp(pCurTag->szTagName, &m_pTag[j].szTagName[0] ))
				{
					// 茫疽促
					bFind=true;
					break;
				}
			}

			if(bFind) break;	// 茫疽促搁 for巩阑 弊父倒酒扼~

			++pCurTag;
			++pNextTag;
		}
		
		// 雀傈青纺阑 孽磐聪柯栏肺 父甸绊
		D3DXQUATERNION quateCurFrame, quateNextFrame, quateResult;
		D3DXQuaternionRotationMatrix(&quateCurFrame, &pCurTag->matTag );
		D3DXQuaternionRotationMatrix(&quateNextFrame, &pNextTag->matTag );
		
		// 滴俺狼 孽磐聪柯阑 备搁急屈阑 捞侩秦辑 焊埃茄促.
		D3DXQuaternionSlerp(&quateResult,&quateCurFrame, &quateNextFrame, m_pBasis->GetInterPolation());
		
		D3DXQUATERNION quater;

		switch(m_wParentsRotateApply) 
		{
		case 0:		// 磊扁 磊脚狼 雀傈蔼阑 啊柳促.
			quater = m_quateRotate;
			break;
		case 1:		// 何葛狼 雀傈蔼阑 罐绰促.
			quater = *m_pBasis->GetRotateQuater();
			break;
//		case 2:		// 何葛狼 雀傈蔼俊 磊扁 磊脚狼 雀傈蔼阑 歹茄促~
//			D3DXQuaternionMultiply(&quater,&m_quateRotate,m_pBasis->GetResultQuater());
//			break;
		}	
	
		D3DXQuaternionMultiply(&m_quateResult,&quateResult,&quater);
		
		if(m_bParentsPosApply)
		{
			D3DXMatrixIdentity(&matResult);
			
			// 付瘤阜栏肺 谅钎蔼 焊埃~
			// 鉴辑措肺 x,y,z,1
			for(j=12; j<15; j++) // 12 何磐 矫累窍绰 捞蜡绰 4x4狼 12锅掳 = x, 13 = y, 14 = z, 付瘤阜搏 救静聪鳖
			{
				matResult[j] = pCurTag->matTag[j] + m_pBasis->GetInterPolation() * ( pNextTag->matTag[j] - pCurTag->matTag[j] );
			}
			// 唱赣瘤蔼 悸泼
			//matResult[15] = 1.0f; matResult[3] = matResult[7] = matResult[11] = 0.0f;
		}

		D3DXMatrixMultiply(&matResult,&matResult, m_pBasis->GetWorldMatrix() );	// 岿靛青纺俊 利侩~
		m_matTrans._41 = matResult._41;
		m_matTrans._42 = matResult._42;
		m_matTrans._43 = matResult._43;
	}
	else	// 何葛啊 绝促搁, 雀傈 孽磐甫 弥辆孽磐肺 颗扁磊.
		m_quateResult = m_quateRotate;

	m_vLook = D3DXVECTOR3(0,0,1);
	m_vUp	= D3DXVECTOR3(0,1,0);
	m_vRight= D3DXVECTOR3(1,0,0);
	CUtility::QuaternionRotateVector(m_quateResult,&m_vLook);
	CUtility::QuaternionRotateVector(m_quateResult,&m_vRight);
	CUtility::QuaternionRotateVector(m_quateResult,&m_vUp);
}

D3DTAG *CMCMachine::FindTag(char *szTagName)
{
	D3DTAG *pCurTag = CMCMachine::GetCurTag();
	
	int i;
	for(i=0; i<m_pModel->GetMD3Header()->iTagNum; i++)
	{
		// 茫绰促.
		if(!strcmp(pCurTag->szTagName, szTagName))
		{ 
			break;
		}
		++pCurTag;
	}

	return pCurTag;
}

//-------------------------------------------------------------------------
//	Name. Intersect		: 乔欧 盲农..
//	D3DXVECTOR3& vDest  : 乔欧等 芭府甫 焊辰促.
//-------------------------------------------------------------------------
D3DXVECTOR3 CMCMachine::Intersect( D3DXVECTOR3 vRayOrig, D3DXVECTOR3 vRayDir, float &pDist, D3DXVECTOR3 *pTriangle)
{
	// 吝缴痢阑 备茄促.
	D3DXVECTOR3	vIntersectPos(0.0f,0.0f,0.0f);
	
	LPDIRECT3DVERTEXBUFFER9 pVB;
	LPDIRECT3DINDEXBUFFER9  pIB;

	DWORD dwMeshCnt = m_pModel->GetMeshCnt();
	CMCMesh *pMesh = m_pModel->GetMesh();
	
	for(int j=0; j<dwMeshCnt; j++,pMesh++)	// 皋浆父怒 捣促~
	{
		pMesh->GetVertexBuffer( &pVB );
		pMesh->GetIndexBuffer( &pIB );
		
		WORD*			pIndices;
		D3DVERTEX*		pVertices;
		
		pIB->Lock( 0, 0, (void**)&pIndices, 0 );
		pVB->Lock( 0, 0, (void**)&pVertices, 0 );
		
		FLOAT fBary1, fBary2;
		FLOAT fDist,fMinDist = 10000.0f;
		int nIntersect = 0;
		
		for( DWORD i=0; i<pMesh->m_nFaceCount; i++ )
		{
			D3DXVECTOR3 v0 = pVertices[pIndices[3*i+0]].p;
			D3DXVECTOR3 v1 = pVertices[pIndices[3*i+1]].p;
			D3DXVECTOR3 v2 = pVertices[pIndices[3*i+2]].p;
			
			D3DXVec3TransformCoord(&v0,&v0,&m_matWorld);
			D3DXVec3TransformCoord(&v1,&v1,&m_matWorld);
			D3DXVec3TransformCoord(&v2,&v2,&m_matWorld);
			
			// Check if the pick ray passes through this point
			if( CUtility::IntersectTriangle( vRayOrig, vRayDir, v0, v1, v2,
				&fDist, &fBary1, &fBary2 ) )
			{
				nIntersect++;
				if( fDist < fMinDist )
				{
					vIntersectPos = vRayOrig + vRayDir * fDist;
					pDist = fMinDist = fDist;

					pTriangle[0] = v0;
					pTriangle[1] = v1;
					pTriangle[2] = v2;
				}
			}
		}
		
		pVB->Unlock();
		pIB->Unlock();
	}

	return vIntersectPos;
}

*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -