Lines演示程序
#include "stdafx.h"
#include "d3d9.h"
#include "d3dx9.h"
#pragma comment(lib,"d3d9.lib")
#pragma comment(lib,"d3dx9.lib")
#define WINDOW_CLASS "UGPDX" //窗口类名称
#define WINDOW_NAME "Template" //窗口类标题
#define WINDOW_WIDTH 640
#define WINDOW_HEIGHT 480
bool InitializeD3D(HWND hWnd,bool fullscreen);//用于在程序中设置和创建Direct3D
bool InitializeObjects(); //用于创建显示程序中要绘制在屏幕上的物体
void RenderScene();//用于在屏幕上渲染已经绘制好的图形
void Shutdown(); //用于在程序退出时进行一些销毁工作
//direct3D object and device
LPDIRECT3D9 g_D3D=NULL;
LPDIRECT3DDEVICE9 g_D3DDevice=NULL;
//Matrices
D3DXMATRIX g_projection;
D3DXMATRIX g_ViewMatrix;
D3DXMATRIX g_WorldMatrix;
//vertex buffer to hold the geometry
LPDIRECT3DVERTEXBUFFER9 g_VertexBuffer=NULL;//定义了一个顶点缓存对象
//A structure for our custom vertex type
//定义场景中单个3D点的结构
struct stD3Dvertex
{
float x,y,z,rhw;//点的x,y,z坐标值
unsigned long color;//点的颜色
};
//our custom FVF,which describes our custom vertex structure
//定义顶点格式标示符,即灵活顶点格式
#define D3DFVF_VERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)
//窗口过程函数(系统自动调用,即回调函数)
LRESULT WINAPI MsgProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
break;
case WM_KEYUP:
if(wParam==VK_ESCAPE)
PostQuitMessage(0);
break;
}
return DefWindowProc(hWnd,msg,wParam,lParam);
}
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE prevhInst,LPSTR cmdLine,int
show)
{
//Register the window class
WNDCLASSEX wc={sizeof(WNDCLASSEX),CS_CLASSDC,MsgProc,0L,0L,
GetModuleHandle(NULL),NULL,NULL,NULL,NULL,
WINDOW_CLASS,NULL};
RegisterClassEx(&wc);
//create the application's window
HWND hWnd=CreateWindow(WINDOW_CLASS,WINDOW_NAME,WS_OVERLAPPEDWINDOW,
100,100,640,480,GetDesktopWindow(),NULL,
wc.hInstance,NULL);
//initialize Direct3D
if (InitializeD3D(hWnd,false))
{
ShowWindow(hWnd,SW_SHOWDEFAULT);
UpdateWindow(hWnd);
//enter the message loop
MSG msg;
ZeroMemory(&msg,sizeof(msg));//宏用0来填充一块内存区域
while(msg.message!=WM_QUIT)
{
if (PeekMessage(&msg,NULL,0U,0U,PM_REMOVE))//从消息队列中获取下一条消息
{
TranslateMessage(&msg);//对相关消息进行一些转换
DispatchMessage(&msg);//将转换后的消息发送给消息过程函数
}
else
//处理向屏幕绘制图像的代码部分
RenderScene();
}
}
//release any and all resources
Shutdown();
UnregisterClass("AppClass",wc.hInstance);//取消对窗口类的注册
return 0;
}
//设置写入要绘制的场景数据
bool InitializeObjects()
{
unsigned long col=D3DCOLOR_XRGB(255,255,255);//红,绿,蓝
//Fill in our structure to draw an object
//x,y,z,rhw,color
//objData结构体数组:设置所有点的数据
stD3Dvertex objData[]=
{
{420.0f,150.0f,0.5f,1.0f,col,},//第一个点的坐标及颜色
{420.0f,350.0f,0.5f,1.0f,col,},//第二个点的坐标及颜色
{220.0f,150.0f,0.5f,1.0f,col,},//第三个点的坐标及颜色
{220.0f,350.0f,0.5f,1.0f,col,},//第四个点的坐标及颜色
};
//create the vertex buffer
//创建顶点缓存
if (FAILED(g_D3DDevice->CreateVertexBuffer(sizeof(objData),0,
D3DFVF_VERTEX,D3DPOOL_DEFAULT,&g_VertexBuffer,
NULL)))
return false;
//fill the vertex buffer
void *ptr;
//锁定顶点缓存,以进行读写操作
if(FAILED(g_VertexBuffer->Lock(0,sizeof(objData),
(void**)&ptr,0)))
return false;
//将数据复制到该缓存中
memcpy(ptr,objData,sizeof(objData));
//对顶点缓存进行解锁
g_VertexBuffer->Unlock();
return true;
}
//绘制场景
void RenderScene()
{
//clear the back buffer
g_D3DDevice->Clear(0,NULL,D3DCLEAR_TARGET,
D3DCOLOR_XRGB(0,0,0),1.0f,0);
//begin the scene start rendering
g_D3DDevice->BeginScene();
//render object
//设置顶点数据流的输入源
g_D3DDevice->SetStreamSource(0,g_VertexBuffer,0,
sizeof(stD3Dvertex));
g_D3DDevice->SetFVF(D3DFVF_VERTEX);//设置顶点格式
g_D3DDevice->DrawPrimitive(D3DPT_LINELIST,0,2);//进行绘制
//end the scene.stop rendering
g_D3DDevice->EndScene();
//display the scene
//向显示器显示绘制的结果
g_D3DDevice->Present(NULL,NULL,NULL,NULL);
}
void Shutdown()
{
if(g_D3DDevice!=NULL) g_D3DDevice->Release();
if(g_D3D!=NULL) g_D3D->Release();
if(g_VertexBuffer!=NULL) g_VertexBuffer->Release();
g_D3DDevice=NULL;
g_D3D=NULL;
g_VertexBuffer=NULL;
}
bool InitializeD3D(HWND hWnd,bool fullscreen)
{
D3DDISPLAYMODE displayMode;
//create the D3D object
g_D3D=Direct3DCreate9(D3D_SDK_VERSION);
if(g_D3D==NULL) return false;
//get the desktop display mode
if(FAILED(g_D3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,
&displayMode)))
return false;
//set up the structure used to create the d3ddevice
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp,sizeof(d3dpp));
if (fullscreen)
{
d3dpp.Windowed=FALSE;
d3dpp.BackBufferWidth=640;
d3dpp.BackBufferHeight=480;
}
else
d3dpp.Windowed=TRUE;
d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat=displayMode.Format;
//create the D3Device
if(FAILED(g_D3D->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,hWnd,D3DCREATE_HARDWARE_VERTEXPROCESSING,
&d3dpp,&g_D3DDevice)))
return false;
//initialize any objects we will be displaying
if(!InitializeObjects()) return false;
return true;
}
Lines演示程序的更多相关文章
- Kafka Streams演示程序
本文从以下六个方面详细介绍Kafka Streams的演示程序: Step 1: 下载代码 Step 2: 启动kafka服务 Step 3: 准备输入topic并启动Kafka生产者 Step 4: ...
- 图形学基础教程02--顶点数据和SHADER寄存器 (带演示程序)
本文系原创,欢迎转载,请标明链接 http://www.cnblogs.com/luming1979 有问题欢迎加qq群讨论:366239605
- extracting lines bases a list using awk
extracting lines bases a list using awk awk 'NR==FNR{a[$1]=$0; next}($1 in a){print a[$1]"\n&qu ...
- Enum:Game of Lines(POJ 3668)
画直线 题目大意:给定一些点集,要你找两点之间的连线不平行的有多少条 数据量比较少,直接暴力枚举,然后放到set查找即可 #include <iostream> #include < ...
- 我的常用mixin 之 lines
/** * 最多显示 $lineCount 行 * lines * * example: * @include lines; * @include lines(3); */ @mixin lines( ...
- Direct3D11学习:(五)演示程序框架
转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 在此系列最开始的文章Direct3D11学习:(一)开发环境配置中,我们运行了一个例子BoxDemo,看过这个例 ...
- uva 1471 defence lines——yhx
After the last war devastated your country, you - as the king of the land of Ardenia - decided it wa ...
- POJ 1269 Intersecting Lines --计算几何
题意: 二维平面,给两条线段,判断形成的直线是否重合,或是相交于一点,或是不相交. 解法: 简单几何. 重合: 叉积为0,且一条线段的一个端点到另一条直线的距离为0 不相交: 不满足重合的情况下叉积为 ...
- POJ 1269 Intersecting Lines【判断直线相交】
题意:给两条直线,判断相交,重合或者平行 思路:判断重合可以用叉积,平行用斜率,其他情况即为相交. 求交点: 这里也用到叉积的原理.假设交点为p0(x0,y0).则有: (p1-p0)X(p2-p0) ...
随机推荐
- SQL中一种类似GUID值的函数实现
开发中会需要用到多列值组合成一个ID值的情况.比如做数据清洗的时候,一张表A有五列,分别是医院.科室.医生.职称.电话.面有许多重复的数据需要和另一个表B(和A列相同)做对比.清洗需要做两件事 ...
- Linux C 文件与目录3 文件读写
文件读写 文件读写是指从文件中读出信息或将信息写入到文件中.Linux文件读取可使用read函数来实现的,文件写入可使用write函数来实现.在进行文件写入的操作时,只是在文件的缓冲区中操作,可能没有 ...
- [磁盘管理与分区]——MBR破坏与修复
GURB的破坏和恢复(利用备份体恢复) (1)备份 # count= //对MBR中的引导程序部分作备份 (2)破坏MBR中的前446字节 # count= (3)恢复MBR中前446字节 ===&g ...
- [uwp开发]数据绑定那些事(2)
接着上一篇来侃. 二.实体到控件之间的绑定 这儿不知道用实体这个词恰不恰当,凑活着理解就行了.他可以是一个类实例,也可以是一个集合. 所以,相应的我们就引入两个Demo,第一个介绍用简单的类作为作为数 ...
- 对C++中高内聚,低耦合原则的理解
1.C语言是面向过程的语言,采用模块化的设计思想,每个功能划分为一个模块,是以函数为单位的. 2.C++是面向对象的语言,采用类设计的思想,因此C++中的模块是以类为基本单位的. 高内聚,低耦合能够使 ...
- UITableView设置cell为不可选?
本文选自StackOverflow(简称:SOF)精选问答汇总系列文章之一,本系列文章将为读者分享国外最优质的精彩问与答,供读者学习和了解国外最新技术.本文将为读者讲解UITableView如何设置单 ...
- 新 四则运算题目 C++
源代码: #include <stdlib.h>#include <iostream.h>#include <conio.h>#include <time.h ...
- xcode 运行报错 Command /usr/bin/codesign failed with exit code 1
因为更换了证书,导致在运行时报错 Command /usr/bin/codesign failed with exit code 1,查看了网上各种方法,最后发现以下两个值没有同步更新
- 随机产生30个两个两位数相加的题目(java)
编程思路: 1首先遇到JAVA产生随机数的问题. 2把产生的随机数设定范围. 3把划分的范围再分四个小区段分别对应四则运算法则加减乘除. 4打印输出. 题目源代码(Java) package coun ...
- Bootstrap的宽度和分辨率的差别
首先在bootstrap里面所有的样式并在pc上是根据px的单位来判断的,就是我们说的分辨率, @media(min-width:1200px){ ......里面的样式 } 那么就是说当你的屏幕放大 ...