#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利用顶点缓冲区绘制三角形相关推荐

  1. webgl渲染管线、缓冲区绘制三角形

    文章目录 前言 一.WebGL是什么 二.WebGL渲染管线 1 获取坐标元素 2 顶点着色器 3 图元装配 4 光栅化阶段 5 片元着色器 三. 绘制一个三角形 1 初始化一个HTML 2 创建画布 ...

  2. 利用Quartz2D-contex绘制三角形

    //获取上下文 CGContextRef context =UIGraphicsGetCurrentContext(); //线条加粗 CGContextSetLineWidth(context , ...

  3. 安卓学习笔记37:利用OpenGL ES绘制平面图形

    文章目录 零.学习目标 一.OpenGL概述 二.了解三维直角坐标系 三.案例演示 - 绘制三角形 (一)运行效果 (二)实现步骤 1.创建安卓应用[DrawTriangle] 2.建模:创建三角形类 ...

  4. 【Python入门】Turtle海龟库:利用海龟画笔绘制简单图形(1)

    利用海龟笔绘制三角形 功能要求 利用海龟笔画等边三角形,每次"前进100步".说明:绘制三角形,每次右转360°/3=120° 实例代码 import turtlet = turt ...

  5. WebGL(五)——WEBGL缓冲区,绘制三角形

    WebGL(五)--WEBGL缓冲区,绘制三角形 在 WebGL(四)-- 第一个WEBGL程序 一篇中,留了一个问题, 像下面这样的写法,字符串拼接真的很让人觉得麻烦: 关于改进: 缓冲区对象 缓冲 ...

  6. php绘制正方体,Three.js利用顶点绘制立方体方法

    本文主要给大家介绍了关于Three.js利用顶点绘制立方体的方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧.希望能帮助到大家. 前言 之前我们在学些WebGL基础的时候 ...

  7. python利用turtle库绘制正方形绕一个顶点旋转

    利用turtle库绘制正方形绕一个顶点旋转 程序如下 import turtle as t t.setup(600,600)#定义窗口尺寸 t.pensize(2.5) for i in range( ...

  8. 利用<canvas>标签绘制三角形。

    定义: HTML5 <canvas> 标签用于绘制图像. <canvas> 元素本身并没有绘制能力,须通过脚本来完成绘图. 例: <body><canvas ...

  9. Java面向对象编程:利用递归思想绘制“谢尔宾斯基地毯”和“谢尔宾斯基三角形”

    1.递归:在方法中调用本方法. 2.递归调用会无限循环下去,因此方法体中必须有结束方法的条件.返回值为void时通常写为: if (条件) {return; } 下面使用递归绘制"谢尔宾斯基 ...

  10. 利用MTALAB在坐标轴绘制三角形函数,或者绘制三角形

    利用MTALAB在坐标轴绘制三角形函数,或者绘制三角形 在MATLAB中我们通常需要在坐标中画出关于坐标原点对称的三角形,而其自己绘制三角形往往画出来一个图片,而不是与数据有关的三角形函数,这里利用M ...

最新文章

  1. 学术新星畅谈计算机视觉科研之路:视觉研究已经成熟,跨学科方法成为趋势...
  2. 工业级光纤收发器产品性能特点介绍
  3. CentOS 7 安装MongoDB 4.0
  4. Ineedle驱动方式dpdk测试性能
  5. SQL Server中数据透视表的Python脚本
  6. 隐藏网络计算机,XP电脑如何在网络中隐藏自己的计算机名称?
  7. Unity3D标准资源包下载与使用
  8. Java编译器和Java解释器---即时编译器和JAVA解释器
  9. 查看计算机温度指令,怎么看cpu温度(电脑CPU温度怎么查看?)
  10. 【python】rank函数
  11. tns:无监听 解决之一:由于 linstener.log 贮存过满导致
  12. 浙江大学-翁凯 C语言进阶,编程题
  13. 公众号运营引流月吸万粉之互推
  14. 机器学习应该了解的十大算法
  15. SpringBoot项目No qualifying bean of type ‘×××Mapper‘ available:的错误解决
  16. hqchartPy2指标选股 - KDJ选股
  17. Gromacs分子动力学模拟流程概述
  18. idc服务器排名戴尔型号,IDC排名或gartner的排名
  19. ES6 generator函数的详解
  20. 【计算机网络】第五话·物理层的底层设备❥超详解

热门文章

  1. 【SCOI 2005】王室联邦 树上分块?
  2. 利用snapper实现archlinux的系统还原
  3. 麦普奇医疗获得千万元A轮融资,投资方为达晨财智...
  4. 伽卡他卡学生端找不到计算机,伽卡他卡学生端
  5. python requests 登录接口场景使用案例
  6. Android-2-控件使用
  7. SpringCloud(part10)Spring Data 与JPA,MongoDB,Redis
  8. noip2011 公交观光
  9. 详述 MySQL 中的行级锁、表级锁和页级锁
  10. 火车进站(出栈顺序问题)