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

📄 skey.cpp

📁 D3D做的天空盒地面加上了纹理混合!写的非常清晰
💻 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 + -