MFC d3d纹理贴图

包含头文件

#include <windows.h>
#include <d3d9.h>
#include <d3dx9.h>
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")

定义结构体
struct MyStruct
{
	float x, y, z;
	DWORD dwColor;
	FLOAT       tu, tv;//纹理坐标
};

定义变量:

IDirect3D9 *pDirect9;
	IDirect3DDevice9 *pDevice9;
	IDirect3DVertexBuffer9 *m_pVB;
	IDirect3DTexture9 *pTexture9;

使用类向导添加WM_CLOSE,WM_TIMER.

在OnInitDialog()里面添加

pDirect9 = Direct3DCreate9(D3D_SDK_VERSION);
	if (pDirect9){
		D3DPRESENT_PARAMETERS dp;
		memset(&dp, 0, sizeof(dp));
		dp.Windowed = TRUE;
		dp.SwapEffect = D3DSWAPEFFECT_DISCARD;
		dp.BackBufferFormat = D3DFMT_UNKNOWN;
		dp.EnableAutoDepthStencil = TRUE;
		dp.AutoDepthStencilFormat = D3DFMT_D16;

		pDirect9->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, m_hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &dp, &pDevice9);

		// Turn off culling 
		pDevice9->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);

		// Turn off D3D lighting  
		pDevice9->SetRenderState(D3DRS_LIGHTING, FALSE);

		// Turn on the zbuffer  
		pDevice9->SetRenderState(D3DRS_ZENABLE, TRUE);

		MyStruct Vertices[] =
		{
			{ -1.0f, -1.0f, 0.0f, D3DCOLOR_XRGB(255, 255, 255), 0, 1 }, // x, y, z, rhw, color,tu,tv  
			{ -1.0f, 1.0f, 0.0f, D3DCOLOR_XRGB(255, 255, 255), 0, 0 },
			{ 1.0f, -1.0f, 0.0f, D3DCOLOR_XRGB(255, 255, 255), 1, 1 },
			{ 1.0f, 1.0f, 0.0f, D3DCOLOR_XRGB(255, 255, 255), 1, 0 },
		};

		HRESULT hr = D3DXCreateTextureFromFile(pDevice9, L"F:\\nn\\1.jpg", &pTexture9);
		pDevice9->CreateVertexBuffer(4 * sizeof(MyStruct), 0, D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1, D3DPOOL_DEFAULT, &m_pVB, NULL);

		void *pData;
		m_pVB->Lock(0, sizeof(Vertices), &pData, 0);
		memcpy(pData, Vertices, sizeof(Vertices));
		m_pVB->Unlock();
	}

	SetTimer(0, 100, NULL);

定时器映射函数:

if (pDevice9){
		pDevice9->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0x00FF0000, 1.0f, 0);
		pDevice9->BeginScene();

		pDevice9->SetTexture(0, pTexture9);
		pDevice9->SetStreamSource(0, m_pVB, 0, sizeof(MyStruct));
		pDevice9->SetFVF(D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1);
		pDevice9->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);

		pDevice9->EndScene();
		pDevice9->Present(0, NULL, m_hWnd, NULL);
	}

退出映射函数:

if (pDirect9){
		pDirect9->Release();
	}
	if (pDevice9){
		pDevice9->Release();
	}
	if (pTexture9){
		pTexture9->Release();
	}
	KillTimer(0);

运行效果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值