#pragma once (Table.h)
# endif//_ MSC _ VER & gt;1000
#包含“Base.h”
# define MESH _ d 3d VF _ custom vertex(d 3d VF _ XYZ | d 3d VF _ NORMAL | d 3d VF _ tex 1)
可選擇的類:公共數據庫
{
公共:
DWORD Render();
CTable(lpdirect 3d device 8 pd3d device,LPSTR pFilename);
virtual ~ CTable();
lpd 3 dx mesh GetMeshTablePointer();
私人:
void transform table();
lpdirect 3d device 8m _ pd3d device;
DWORD m _ dwNumMaterials
lpd 3 dx mesh m _ pMeshTable;
d3d material 8 * m _ pMeshTableMaterials;
lpdirect 3d texture 8 * m _ pMeshTableTextures;
};#endif
#包含“table . h”(table . CPP)
CTable::CTable(lpdirect 3d device 8 pd3d device,LPSTR pFilename)
{
lpd 3 dx buffer pMaterialsBuffer = NULL;
lpd 3 dx mesh pMeshTable = NULL;
m _ pD3DDevice = pD3DDevice
if(FAILED(d 3 dxloadmeshfromx(pFilename,D3DXMESH_MANAGED,m_pD3DDevice,NULL,
& amppMaterialsBuffer & amp;m _ dwNumMaterials & amp;pMeshTable)))
{
m _ pMeshTable = NULL
m _ pMeshTableMaterials = NULL
m _ pMeshTableTextures = NULL
log error(" & lt;李& gt表格網格“%s”未能加載”,pFilename);
返回;
}
d3dx material * mat materials =(d3dx material *)pMaterialsBuffer-& gt;get buffer pointer();
//創建兩個數組。壹個保存材質,壹個保存紋理
m _ pMeshTableMaterials = new d3d material 8[m _ dwNumMaterials];
m _ pMeshTableTextures = new lpdirect 3d texture 8[m _ dwNumMaterials];
for(DWORD I = 0;我& ltm _ dwNumMaterialsi++)
{
//復制材料
m _ pMeshTableMaterials[I]= mat materials[I]. matd 3d;
//設置材質的環境顏色(D3DX不會這樣做)
m_pMeshTableMaterials[i].ambient = m _ pMeshTableMaterials[I]。彌漫;
d3d color value rgbaSpecular = { 0.0f,0.0f,0.0f,0.0f };
m_pMeshTableMaterials[i].鏡面= rgbaSpecular
m_pMeshTableMaterials[i].功率= 50.0f
//創建紋理
char緩沖區[255];
sprintf(buffer," textures/%s ",matMaterials[i]。pTextureFilename);
if(失敗(D3DXCreateTextureFromFile(m _ pd3d device,
緩沖區。m_pMeshTableTextures[i])))
{
m _ pMeshTableTextures[I]= NULL;
}
}
//完成了素材緩沖,所以釋放它
safe release(pMaterialsBuffer);
//確保為網格設置了法線
pMeshTable-& gt;CloneMeshFVF(D3DXMESH_MANAGED,MESH _ D3DFVF _ CUSTOMVERTEX,m_pD3DDevice,& ampm _ pMeshTable);
safe release(pMeshTable);
//d3dxcomputernormals(m _ pMesh);
log info(" & lt;李& gt網格“%s”加載正常”,pFilename);
}
可檢測的::~可檢測的()
{
safe delete(m _ pMeshTableMaterials);
if(m_pMeshTableTextures!=空)
{
for(DWORD I = 0;我& ltm _ dwNumMaterialsi++)
{
if(m_pMeshTableTextures[i])
safe release(m _ pMeshTableTextures[I]);
}
}
safe delete(m _ pMeshTableTextures);
safe release(m _ pMeshTable);
log info(" & lt;李& gt表網毀OK”);
}
DWORD CTable::Render()
{
transform table();
if(m_pMeshTable!=空)
{
for(DWORD I = 0;我& ltm _ dwNumMaterialsi++)
{
m _ pd3d device-& gt;set material(& amp;m _ pMeshTableMaterials[I]);
m _ pd3d device-& gt;SetTexture(0,m _ pMeshTableTextures[I]);
m _ pMeshTable-& gt;draw subset(I);
}
返回m _ pMeshTable-& gt;GetNumFaces();
}
其他
返回0;
}
lpd 3 dx mesh CTable::GetMeshTablePointer()
{
返回m _ pMeshTable
}
void CTable::TransformTable()
{
D3DXMATRIX matWorld
d3dxmatrix translation(& amp;matWorld,0,0,0);
m _ pd3d device-& gt;SetTransform(D3DTS_WORLD,& ampmatWorld);
}
(Sphere.h)
#如果!已定義(AFX _ SPHERE _ H _ _ fc 705 F3 b _ 568 e _ 4973 _ B608 _ b8f 7700 d9 ECE _ _ INCLUDED _)
# define AFX _ SPHERE _ H _ _ fc 705 F3 b _ 568 e _ 4973 _ B608 _ b8f 7700 d9 ECE _ _ INCLUDED _
# if _ MSC _ VER & gt;1000
#雜註壹次
# endif//_ MSC _ VER & gt;1000
#包含“Base.h”
# define SPHERE _ d 3d VF _ custom vertex(d 3d VF _ XYZ | d 3d VF _ NORMAL | d 3d VF _ tex 1)
類CSphere:公共庫
{
私人:
結構球體_自定義頂點
{
浮點x,y,z;//頂點在三維空間中的位置
float nx,ny,NZ;//正常照明
浮屠,電視;//紋理坐標
};
結構球體狀態
{
D3DXVECTOR3 sVector//百分圖在三維空間中的位置
D3DXVECTOR3 vVector//3D空間中的速度方向
浮動v;//球體的速度
};
SPHERE _ STATE * m _ pSphereState
d3dx vector 3m _ vecSavePosition;//保存碰撞欄的球體位置
d3dx vector 3m _ vecsaveposition 2;//保存碰撞球體的球體位置
公共:
BOOL set material(d3d color value RGB diffuse,D3DCOLORVALUE rgbaAmbient,
D3DCOLORVALUE rgbaSpecular,D3DCOLORVALUE rgbaEmissive,float rPower);
BOOL SetTexture(const char * szTextureFilePath);
DWORD Render();
CSP here(lpdirect 3d device 8 pd3d device,int iRings=20,int I segments = 20);
void move sphere();
void MoveSphereForUser(float x,float z);
虛擬~ CSP here();
內嵌void SetSpherePosition(浮點x,浮點y,浮點z)
{
m _ pSphereState-& gt;sVector.x = x
m _ pSphereState-& gt;sVector.y = y
m _ pSphereState-& gt;sVector.z = z
};
內聯void GetSpherePosition(d3dx vector 3 & amp;vecSpherePos)
{
vecSpherePos = m _ pSphereState-& gt;斯維特;
};
內聯void GetSavedSpherePosition(d3dx vector 3 & amp;vecSavedSpherePos)
{
vecSavedSpherePos = m _ vecSavePosition;
};
內聯void getsavedsphereposition 2(d3dx vector 3 & amp;vecSavedSpherePos)
{
vecSavedSpherePos = m _ vecsaveposition 2;
};
內嵌void SaveSpherePosition()
{
m _ vecSavePosition = m _ pSphereState-& gt;斯維特;
};
內嵌void SaveSpherePosition2()
{
m _ vecsaveposition 2 = m _ pSphereState-& gt;斯維特;
};
內聯void矛盾Zv()
{
m _ pSphereState-& gt;vvector . z =-m _ pSphereState-& gt;vVector.z
};
內嵌void矛盾Xv()
{
m _ pSphereState-& gt;vvector . x =-m _ pSphereState-& gt;vVector.x
};
void MirrorVAoubtAxis(d3dx vector 3 & amp;n);
內嵌void ReduceSphereVelocity(浮動百分比)
{
m _ pSphereState-& gt;v = m _ pSphereState-& gt;v *百分比;
};
內聯浮點CheckSphereEnergy()
{
返回m _ pSphereState-& gt;五;
};
內嵌void SetSphereVelocityDir(const d3dx vector 3 & amp;vDir)
{
m _ pSphereState-& gt;vVector = vDir
};
內嵌void SetSphereVelocity(const float & amp;速度)
{
m _ pSphereState-& gt;v =速度;
};
內嵌void GetSphereVelocityDir(d3dx vector 3 & amp;vDir)
{
vDir = m _ pSphereState-& gt;vVector
};
內聯浮點GetSphereVelocity()
{
返回m _ pSphereState-& gt;五;
};
內聯void SetSphereStateToFalse()
{
m _ bssphereinuse = FALSE;
};
內嵌void SetSphereStateToTrue()
{
m _ bssphereinuse = TRUE;
};
內聯BOOL GetSphereState()
{
返回m _ bSphereInUse
};
void SetSphereVelocityAt _ Y _ negative axis();
內聯浮點GetSpherePosAt_Y_Axis()
{
返回m _ pSphereState-& gt;sVector.y
};
私人:
BOOL CreateIndexBuffer();
BOOL update vertices();
BOOL CreateVertexBuffer();
void transform sphere();
void TransformSphereForUser();
void UpdateSpherePosition();
void FrictionReduseVelocity();
lpdirect 3d device 8m _ pd3d device;
lpdirect 3d vertexbuffer 8m _ pVertexBuffer;
lpdirect 3d texture 8m _ p texture;
d 3d material 8m _ mat material;
lpdirect 3d index buffer 8m _ pindex buffer;
int m _ iRings
int m _ iSegments
float m _ fTotalDis
d3dx vector 3m _ vecSphereRotationAxis;
BOOL m _ bSphereInUse
DWORD m _ dwNumOfVertices
DWORD m _ dwNumOfIndices
DWORD m _ dwNumOfPolygons
};#endif