📄 girl.cpp
字号:
#include <d3dx9.h>
#include "Girl.h"
Girl::~Girl()
{
SafeRelease(m_pMesh);
for(DWORD i=0;i<m_dwNumMaterials;i++)
{
SafeRelease(m_pMeshTextures[i]);
}
SafeDeleteArray(m_pMeshTextures);
SafeDeleteArray(m_pMeshMaterials);
};
Girl::Girl(LPDIRECT3DDEVICE9 pDevice,char *strMesh,BOOL bOptimize)
{
LPD3DXBUFFER pD3DXMtrlBuffer;//材质缓冲区指针
D3DXMATERIAL *d3dxMaterials;//缓冲区中材质指针
m_pDevice=pDevice;
m_vPos.x=0;
m_vPos.y=0;
m_vPos.z=0;
m_fAngle=0;
LRESULT ret= D3DXLoadMeshFromX( strMesh,0,
m_pDevice,
NULL,
&pD3DXMtrlBuffer,
NULL,
&m_dwNumMaterials,
&m_pMesh ) ;
if(ret!=D3D_OK)
{
MessageBox(NULL,"加载girl模型失败!\n可能是文件名或路径错误。",strMesh, MB_OK|MB_ICONERROR);
return;
}
d3dxMaterials=(D3DXMATERIAL*)pD3DXMtrlBuffer->GetBufferPointer();//获取材质地址
m_pMeshMaterials=new D3DMATERIAL9[m_dwNumMaterials];
m_pMeshTextures=new LPDIRECT3DTEXTURE9[m_dwNumMaterials];
for(DWORD i=0;i<m_dwNumMaterials;i++)
{
m_pMeshMaterials[i]=d3dxMaterials[i].MatD3D;//从缓冲区中拷贝材质
m_pMeshMaterials[i].Ambient=m_pMeshMaterials[i].Diffuse;//设置环境光属性
if(FAILED(D3DXCreateTextureFromFile(m_pDevice,
d3dxMaterials[i].pTextureFilename,
&m_pMeshTextures[i])))
{
m_pMeshTextures[i]=NULL;
MessageBox(NULL,"加载girl Textures失败!\n可能是文件名或路径错误。",strMesh,MB_OK|MB_ICONERROR);
}
}
if(pD3DXMtrlBuffer)//释放材质缓冲区
pD3DXMtrlBuffer->Release();
pD3DXMtrlBuffer=NULL;
//计算方盒
D3DXVECTOR3 *pVertices;
m_pMesh->LockVertexBuffer(0,(void**)&pVertices);
D3DXComputeBoundingBox(
pVertices,
m_pMesh->GetNumVertices(),
m_pMesh->GetNumBytesPerVertex(),
&m_vMin,
&m_vMax);
m_pMesh->UnlockVertexBuffer();
};
/*
Girl::SetPosition ()
{
}
*/
void Girl::Render(float x,float y,float z)
{
D3DXMATRIX matWorld,matWorldY,matTrans,matScla;
D3DXMatrixIdentity(&matWorld);//?
//D3DXMatrixScaling(&matScla,10,10,10);//缩放变换x,y,z
//D3DXMatrixMultiply(&matWorld,&matWorld,&matScla);
D3DXMatrixTranslation(&matTrans,0+x,70+y,100+z);
D3DXMatrixMultiply(&matWorld,&matWorld,&matTrans);//组合变换
D3DXMatrixRotationY(&matWorldY,y);
D3DXMatrixMultiply(&matWorld,&matWorld,&matWorldY);
m_pDevice->SetTransform(D3DTS_WORLD,&matWorld);
for(DWORD i=0;i<m_dwNumMaterials;i++)
{
m_pDevice->SetMaterial(&m_pMeshMaterials[i]);
m_pDevice->SetTexture(i,m_pMeshTextures[i]);
m_pMesh->DrawSubset(i);
}
};
/*
case VK_LEFT:
g_Angle-=0.01f;
g_Control.LookAt[1].x = g_Control.LookAt[0].x+sinf(g_Angle);
g_Control.LookAt[1].z = g_Control.LookAt[0].z+cosf(g_Angle);
break;
case VK_RIGHT:
g_Angle+=0.01f;
g_Control.LookAt[1].x = g_Control.LookAt[0].x+sinf(g_Angle);
g_Control.LookAt[1].z = g_Control.LookAt[0].z+cosf(g_Angle);
break;
case VK_UP:
g_Control.LookAt[0].x = g_Control.LookAt[0].x+sinf(g_Angle)/20;
g_Control.LookAt[0].z = g_Control.LookAt[0].z+cosf(g_Angle)/20;
g_Control.LookAt[1].x = g_Control.LookAt[1].x+sinf(g_Angle)/20;
g_Control.LookAt[1].z = g_Control.LookAt[1].z+cosf(g_Angle)/20;
// g_lightPosition.x = g_lightPosition.x+sinf(g_Angle)/20;
//g_lightPosition.z = g_lightPosition.z+cosf(g_Angle)/20;
break;
case VK_DOWN:
g_Control.LookAt[0].x = g_Control.LookAt[0].x-sinf(g_Angle)/20;
g_Control.LookAt[0].z = g_Control.LookAt[0].z-cosf(g_Angle)/20;
g_Control.LookAt[1].x = g_Control.LookAt[1].x-sinf(g_Angle)/20;
g_Control.LookAt[1].z = g_Control.LookAt[1].z-cosf(g_Angle)/20;
//g_lightPosition.x = g_lightPosition.x - sinf(g_Angle)/20;
//g_lightPosition.z = g_lightPosition.z-cosf(g_Angle)/20;
break;
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -