DirectX 绘画图形

本文介绍了DirectX的基本概念,展示了如何使用DirectX进行图形绘制,包括设置设备、创建交换链、绘制基本形状等步骤,适合初学者入门。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//初始D3D环境
void initD3D(HWND hWnd);
//渲染场景
void RenderScene();
//初始化三角形定点
void initTriangleVertex();
//初始矩阵顶点
void initRectVertex();
//初始六边形顶点
void initHexagonVertex();
//初始化梯形
void initTrapezoidVertex();

LPD3DXMESH p_Tea = nullptr;//创建一个茶壶对象的指针

void CreateTeaModel();
void DrawTeaModel();
void SetUpVieW();
RECT rect;

LPDIRECT3D9 p_D3Dp = nullptr;//接口对象
LPDIRECT3DDEVICE9 p_Dev = nullptr; //设备对象

void initD3D(HWND hWnd)
{
	p_D3Dp = Direct3DCreate9(D3D_SDK_VERSION);//获取D3D接口对象

	D3DCAPS9 cps9;//设备信息对象

	int vp;

	p_D3Dp->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &cps9);
	
	if (cps9.DevCaps&D3DDEVCAPS_HWTRANSFORMANDLIGHT)
	{
		vp = D3DCREATE_HARDWARE_VERTEXPROCESSING;	//顶点硬件加速
	}
	else
	{
		vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;	//顶点软件加速
	}
	
	GetClientRect(hWnd,&rect);//获取窗口可绘区

	int w = rect.right - rect.left;

	int h = rect.bottom - rect.top;
	//设置D3D 详细属性
	D3DPRESENT_PARAMETERS d3dpp;
	ZeroMemory(&d3dpp, sizeof(d3dpp));
	d3dpp.BackBufferWidth = w;
	d3dpp.BackBufferHeight = h;
	d3dpp.BackBufferCount = 1;
	d3dpp.BackBufferFormat = D3DFORMAT::D3DFMT_A8R8G8B8;
	d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
	d3dpp.MultiSampleQuality = 0;
	d3dpp.SwapEffect = D3DSWAPEFFECT::D3DSWAPEFFECT_DISCARD;
	d3dpp.hDeviceWindow = hWnd;
	d3dpp.EnableAutoDepthStencil = TRUE;
	d3dpp.FullScreen_RefreshRateInHz = 0;
	d3dpp.Flags = 0;
	d3dpp.PresentationInterval = 0;
	d3dpp.Windowed = TRUE;
	d3dpp.AutoDepthStencilFormat = D3DFORMAT::D3DFMT_D16;
	p_D3Dp->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, vp, &d3dpp, &p_Dev);
	if (SUCCEEDED(p_Dev))
	{
		OutputDebugString(L"配置完成 \n");
		initTriangleVertex();
		initRectVertex();
		initHexagonVertex();
		initTrapezoidVertex();
		CreateTeaModel();
	}
	else
	{
		OutputDebugString(L"配置失败 \n");
	}
}
struct  stSetVertex
{
	float x, y, z, w;
	D3DCOLOR color;
};

#define FVF_SETVERTEX D3DFVF_XYZRHW|D3DFVF_DIFFUSE
#define PI 3.1415926;
LPDIRECT3DVERTEXBUFFER9 p_VBTriangle; //三角形缓存

LPDIRECT3DVERTEXBUFFER9 p_VBRect = nullptr; //矩形顶点缓存

LPDIRECT3DVERTEXBUFFER9 p_VBHexagon = nullptr;//六边形顶点缓存

LPDIRECT3DVERTEXBUFFER9 p_Trapezoid = nullptr;//梯形顶点缓存

int verNum = 6;
int radius = 100;
int _x =800;
int _y = 400;

void initTriangleVertex
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值