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

📄 cship.cpp

📁 zip压缩,解压缩 英文版本的,大家凑货看
💻 CPP
字号:
#include "CShip.h"

#include <stdio.h>
//using namespace std;
#include "CGDevice.h"

CShip::CShip():tex(0),pIB(0)
{
	memset(Vertices,0,sizeof(VERTEX_COLOR_TEXTURE)*27);
	D3DXMatrixIdentity(&mat);
	D3DXMatrixIdentity(&totalMat);
	eye=D3DXVECTOR3(0.0f,0.0f,0.0f);
	look=D3DXVECTOR3(0.0f,0.0f,1.0f);
	moveX=moveZ=rot=0.0f;
}

CShip::~CShip()
{
	SAFE_RELEASE(tex);
	SAFE_RELEASE(pIB);
}

HRESULT CShip::Create()
{
	VERTEX_COLOR_TEXTURE tempVertex[]=
	{
		//底
		{-1,0,0,0xFFFFFFFF,0.5f,1.0f},
		{0,0,3,0xFFFFFFFF,0.75f,0.0f},
		{1,0,0,0xFFFFFFFF,1.0f,1.0f},

		{-1,1,0,0xFFFFFFFF,0.5f,1.0f},
		{0,1,3,0xFFFFFFFF,0.75f,0.0f},
		{1,1,0,0xFFFFFFFF,1.0f,1.0f},

		//左
		{-1,0,0,0xFFFFFFFF,1.0f,1.0f},
		{0,0,3,0xFFFFFFFF,0.5f,1.0f},
		{0,1,3,0xFFFFFFFF,0.5f,0.0f},

		{0,1,3,0xFFFFFFFF,0.5f,0.0f},
		{-1,1,0,0xFFFFFFFF,1.0f,0.0f},
		{-1,0,0,0xFFFFFFFF,1.0f,1.0f},

		//右
		{1,0,0,0xFFFFFFFF,1.0f,1.0f},
		{0,0,3,0xFFFFFFFF,0.5f,1.0f},
		{0,1,3,0xFFFFFFFF,0.5f,0.0f},

		{0,1,3,0xFFFFFFFF,0.5f,0.0f},
		{1,1,0,0xFFFFFFFF,1.0f,0.0f},
		{1,0,0,0xFFFFFFFF,1.0f,1.0f},

		//后
		{1,0,0,0xFFFFFFFF,1.0f,1.0f},
		{-1,0,0,0xFFFFFFFF,0.5f,1.0f},
		{-1,1,0,0xFFFFFFFF,0.5f,0.0f},

		{-1,1,0,0xFFFFFFFF,0.5f,0.0f},
		{1,1,0,0xFFFFFFFF,1.0f,0.0f},
		{1,0,0,0xFFFFFFFF,1.0f,1.0f},

		//帆
		{0,0.5,2.5,0xFFFFFFFF,0.0f,1.0f},
		{0,5,1.5,0xFFFFFFFF,0.25f,0.0f},
		{0,0.5,0.5,0xFFFFFFFF,0.5f,1.0f},
		
	};
	memcpy(Vertices,tempVertex,sizeof(VERTEX_COLOR_TEXTURE)*27);
	CGDevice *pDev=CGDevice::GetInstance();
	if(FAILED(pDev->GetDev()->CreateVertexBuffer(27*sizeof(VERTEX_COLOR_TEXTURE),0,D3DFVF_XYZ_COLOR_TEXTURE,D3DPOOL_DEFAULT,&pIB,NULL)))
	{
		return S_FALSE;
	}
	VERTEX_COLOR_TEXTURE *pVer;
	if(FAILED(pIB->Lock(0,0,(void**)&pVer,0)))
		return S_FALSE;
	memcpy(pVer,Vertices,sizeof(VERTEX_COLOR_TEXTURE)*27);
	pIB->Unlock();
	
	if(FAILED(D3DXCreateTextureFromFile(pDev->GetDev(),TEXT("ship.jpg"),&tex)))
		return S_FALSE;
	return S_OK;
}

void CShip::SetTrans(float movex,float movey,float movez,float scalex,float scaley,float scalez)
{
	D3DXMATRIX matTrans;
	D3DXMatrixTranslation(&matTrans,0.0f,0.0f,-2.0f);
	mat=matTrans;
	D3DXMatrixScaling(&matTrans,scalex,scaley,scalez);	
	mat*=matTrans;
	D3DXMatrixTranslation(&matTrans,movex,movey,movez);	
	mat*=matTrans;
}

HRESULT CShip::Render()
{
	CGDevice *pDev=CGDevice::GetInstance();
	LPDIRECT3DDEVICE9 dev=pDev->GetDev();
	dev->SetTransform(D3DTS_WORLD,&totalMat);
	dev->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
	dev->SetRenderState(D3DRS_ALPHABLENDENABLE,FALSE);
//	dev->SetRenderState(D3DRS_FILLMODE,D3DFILL_WIREFRAME);
	dev->SetTexture(0,tex);
	dev->SetRenderState(D3DRS_ZFUNC,D3DCMP_LESS);
	dev->SetRenderState(D3DRS_ZENABLE,TRUE);
	if(FAILED(dev->SetStreamSource(0,pIB,0,sizeof(VERTEX_COLOR_TEXTURE))))
		return S_FALSE; 
	if(FAILED(dev->SetFVF(D3DFVF_XYZ_COLOR_TEXTURE)))
		return S_FALSE;
	if(FAILED(dev->DrawPrimitive(D3DPT_TRIANGLELIST,0,12)))
		return S_FALSE;
	dev->SetRenderState(D3DRS_ZENABLE,FALSE);
	return S_OK;
}


void CShip::Move(float x,float z)
{
	
		moveX=x;
		moveZ=z;
}

void CShip::Rotate(float rot)
{
	this->rot-=rot;
}

HRESULT CShip::Update()
{
	CGDevice *dev=CGDevice::GetInstance();
	LPDIRECT3DDEVICE9 pdev=dev->GetDev();

	D3DXMATRIX matY,matTrans,moveMat;

	D3DXMatrixIdentity(&moveMat);
	//位置变换
	//本次位移量
	D3DXVECTOR3	cur_eye(moveX,0.0f,moveZ);
	moveX=0.0f;
	moveZ=0.0f;	
	//将位移量旋转到方向上,得到相应位移向量
	D3DXMatrixRotationY(&matY,rot);
	dev->VertexMulMatrix(&cur_eye,&matY);	
	//将位移向量加到当前的位置向量上得到新的位置向量 
	eye+=cur_eye;

	if(eye.x>9000)
		eye.x=9000;
	else if(eye.x<-9000)
		eye.x=-9000;
	if(eye.z>9000)
		eye.z=9000;
	else if(eye.z<-9000)
		eye.z=-9000;

	D3DXMatrixTranslation(&matTrans,eye.x,0.0f,eye.z);
//	D3DXMatrixIdentity(&moveMat);

	moveMat*=matY;
	moveMat*=matTrans;
	totalMat=mat*moveMat;

	return S_OK;
}

⌨️ 快捷键说明

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