D3D triangle list(三角形列) 小样例
画三角形列的样例程序
#pragma once #pragma comment(lib,"d3d9.lib")
#pragma comment(lib,"d3dx9.lib") #include<d3d9.h>
#include<d3dx9.h> //TODO: -1 custom vertex
struct CUSTOMVERTEX
{
float x;
float y;
float z;
float rhw;
}; #define D3DFVF_CUSTOMVERTEX D3DFVF_XYZRHW HRESULT InitD3D(HWND hWnd);
void CleanUp();
void Render();
LRESULT CALLBACK MsgProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam);
HRESULT InitD3DVertexBuffer(); //TODO: 0 declare d3d variables.
LPDIRECT3D9 g_pd3d = NULL;
LPDIRECT3DDEVICE9 g_pd3dDevice9 = NULL;
LPDIRECT3DVERTEXBUFFER9 g_pd3dVB = NULL; //application entry point.
INT WINAPI wWinMain(
HINSTANCE,
HINSTANCE,
LPWSTR,
INT)
{
//initialize wnd class.
WNDCLASSEX wcex;
ZeroMemory(&wcex,sizeof(wcex));
wcex.cbSize=sizeof(wcex);
wcex.hInstance=GetModuleHandle(NULL);
wcex.lpfnWndProc=MsgProc;
wcex.lpszClassName=L"Self001";
wcex.style=CS_CLASSDC; //register wnd class.
RegisterClassEx(&wcex); //create window.
HWND hWnd=CreateWindowEx(
WS_EX_OVERLAPPEDWINDOW,
L"Self001",
L"Self001 Window",
WS_OVERLAPPEDWINDOW,
100,
100,
300,
300,
NULL,
NULL,
wcex.hInstance,
NULL); //init d3d
if(SUCCEEDED(InitD3D(hWnd)))
{
//show window.
ShowWindow(hWnd,SW_SHOWDEFAULT);
UpdateWindow(hWnd); //message loop.
MSG msg;
ZeroMemory(&msg,sizeof(msg));
while(msg.message != WM_QUIT)
{
if(PeekMessage(&msg,hWnd,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
Render();
}
}
} //unregister wnd class.
UnregisterClass(L"Self001",wcex.hInstance); return 0;
} //init d3d.
HRESULT InitD3D(HWND hWnd)
{
//create d3d.
g_pd3d=Direct3DCreate9(D3D_SDK_VERSION);
if(g_pd3d == NULL)
{
return E_FAIL;
} //initialize d3d present parameters.
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp,sizeof(d3dpp));
d3dpp.Windowed=TRUE;
d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat=D3DFMT_UNKNOWN; //create d3d device.
if(FAILED(g_pd3d->CreateDevice(
D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp,
&g_pd3dDevice9)))
{
return E_FAIL;
} //init vertex buffer.
if(FAILED(InitD3DVertexBuffer()))
{
return E_FAIL;
} return S_OK;
} //clean up d3d.
void CleanUp()
{
//TODO: 3 clean up d3d.
if(g_pd3dVB != NULL)
{
g_pd3dVB->Release();
} //release device.
if(g_pd3dDevice9 != NULL)
{
g_pd3dDevice9->Release();
} //release d3d.
if(g_pd3d != NULL)
{
g_pd3d->Release();
}
} //render the scene.
void Render()
{
//clear target.
g_pd3dDevice9->Clear(
0,
NULL,
D3DCLEAR_TARGET,
D3DCOLOR_XRGB(0,0,0),
1.0f,
0); //draw primitive.
if(SUCCEEDED(g_pd3dDevice9->BeginScene()))
{
//TODO: 2 render d3d.
g_pd3dDevice9->SetStreamSource(0,g_pd3dVB,0,sizeof(CUSTOMVERTEX));
g_pd3dDevice9->SetFVF(D3DFVF_CUSTOMVERTEX);
g_pd3dDevice9->DrawPrimitive(D3DPT_TRIANGLELIST,0,2); g_pd3dDevice9->EndScene();
} //present sence.
g_pd3dDevice9->Present(NULL,NULL,NULL,NULL);
} //window message handler.
LRESULT CALLBACK MsgProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY:
CleanUp();
return 0L;
} return DefWindowProc(hWnd,msg,wParam,lParam);
} //init d3d vertex buffer.
HRESULT InitD3DVertexBuffer()
{
//TODO: 1 init vertex buffer data.
//create vertex data.
CUSTOMVERTEX vertices[]=
{
{50.0f,250.0f,1.0f,1.0f},
{50.0f,50.0f,1.0f,1.0f},
{100.0f,250.0f,1.0f,1.0f},
{150.0f,250.0f,1.0f,1.0f},
{150.0f,50.0f,1.0f,1.0f},
{250.0f,250.0f,1.0f,1.0f}
}; //create vertex buffer.
if(FAILED(g_pd3dDevice9->CreateVertexBuffer(
sizeof(vertices),
0,
D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT,
&g_pd3dVB,
NULL)))
{
return E_FAIL;
} //fill vertex buffer.
void* pVertices=NULL;
if(FAILED(g_pd3dVB->Lock(0,sizeof(vertices),&pVertices,0)))
{
return E_FAIL;
} memcpy(pVertices,vertices,sizeof(vertices)); g_pd3dVB->Unlock(); return S_OK;
}
执行结果
1. 注意顶点总数应该是能被3整除
2. 每个三角形的顶点顺序是顺时针的,否则绘制不出来。
D3D triangle list(三角形列) 小样例的更多相关文章
- Spring DI模式 小样例
今儿跟同事讨论起来spring早期的,通过大篇幅xml的配置演变到今天annotation的过程,然后随手写了个小样例,感觉还不错,贴到这里留个纪念. 样例就是用JAVA API的方式, ...
- SpringMVC+Spring+Hibernate的小样例
Strusts2+Spring+Hibernate尽管是主流的WEB开发框架,可是SpringMVC有越来越多的人使用了.确实也很好用.用得爽! 这里实现了一个SpringMVC+Spring+Hib ...
- 使用Dagger2创建的第一个小样例
将Dagger系列的咖啡壶样例再做一下简化,作为Dagger2的入门的第一个小样例. 场景描写叙述:有一个电水壶,它使用一个加热器来烧水.电水壶具备的功能有:開始加热(on方法),结束加热(off方法 ...
- D3D 光照和材料 小样例
1.实现一个旋转的圆柱体,体现d3d光照效果 2.程序实现 #pragma once #pragma comment(lib,"winmm.lib") #pragma commen ...
- D3D 线列 小样例
画两条线 #pragma once #pragma comment(lib,"d3d9.lib") #pragma comment(lib,"d3dx9.lib" ...
- LeetCode Pascal's Triangle Pascal三角形
题意:给一个数字,返回一个二维数组,包含一个三角形. 思路:n=0.1.2都是特例,特别处理.3行以上的的头尾都是1,其他都是依靠上一行的两个数.具体了解Pascal三角形原理. class Solu ...
- hdu 1451 Area in Triangle(计算几何 三角形)
Given a triangle field and a rope of a certain length (Figure-1), you are required to use the rope t ...
- 简单的ADO.NET连接数据小样例
ADO.NET连接数据库的样例如下: using System; using System.Collections.Generic; using System.ComponentModel; usin ...
- 利用jxl读取excel合并的单元格的一个小样例
工作中我们可能要把Excel文件的记录保存到数据库, 今天我用jxl读取Excel文件时遇到了合并格的问题,记录例如以下: 如Excel文件例如以下: watermark/2/text/aHR0cDo ...
随机推荐
- [Apple开发者帐户帮助]三、创建证书(1)证书概述
在开发应用程序的过程中,您将创建不同的证书类型,以便在不同的上下文中使用.您将为iOS,tvOS和watchOS应用程序使用相同的证书集,并为macOS应用程序使用不同的证书集.您将使用开发证书在设备 ...
- Android插件化原理解析——Hook机制之动态代理
转自 http://weishu.me/2016/01/28/understand-plugin-framework-proxy-hook/ 使用代理机制进行API Hook进而达到方法增强是框架的常 ...
- MySQL学习笔记之右连接
MySQL的右连接 #右连接,以右表为基表 select course.stuid,course.stuname,sex,course,city from class1 right join cour ...
- 微信小程序特殊字符转义方法——&转义&等等
在我编写公司小程序的过程中,有一次在网页端添加了一张图片,结果在小程序端访问失败了,究其原因,竟然是因为该图片名称中有一个“&”符号,网页端添加后,自动转义成了“&”存储到了数据库.当 ...
- 前端性能优化---DOM操作
小结 1缓存DOM对象 场景:缓存DOM对象的方式也经常被用在元素的查找中,查找元素应该是DOM操作中最频繁的操作了,其效率优化也是大头.在一般情况下,我们会根据需要,将一些频繁被查找的元素缓存起来, ...
- vegas pro 15解决导入的视频和音频有噪声问题,亲测可行
中文步骤: 按住Shift->点击选项->首选项,松开Shift 点击右上角"内部"选项卡,在最下面的搜索栏输入SO4 找到第二项Enable So4 Compound ...
- String类面试坑题
1.面试坑题F:\SHJT\JavaWorkspace\JavaSE\workspace\day13ezra\src\cn\itcast\sh\classcode\BTStringLastIndexO ...
- 如何将一个已有的项目托管到github或是码云上?git的配置
场景一:已有的一个项目,要把它托管到Git上去,步骤和方法如下: 方法一: ①在工程的路径下 : git init 建一个裸仓库. ②远程仓库地址 :将本地的仓库和远程仓库关联 git remote ...
- java源码
Java泛型中的标记符含义: K - Key(键) V - Value(值) E - Element (在集合中使用,因为集合中存放的是元素) T - Type(Java 类,可做泛型) N - Nu ...
- Day 23 类的继承,派生,组合,菱形继承,多态与多态性
类的继承 继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类 继承的特性是:子类会遗传父类的属性 继承是类与类之间的关系 为什么用继承 使用继承可以减少代码的冗余 对象的继承 python中 ...