D3D 线带 小例子

D3D 线带图元程序

#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_LINESTRIP,0,3);

		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[4]=
	{
		{50.0f,50.0f,1.0f,1.0f},
		{50.0f,250.0f,1.0f,1.0f},
		{250.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;
}

程序结果

D3D 线带 小例子

时间: 2024-07-30 07:56:44

D3D 线带 小例子的相关文章

D3D 旋转三角形 小例子

一个旋转的三角形,主要练习坐标变换. #pragma once #pragma comment(lib,"winmm.lib") #pragma comment(lib,"d3d9.lib") #pragma comment(lib,"d3dx9.lib") #include <d3d9.h> #include <d3dx9.h> #include <strsafe.h> #pragma warning(dis

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 D3D

D3D 两个三角形旋转 小例子

两个三角形围绕Y轴旋转. 程序 #pragma once #pragma comment(lib,"winmm.lib") #pragma comment(lib,"d3d9.lib") #pragma comment(lib,"d3dx9.lib") #include<d3d9.h> #include<d3dx9.h> struct CUSTOMVERTEX { FLOAT x,y,z; DWORD color; };

D3D 光照和材料 小例子

1.实现一个旋转的圆柱体,体现d3d光照效果 2.程序实现 #pragma once #pragma comment(lib,"winmm.lib") #pragma comment(lib,"d3d9.lib") #pragma comment(lib,"d3dx9.lib") #include<d3d9.h> #include<d3dx9.h> //自定义顶点格式 struct CUSTOMVERTEX { D3DXV

D3D 线列 小例子

画两条线 #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_CU

COM1 --- 小例子

测试环境: VS2008 + SP1 补丁     XP 32位系统 1.启动VS2008,新建项目,如图 2.再次新建项目,如图 需要注意的就是  在 Solution 那里 选择 Add to Solution ,同时,上面的 Location 会自动定位到当前的解决方案里.这个项目,直接点击Finish 结束就行了. 3.将视图切换到文件视图(View 菜单中的 Solution Explorer) ,如图 可以看到这里面有 类似 文件夹的 东东,,它们是 Filter  就是将某一些相同

JavaFX 二 First Blood(第一个小例子,拿起武器冲啊~)

万万没想到,上次写的JavaFX 一,回应那么激烈,令我有点小激动啊,这里感谢各位这么热心,大家的支持就是我最大的动力,让我们共同进步,共同学习.话题回归,今天我想给大家讲讲JavaFX的第一个小例子,顺便通过例子,给大家讲讲一些关于JavaFX的代码编写的一些心得体会.不多废话,好戏即将开始...... 上次说到新手开发是先Fxml,再写代码,我们先来看看如何用JavaFX Scene Builder 2.0设计我们想要的界面,首先,我介绍下工具界面的一些小知识, 首先我们认识下这个FX的可视

php+jquery+ajax+json简单小例子

直接贴代码: Php代码: <html> <title>php+jquery+ajax+json简单小例子</title> <?php header("Content-Type:text/html;charset=utf-8"); ?> <head> <script type="text/javascript" src="http://code.jquery.com/jquery.min.j

Python小程序练习二之装饰器小例子

Python小程序练习二之装饰器小例子 装饰器: 装饰器实际上就是为了给某程序增添功能,但该程序已经上线或已经被使用,那么就不能大批量的修改源代码,这样是不科学的也是不现实的,因为就产生了装饰器,使得其满足: 1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式 那么根据需求,同时满足了这两点原则,这才是我们的目的. 装饰器的原则组成: < 函数+实参高阶函数+返回值高阶函数+嵌套函数+语法糖 = 装饰器 > 错误例子: 1.1Decorators.py 1 # The aut