MFC D3D绘制三角形
2017-03-14 13:43
405 查看
添加头文件以及定义结构体
定义变量:
使用类向导添加WM_TIMER以及WM_CLOSE
在OnInitDialog()函数里面添加:
定时器函数:
退出:
运行效果:
#include <d3d9.h> #include <d3dx9.h> #pragma comment(lib, "d3d9.lib") #pragma comment(lib, "d3dx9.lib") struct CUSTOMVERTEX { FLOAT x, y, z, rhw; // The transformed position for the vertex DWORD color; // The vertex color }; #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)
定义变量:
IDirect3D9 *pDirect9; IDirect3DDevice9 *pDevice9; LPDIRECT3DVERTEXBUFFER9 m_VB;
使用类向导添加WM_TIMER以及WM_CLOSE
在OnInitDialog()函数里面添加:
pDirect9 = Direct3DCreate9(D3D_SDK_VERSION); if (pDirect9){ D3DCAPS9 Caps; pDirect9->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &Caps); int vp = 0; if (Caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT){ vp = D3DCREATE_HARDWARE_VERTEXPROCESSING; } else{ vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING; } D3DPRESENT_PARAMETERS dp; dp.BackBufferWidth = 640; //后备缓冲表面的宽度(以像素为单位) dp.BackBufferHeight = 480; //后备缓冲表面的高度(以像素为单位) dp.BackBufferCount = 1; //后备缓冲表面的数量,通常设为“1”,即只有一个后备表面 dp.BackBufferFormat = D3DFMT_A8R8G8B8; //后备缓冲表面的像素格式(如:32位像素格式为D3DFMT——A8R8G8B8) dp.MultiSampleType = D3DMULTISAMPLE_NONE; //全屏抗锯齿的类型,详情请看SDK dp.MultiSampleQuality = 0; //全屏抗锯齿的质量等级,详情看SDK dp.SwapEffect = D3DSWAPEFFECT_DISCARD; //指定表面在交换链中是如何被交换的,取D3DSWAPEFFECT枚举类型中的一个成员。其中D3DSWAPEFFECT_DISCARD是最有效的 dp.hDeviceWindow = m_hWnd; dp.Windowed = true; //设为true则为窗口模式,false则为全屏模式 dp.EnableAutoDepthStencil = true; //设为true,D3D将自动创建深度/模版缓冲 dp.AutoDepthStencilFormat = D3DFMT_D24S8; //深度/模版缓冲的格式 dp.Flags = 0; //一些附加特性,设为0或D3DPRESENTFLAG类型的一个成员。下列两个最常用的标志全部的标志请查阅SDK: dp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT; //刷新率,设定D3DPRESENT_RATE_DEFAULT使用默认刷新率 dp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; //属于D3DPRESENT成员,又有两个常用标志,其余请查SDK:D3DPRESENT_INTERVAL_IMMEDIATE——立即交换.D3DPRESENT_INTERVAL_DEFAULT——D3D选择交换速度,通常等于刷新率 HRESULT hr = pDirect9->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, m_hWnd, vp, &dp, &pDevice9); if (FAILED(hr)){ // try again using a 16-bit depth buffer dp.AutoDepthStencilFormat = D3DFMT_D16; hr = pDirect9->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, m_hWnd, vp, &dp, &pDevice9); if (FAILED(hr)){ pDirect9->Release(); // done with d3d9 object ::MessageBox(0, L"CreateDevice() - FAILED", 0, 0); return false; } } CUSTOMVERTEX Vertices[] = { { 150.0f, 50.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(255, 0, 0), }, // x, y, z, rhw, color { 250.0f, 250.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(0, 255, 0), }, { 50.0f, 250.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(0, 0, 255), }, }; pDevice9->CreateVertexBuffer(3 * sizeof(CUSTOMVERTEX), 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &m_VB, NULL); VOID* pVertices; m_VB->Lock(0, sizeof(Vertices), (void**)&pVertices, 0); memcpy(pVertices, Vertices, sizeof(Vertices)); m_VB->Unlock(); } SetTimer(0, 100, NULL);
定时器函数:
if (pDevice9){ pDevice9->BeginScene(); pDevice9->Clear(0, //要清除的矩形的个数 0, //指向一个矩形数组的首地址,如果该值为NULL,则将整个视口清除 D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, //D3DCLEAR_STENCIL,用Stencil 这个参数的值来清除模板缓存。 //D3DCLEAR_TARGET,用指定的颜色清除目标表面。 //D3DCLEAR_ZBUFFER,用指定的Z值清除深度缓存。 0x00FF0000, //指定颜色。 1.0f, //指定深度(0.0—1.0) 0 //指定模板缓存的值 ); pDevice9->SetStreamSource(0, //渲染数据流序号 m_VB, //进行绑定的顶点缓冲区指针 0, //进行绑定连接的渲染数据流的起始位置 sizeof(CUSTOMVERTEX) //渲染数据流中一个顶点所占的内存的大小 ); pDevice9->SetFVF(D3DFVF_CUSTOMVERTEX); //绘制三角形 pDevice9->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1); pDevice9->EndScene(); pDevice9->Present(NULL, //要展现的源矩形表面,一般为NUILL,表示展现整个源表面 NULL, //要展现的目标矩形表面,一般可以设为NULL,表示展现到整个窗口或全屏幕式下的这个屏幕 m_hWnd, //要展现的目的窗口的句柄,一般为NULL,表示展现到创建Direct3D设备指定的目标窗口 NULL //”脏区域”,一般设为NULL ); }
退出:
if (pDevice9){ pDevice9->Release(); pDevice9 = NULL; } if (pDirect9){ pDirect9->Release(); pDirect9 = NULL; } KillTimer(0);
运行效果:
相关文章推荐
- 在D3D中绘制一个三角形的一个完整过程(学习3D游戏笔记一)
- MFC绘制矩形、椭圆、三角形
- MFC D3D绘制中文
- 使用d3ddevice绘制基本三角形时要注意事项
- QT调用D3D绘制旋转三角形
- MFC绘制动态曲线,用双缓冲绘图技术防闪烁
- MFC下实现图形学之Hermite、Bezier曲线的绘制
- 使用directx绘制三角形
- css绘制透明三角形
- iOS 通过贝塞尔曲线绘制三角形
- MFC自制菜单(既绘制菜单的外观)
- 基于freeglut的使用入门 三角形及多个图像绘制
- OpenGL绘制三角形
- MFC 控件显示层次调整(叠放次序)和绘制控制问题
- 详解使用CSS3绘制矩形、圆角矩形、圆形、椭圆形、三角形、弧
- :target选择器 、三角形绘制、手风琴制作
- Android OpenGL入门示例:绘制三角形和正方形 (附完整源码)
- D3D中的字体绘制示例
- IOS绘制各种图形(三角形,圆形,矩形,椭圆等)
- CSS绘制三角形、爱心、对话框、钻石等方法