//初始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
DirectX 绘画图形
最新推荐文章于 2022-03-24 21:54:32 发布