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

📄 cskybox.cpp

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

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

CSkybox::CSkybox():pIB(0)
{
	memset(Vertices,0,sizeof(VERTEX_COLOR_TEXTURE)*36);
	D3DXMatrixIdentity(&mat);
	for(int i=0;i<6;++i)
	{
		tex[i]=0;
	}
}

CSkybox::~CSkybox()
{
	for(int i=0;i<6;++i)
	{
		SAFE_RELEASE(tex[i]);
	}
	SAFE_RELEASE(pIB);
}

HRESULT CSkybox::CreateBox()
{
	VERTEX_COLOR_TEXTURE tempVertex[]=
	{
		//前
		{-1,-1,1,0xFFFFFFFF,0.0f,1.0f},
		{-1,1,1,0xFFFFFFFF,0.0f,0.0f},
		{1,1,1,0xFFFFFFFF,1.0f,0.0f},

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

		//右
		{1,-1,1,0xFFFFFFFF,0.0f,1.0f},
		{1,1,1,0xFFFFFFFF,0.0f,0.0f},
		{1,1,-1,0xFFFFFFFF,1.0f,0.0f},

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

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

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

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

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

	
		//下

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

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

		//上

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

		{-1,1,1,0xFFFFFFFF,1.0f,0.0f},
		{-1,1,-1,0xFFFFFFFF,1.0f,1.0f},
		{1,1,-1,0xFFFFFFFF,0.0f,1.0f},
		
	};
	memcpy(Vertices,tempVertex,sizeof(VERTEX_COLOR_TEXTURE)*36);
	CGDevice *pDev=CGDevice::GetInstance();
	if(FAILED(pDev->GetDev()->CreateVertexBuffer(36*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)*36);
	pIB->Unlock();	

	TCHAR str[16];
	for(int i=0;i<6;++i)
	{
		memset(str,0,sizeof(TCHAR)*16);
		wsprintf(str,TEXT("t%d.jpg"),i);
		if(FAILED(D3DXCreateTextureFromFile(pDev->GetDev(),str,&(tex[i]))))
			return S_FALSE;
	}
	return S_OK;
}

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

HRESULT CSkybox::Render()
{
	CGDevice *pDev=CGDevice::GetInstance();
	LPDIRECT3DDEVICE9 dev=pDev->GetDev();
	dev->SetTransform(D3DTS_WORLD,&mat);
	dev->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
	dev->SetRenderState(D3DRS_ALPHABLENDENABLE,FALSE);
//	dev->SetRenderState(D3DRS_FILLMODE,D3DFILL_WIREFRAME);	
	dev->SetRenderState(D3DRS_ZFUNC,D3DCMP_LESS);
	dev->SetRenderState(D3DRS_ZENABLE,TRUE);

	dev->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP);
	dev->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP);

	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;
	for(int i=0;i<6;++i)
	{
		dev->SetTexture(0,tex[i]);
		if(FAILED(dev->DrawPrimitive(D3DPT_TRIANGLELIST,i*6,2)))
		return S_FALSE;
	}
	
	 
	
	
	dev->SetRenderState(D3DRS_ZENABLE,FALSE);
	return S_OK;
}

⌨️ 快捷键说明

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