📄 basebuildobject.cpp
字号:
// BaseBuildObject.cpp: implementation of the CBaseBuildObject class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "BaseBuildObject.h"
#include "MCShadowObject.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CBaseBuildObject::CBaseBuildObject()
{
m_pObject = NULL;
m_nBreak = 0;
m_nCurFrame = 0;
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);
D3DXMatrixIdentity(&m_matWorld);
D3DXMatrixIdentity(&m_matScale);
D3DXMatrixIdentity(&m_matTrans);
D3DXMatrixIdentity(&m_matWorldShw);
m_pShadowObject = NULL;
// m_pBlendObject = NULL;
}
CBaseBuildObject::~CBaseBuildObject()
{
SAFE_DELETE( m_pShadowObject );
// SAFE_DELETE( m_pBlendObject );
}
HRESULT CBaseBuildObject::CreateShadowMesh( const char * szFileName )
{
if(!szFileName) // Default Setting
return E_FAIL;
HANDLE hFile = INVALID_HANDLE_VALUE;
hFile = CreateFile(szFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(hFile == INVALID_HANDLE_VALUE)
return E_FAIL;
if(m_pShadowObject)
int cde = 0;
SAFE_DELETE( m_pShadowObject );
m_pShadowObject = new CMCShadowObject;
if( m_pShadowObject == NULL )
return E_FAIL;
DWORD dwSize = 0;
int iTexCount;
ReadFile( hFile, &m_pShadowObject->m_nVertexCount, sizeof(int), &dwSize, NULL);
ReadFile( hFile, &m_pShadowObject->m_nFaceCount, sizeof(int), &dwSize, NULL);
ReadFile( hFile, &iTexCount, sizeof(int), &dwSize, NULL);
m_pShadowObject->m_pVertex = new MCFVFSHADOWVERTEX[m_pShadowObject->m_nVertexCount];
for(int j=0;j<m_pShadowObject->m_nVertexCount;j++)
{
float fVertex[3] = {0};
float fNomal[3] = {0};
ReadFile( hFile, fVertex, sizeof(float)*3, &dwSize, NULL);
// ReadFile(hFile, fNomal, sizeof(float)*3,&dwSize, NULL );
for(int i=0;i<3;i++)
{
int iValue = (int)(fVertex[i]*64.0f);
fNomal[i] = (float)iValue/64.0f;
}
m_pShadowObject->m_pVertex[j].vVector.x = fNomal[0];
m_pShadowObject->m_pVertex[j].vVector.y = fNomal[1];
m_pShadowObject->m_pVertex[j].vVector.z = fNomal[2];
//m_pShadowObject->m_pVertex[j].vVector = fVertex;
}
m_pShadowObject->m_pFace = new WORD[m_pShadowObject->m_nFaceCount*3];
for(j=0;j<m_pShadowObject->m_nFaceCount*3;j++)
{
DWORD dwFace;
ReadFile(hFile, &dwFace, sizeof(DWORD),&dwSize,NULL );
m_pShadowObject->m_pFace[j] = (WORD)dwFace;
}
if(iTexCount)
{
for(j=0;j<iTexCount;j++)
{
if(!g_pApp->GetTexManager())
return E_FAIL;
MCTEXTURE * pTexture = new MCTEXTURE;
char szTexName[68] = {0};
char szTexPath[256] = {0};
int nTexClass = 0;
int nTexSub = 0;
int nTexType = 0;
int nMapChannel = 0;
float fTexUOffset = 0.0f;
float fTexVOffset = 0.0f;
float fTexUScale = 0.0f;
float fTexVScale = 0.0f;
float fTexUAng = 0.0f;
float fTexVAng = 0.0f;
float fTexWAng = 0.0f;
ReadFile(hFile, &nTexClass, sizeof(int),&dwSize,NULL );
ReadFile(hFile, &nTexSub, sizeof(int),&dwSize,NULL );
ReadFile(hFile, &nTexType, sizeof(int),&dwSize,NULL );
ReadFile(hFile, &nMapChannel, sizeof(int),&dwSize,NULL );
ReadFile(hFile, &fTexUOffset, sizeof(float),&dwSize,NULL );
ReadFile(hFile, &fTexVOffset, sizeof(float),&dwSize,NULL );
ReadFile(hFile, &fTexUScale, sizeof(float),&dwSize,NULL );
ReadFile(hFile, &fTexVScale, sizeof(float),&dwSize,NULL );
ReadFile(hFile, &fTexUAng, sizeof(float),&dwSize,NULL );
ReadFile(hFile, &fTexVAng, sizeof(float),&dwSize,NULL );
ReadFile(hFile, &fTexWAng, sizeof(float),&dwSize,NULL );
ReadFile(hFile, szTexName, sizeof(szTexName),&dwSize,NULL );
char szNameBuf[256] = {0};
strcpy(szNameBuf,szFileName);
CUtility::GetDirPath( szNameBuf, szTexPath, NULL, NULL );
sprintf(pTexture->szTextureName,"%s%s",szTexPath,szTexName);
MCTEXTURE * pTex = NULL;
if( nTexClass == ID_LM )
{
// sprintf(pTexture->szTextureName,"%saa.jpg",szTexPath);
pTex = g_pApp->GetTexManager()->AddTexture( pTexture );
}
if( pTex != pTexture ) SAFE_DELETE(pTexture);
if(!pTex)
{
if( nTexClass == ID_LM )
CUtility::printf_Debug("\n[角菩] 扼捞飘甘(%s::)",szFileName,szTexName);
SAFE_DELETE( pTexture );
}
if( pTex )
{
m_pShadowObject->m_pTexture = pTex; // 窍唱狼 坷宏璃飘绰 窍唱狼 扼捞飘甘父 啊瘤备 乐促备 痹沥 秦初疽促.... 备贰辑 老纳 秦滴 达..
//break; // 榴措 捞逞 靖 救达. 哩厘擎擎擎..
}
}
for(j=0;j<m_pShadowObject->m_nVertexCount;j++)
{
DWORD nTexSub;
float fX = 0;
float fY = 0;
ReadFile(hFile, &nTexSub, sizeof(DWORD),&dwSize,NULL );
ReadFile(hFile, &fX, sizeof(float),&dwSize,NULL );
ReadFile(hFile, &fY, sizeof(float),&dwSize,NULL );
m_pShadowObject->m_pVertex[j].Tex.x = fX;
m_pShadowObject->m_pVertex[j].Tex.y = fY;
}
}
CloseHandle(hFile);
// 滚咆胶 官操绰 镑..
m_pShadowObject->CreateVIB();
return S_OK;
}
void CBaseBuildObject::Translation(D3DXVECTOR3 *pPos,BOOL bChange)
{
if(bChange)
D3DXMatrixTranslation(&m_matTrans,pPos->x,pPos->y,pPos->z);
else
{
D3DXMATRIX matTrans;
D3DXMatrixTranslation(&matTrans,pPos->x,pPos->y,pPos->z);
D3DXMatrixMultiply(&m_matTrans,&m_matTrans,&matTrans);
}
}
void CBaseBuildObject::RotateAxis(D3DXVECTOR3 *vAxis,float Angle, BOOL bChange)
{
D3DXQUATERNION qRot;
D3DXQuaternionRotationAxis(&qRot,vAxis,Angle); // 孽磐聪柯 雀傈
D3DXQuaternionNormalize(&qRot,&qRot);
if(bChange) this->ReSetRotation();
D3DXQuaternionMultiply(&m_quateRotate,&m_quateRotate,&qRot); // 雀傈蔼阑 阶酒狄
CUtility::QuaternionRotateVector(qRot,&m_vLook);
CUtility::QuaternionRotateVector(qRot,&m_vRight);
CUtility::QuaternionRotateVector(qRot,&m_vUp);
D3DXVec3Normalize(&m_vLook,&m_vLook);
D3DXVec3Normalize(&m_vRight,&m_vRight);
D3DXVec3Normalize(&m_vUp,&m_vUp);
}
void CBaseBuildObject::ReSetWorldMat()
{
m_quateResult = m_quateRotate;
D3DXMATRIX matRotate;
D3DXMatrixRotationQuaternion(&matRotate,&m_quateResult); // 概飘腐胶肺
m_matWorld = m_matScale * matRotate * m_matTrans;
}
void CBaseBuildObject::Render()
{
// ReSetWorldMat();
g_pApp->GetD3dDevice()->SetTransform(D3DTS_WORLD,&m_matWorld);
m_pObject->Render(m_nCurFrame);
m_pObject->RenderColMesh(m_nCurFrame);
}
void CBaseBuildObject::RenderEx()
{
// ReSetWorldMat();
g_pApp->GetD3dDevice()->SetTransform(D3DTS_WORLD,&m_matWorld);
m_pObject->Render(m_nCurFrame);
}
void CBaseBuildObject::RenderExTest()
{
g_pApp->GetD3dDevice()->SetTransform(D3DTS_WORLD,&m_matWorld);
m_pObject->RenderEx( m_matWorld, m_nCurFrame );
}
void CBaseBuildObject::ColMeshRenderEx()
{
g_pApp->GetD3dDevice()->SetTransform(D3DTS_WORLD,&m_matWorld);
m_pObject->RenderColMesh(m_nCurFrame);
}
void CBaseBuildObject::BBoxRender()
{
m_pObject->BoundingBoxRender(m_nCurFrame,m_matWorld);
}
void CBaseBuildObject::ShadowRender()
{
g_pApp->GetD3dDevice()->SetTransform(D3DTS_WORLD,&m_matWorld);
if(m_pShadowObject)
m_pShadowObject->Render();
}
void CBaseBuildObject::RenderAlphaTex()
{
g_pApp->GetD3dDevice()->SetTransform(D3DTS_WORLD,&m_matWorld);
m_pObject->RenderAlphaEx( m_matWorld, m_nCurFrame );
}
void CBaseBuildObject::RenderDecal()
{
g_pApp->GetD3dDevice()->SetTransform(D3DTS_WORLD,&m_matWorld);
m_pObject->RenderDecalEx( m_matWorld, m_nCurFrame );
}
BOOL CBaseBuildObject::CheckCollision( D3DXVECTOR3 vOrg, D3DXVECTOR3 * vDir,
FLOAT fTargetDist, FLOAT * fDist , D3DXVECTOR3 * vCollPos )
{
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -