📄 skey.cpp
字号:
#include "Skey.h"
CSkey::CSkey(void):
m_pSkyBox(NULL)
,m_pDevice(NULL)
,m_ISB(NULL)
{
}
CSkey::~CSkey(void)
{
}
HRESULT CSkey::InitSkyBox(LPDIRECT3DDEVICE9 pDevice)
{
m_pDevice = pDevice;
D3DXCreateTextureFromFile(m_pDevice,"Clouds_PosY.dds",&m_Texture[0]);
D3DXCreateTextureFromFile(m_pDevice,"Clouds_NegX.dds",&m_Texture[1]);
D3DXCreateTextureFromFile(m_pDevice,"Clouds_NegX.dds",&m_Texture[2]);
D3DXCreateTextureFromFile(m_pDevice,"Clouds_NegX.dds",&m_Texture[3]);
D3DXCreateTextureFromFile(m_pDevice,"Clouds_NegX.dds",&m_Texture[4]);
HRESULT hr = S_OK;
SkyBox tvVertices[20] =
{//给顶点赋值必须严格的按照灵活顶点格式的顺序
//顶
//顶点1红色
{1000.0f, 1000.0f, 1000.0f, 1,1 ,},//0
{1000.0f, 1000.0f, -1000.0f, 1,0,},//1
{-1000.0f, 1000.0f, 1000.0f, 0,1,},//2
{-1000.0f, 1000.0f, -1000.0f, 0,0,},//3
//右面
{1000.0f, 1000.0f, 1000.0f, 0,0, }, //4
{1000.0f, -1000.0f, 1000.0f, 0,1,}, //5
{1000.0f, 1000.0f, -1000.0f, 1,0,},
{1000.0f, -1000.0f, -1000.0f, 1,1,},
//背面
{1000.0f, 1000.0f, 1000.0f, 1,0,},
{1000.0f, -1000.0f, 1000.0f, 1,1,},
{-1000.0f, 1000.0f, 1000.0f, 0,0,},
{-1000.0f, -1000.0f, 1000.0f, 0,1,},
//正面
{1000.0f, 1000.0f, -1000.0f, 0,0,},
{1000.0f, -1000.0f, -1000.0f, 0,1,},
{-1000.0f, 1000.0f, -1000.0f, 1,0,},
{-1000.0f, -1000.0f, -1000.0f, 1,1,},
//左面
{-1000.0f, 1000.0f, -1000.0f, 0,0,},
{-1000.0f, 1000.0f, 1000.0f, 1,0,},
{-1000.0f, -1000.0f, -1000.0f, 0,1,},
{-1000.0f, -1000.0f, 1000.0f, 1,1,},
};
// 创建顶点缓冲
if(FAILED(m_pDevice->CreateVertexBuffer(20 * sizeof(SkyBox), 0,
SkyBox::FVF_Flags, D3DPOOL_MANAGED, &m_pSkyBox, NULL )))
return hr;
// 设置顶点数据
SkyBox *pVertices = NULL;
//加锁和解锁过程
m_pSkyBox->Lock( 0, 20 * sizeof(SkyBox), (void**)&pVertices, 0 );
//拷贝内容到显卡显存中
memcpy(pVertices, tvVertices, sizeof(tvVertices));
m_pSkyBox->Unlock();
return hr;
}
void CSkey::Render(CCamera& cam)
{
m_pDevice->SetRenderState(D3DRS_LIGHTING,FALSE);
D3DXMATRIX matWorld,matWorld1,matWorld2;
D3DXMatrixIdentity(&matWorld);
D3DXMatrixTranslation(&matWorld,cam.m_EyePos.x,cam.m_EyePos.y,cam.m_EyePos.z);
/*D3DXMatrixRotationY(&matWorld1,GetTickCount()/600);
D3DXMatrixScaling(&matWorld2,0.05f,0.05f,0.05f);*/
//matWorld = matWorld1*matWorld2;
//D3DXMatrixTranslation(&matWorld,sin((float)timeGetTime())*5.0f,0,0);
//D3DXMatrixRotationY(&matWorld,timeGetTime()/600.0f);
m_pDevice->SetTransform(D3DTS_WORLD,&matWorld);
m_pDevice->SetStreamSource( 0, m_pSkyBox, 0, sizeof(SkyBox) );
m_pDevice->SetFVF( SkyBox::FVF_Flags );
/*m_pDevice->SetTexture(0,m_Texture[0]);
m_pDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 );
m_pDevice->SetTexture(0,m_Texture[1]);
m_pDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 4, 2 );
m_pDevice->SetTexture(0,m_Texture[2]);
m_pDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 8, 2 );
*/
m_pDevice->SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_LINEAR);
////放大纹理过滤时使用线性纹理过滤
m_pDevice->SetSamplerState(0,D3DSAMP_MAGFILTER,D3DTEXF_LINEAR);
for(int i=0;i<5;i++)
{
m_pDevice->SetTexture(0,m_Texture[i]);
m_pDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, i*4, 2 );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -