D3D trianglefan (三角形扇区) 小例子
来源:互联网 发布:手机制作mv软件 编辑:程序博客网 时间:2024/06/06 03:01
trianglefan (三角形扇区) 程序
#pragma once#pragma comment(lib,"d3d9.lib")#pragma comment(lib,"d3dx9.lib")#include<d3d9.h>#include<d3dx9.h>//TODO: -1 custom vertexstruct CUSTOMVERTEX{float x;float y;float z;float rhw;};#define D3DFVF_CUSTOMVERTEX D3DFVF_XYZRHWHRESULT 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 d3dif(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_TRIANGLEFAN,0,4);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[]={{150.0f,150.0f,1.0f,1.0f},{50.0f,50.0f,1.0f,1.0f},{100.0f,50.0f,1.0f,1.0f},{250.0f,150.0f,1.0f,1.0f},{125.0f,250.0f,1.0f,1.0f},{50.0f,50.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. 由于三角形是填充的效果不是很明显,但是我知道这个不是四边形就是了。
0 0
- D3D trianglefan (三角形扇区) 小例子
- D3D 三角形带 小例子
- D3D 旋转三角形 小例子
- D3D triangle list(三角形列) 小例子
- D3D 两个三角形旋转 小例子
- D3D 线带 小例子
- D3D 线列 小例子
- D3D 光照和材料 小例子
- MFC D3D绘制三角形
- D3D学习002----画三角形
- D3D 纹理 例子程序
- D3D Mesh 例子程序
- D3D小笔记
- D3D 练习小框架
- D3D纹理小例
- 最简单的d3d例子
- D3D基本三角形面的绘制
- d3d实现一个旋转的三角形
- Ios 程序打包,安装流程
- PL/SQL表中date类型的字段用getString方法取出之后的格式化为日期的方法
- YII框架数据库的增删改查
- hdu 1999-不可摸数
- 百依百顺导致无法无天?
- D3D trianglefan (三角形扇区) 小例子
- 8月7日晚-技术沙龙: HTML5/ WebGL 3D 模型浏览技术
- 在ubuntu12.04中安装wine和source insight
- disruptor demo(三) 复杂一点的例子
- Android数据存储方式(一)文件读写操作
- Spring中的ApplicationContextAware使用
- hdu 1058 Humble Numbers(DP)
- 完整性约束(章节摘要)
- 编译器的编译基本过程