D3D9利用顶点缓冲区绘制三角形
#include <d3d9.h>
//附加依赖项 d3d9.lib//利用顶点缓冲区绘制三角形
const TCHAR szClassName[MAX_PATH] = TEXT("冒险岛class");
const TCHAR szTilteName[MAX_PATH] = TEXT("冒险岛");LPDIRECT3D9 g_pD3D = NULL; //Direct3D对象
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; //Direct3D设备对象
LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL; //顶点缓冲区对象struct CUSTOMVERTEX
{FLOAT x, y,z, rhw;//DWORD color;
};#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW| D3DFVF_DIFFUSE)//顶点格式HRESULT Init3D(HWND hwnd)
{if(NULL ==(g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))return E_FAIL;D3DPRESENT_PARAMETERS d3dpp;ZeroMemory(&d3dpp, sizeof(d3dpp));d3dpp.Windowed = TRUE; //是否窗口化d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;if (FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL, hwnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp, &g_pd3dDevice)))return E_FAIL;return S_OK;}HRESULT InitVB()
{CUSTOMVERTEX vertices[] ={{100.0f, 400.0f, 0.5f, 1.0f, 0xffff0000},{300.0f, 50.f, 0.5f, 1.0f, 0xff00ff00},{500.0f, 400.0f, 0.5f, 1.0f, 0xff0000ff},};HRESULT hr = g_pd3dDevice->CreateVertexBuffer(sizeof(CUSTOMVERTEX) * 3,0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL);if (FAILED(hr))return E_FAIL;VOID* pVertices;if (FAILED(g_pVB->Lock(0, sizeof(vertices), (void**)&pVertices, 0)))return E_FAIL;memcpy(pVertices, vertices, sizeof(vertices));g_pVB->Unlock();return S_OK;}
VOID Cleanup()
{//释放内存if (g_pd3dDevice != NULL)g_pd3dDevice->Release();if (g_pD3D != NULL)g_pD3D->Release();if (g_pVB != NULL)g_pVB->Release();
}VOID Render()
{//清空后台缓冲区g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(45, 50, 170), 1.0f, 0);//开始在后台缓存区绘制图形if (SUCCEEDED(g_pd3dDevice->BeginScene())){//在后台缓冲区绘制图形g_pd3dDevice->SetStreamSource(0, g_pVB, 0, sizeof(CUSTOMVERTEX));g_pd3dDevice->SetFVF(D3DFVF_CUSTOMVERTEX);g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);g_pd3dDevice->EndScene();//在后台缓冲区结束绘制图形}//将在后台缓冲区绘制的图形提交到前台缓冲区显示g_pd3dDevice->Present(NULL, NULL, NULL, NULL);}LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{switch (msg){case WM_DESTROY:Cleanup();PostQuitMessage(0);return 0;case WM_PAINT:Render();ValidateRect(hwnd, NULL);return 0;}return DefWindowProc(hwnd, msg, wParam, lParam);
}
int WINAPI wWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow)
{WNDCLASSEX wc;wc.cbSize = sizeof(WNDCLASSEX);wc.style = CS_CLASSDC;wc.lpfnWndProc = WndProc;wc.cbClsExtra = 0;wc.cbWndExtra = 0;wc.hInstance = GetModuleHandle(NULL);wc.hIcon = NULL;wc.hCursor = NULL;wc.hbrBackground = NULL;wc.lpszMenuName = NULL;wc.lpszClassName = szClassName;wc.hIconSm = NULL;//注册窗口类if (!RegisterClassEx(&wc))MessageBox(NULL, TEXT("注册窗口类失败"), NULL, NULL);//创建窗口HWND hwnd = CreateWindow(szClassName, szTilteName,WS_OVERLAPPEDWINDOW,200, 100, 600, 500,NULL, NULL, hInstance, 0);if (SUCCEEDED(Init3D(hwnd))){if (SUCCEEDED(InitVB())){ShowWindow(hwnd, SW_SHOWDEFAULT);UpdateWindow(hwnd);MSG msg;ZeroMemory(&msg, sizeof(msg));while (msg.message != WM_QUIT){if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {TranslateMessage(&msg);DispatchMessage(&msg);}else{Render();}}}}UnregisterClass(szClassName, hInstance);return 0;
}
抄的代码
效果图
记得在此处添加附加依赖项
D3D9利用顶点缓冲区绘制三角形相关推荐
- webgl渲染管线、缓冲区绘制三角形
文章目录 前言 一.WebGL是什么 二.WebGL渲染管线 1 获取坐标元素 2 顶点着色器 3 图元装配 4 光栅化阶段 5 片元着色器 三. 绘制一个三角形 1 初始化一个HTML 2 创建画布 ...
- 利用Quartz2D-contex绘制三角形
//获取上下文 CGContextRef context =UIGraphicsGetCurrentContext(); //线条加粗 CGContextSetLineWidth(context , ...
- 安卓学习笔记37:利用OpenGL ES绘制平面图形
文章目录 零.学习目标 一.OpenGL概述 二.了解三维直角坐标系 三.案例演示 - 绘制三角形 (一)运行效果 (二)实现步骤 1.创建安卓应用[DrawTriangle] 2.建模:创建三角形类 ...
- 【Python入门】Turtle海龟库:利用海龟画笔绘制简单图形(1)
利用海龟笔绘制三角形 功能要求 利用海龟笔画等边三角形,每次"前进100步".说明:绘制三角形,每次右转360°/3=120° 实例代码 import turtlet = turt ...
- WebGL(五)——WEBGL缓冲区,绘制三角形
WebGL(五)--WEBGL缓冲区,绘制三角形 在 WebGL(四)-- 第一个WEBGL程序 一篇中,留了一个问题, 像下面这样的写法,字符串拼接真的很让人觉得麻烦: 关于改进: 缓冲区对象 缓冲 ...
- php绘制正方体,Three.js利用顶点绘制立方体方法
本文主要给大家介绍了关于Three.js利用顶点绘制立方体的方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧.希望能帮助到大家. 前言 之前我们在学些WebGL基础的时候 ...
- python利用turtle库绘制正方形绕一个顶点旋转
利用turtle库绘制正方形绕一个顶点旋转 程序如下 import turtle as t t.setup(600,600)#定义窗口尺寸 t.pensize(2.5) for i in range( ...
- 利用<canvas>标签绘制三角形。
定义: HTML5 <canvas> 标签用于绘制图像. <canvas> 元素本身并没有绘制能力,须通过脚本来完成绘图. 例: <body><canvas ...
- Java面向对象编程:利用递归思想绘制“谢尔宾斯基地毯”和“谢尔宾斯基三角形”
1.递归:在方法中调用本方法. 2.递归调用会无限循环下去,因此方法体中必须有结束方法的条件.返回值为void时通常写为: if (条件) {return; } 下面使用递归绘制"谢尔宾斯基 ...
- 利用MTALAB在坐标轴绘制三角形函数,或者绘制三角形
利用MTALAB在坐标轴绘制三角形函数,或者绘制三角形 在MATLAB中我们通常需要在坐标中画出关于坐标原点对称的三角形,而其自己绘制三角形往往画出来一个图片,而不是与数据有关的三角形函数,这里利用M ...
最新文章
- 学术新星畅谈计算机视觉科研之路:视觉研究已经成熟,跨学科方法成为趋势...
- 工业级光纤收发器产品性能特点介绍
- CentOS 7 安装MongoDB 4.0
- Ineedle驱动方式dpdk测试性能
- SQL Server中数据透视表的Python脚本
- 隐藏网络计算机,XP电脑如何在网络中隐藏自己的计算机名称?
- Unity3D标准资源包下载与使用
- Java编译器和Java解释器---即时编译器和JAVA解释器
- 查看计算机温度指令,怎么看cpu温度(电脑CPU温度怎么查看?)
- 【python】rank函数
- tns:无监听 解决之一:由于 linstener.log 贮存过满导致
- 浙江大学-翁凯 C语言进阶,编程题
- 公众号运营引流月吸万粉之互推
- 机器学习应该了解的十大算法
- SpringBoot项目No qualifying bean of type ‘×××Mapper‘ available:的错误解决
- hqchartPy2指标选股 - KDJ选股
- Gromacs分子动力学模拟流程概述
- idc服务器排名戴尔型号,IDC排名或gartner的排名
- ES6 generator函数的详解
- 【计算机网络】第五话·物理层的底层设备❥超详解