📄 cskybox.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 + -