资源简介

该程序示例包含了一些基本几何体的绘制方法,包括网格、立方体、圆柱体、球。 网格在水面渲染、地形渲染中应用十分广泛,因此学习其相关的绘制方法很有用。圆柱和球有着相似的绘制方法,通过指定的精细等级(slice和stack)来绘制。示例代码包含了所有的绘制算法,以及通过一个程序来展示绘制效果。

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;

struct Vertex
{
XMFLOAT3 pos;
XMFLOAT4 color;
};

class GeoDraw: public WinApp
{
public:
GeoDraw(HINSTANCE hInst std::wstring title = L“D3D11基本几何体绘制“ int width = 640 int height = 480);
~GeoDraw();

bool Init(); //重写
bool Update(float delta); //必须重写
bool Render(); //必须重写

//重写鼠标操作函数
void onmousedown(WPARAM btnState int x int y);
void onmouseup(WPARAM btnState int x int y);
void onmousemove(WPARAM btnState int x int y);

private:
//读取Effect文件,创建Effect接口
bool BuildFX();
//创建InputLayout
bool BuildInputLayout();
//创建顶点、索引缓冲区
bool BuildBuffers();

private:
ID3D11InputLayout *m_inputLayout;

//顶点、索引缓冲区
//在这个程序中,我们把所有图形的顶点/索引放在一个缓冲区中
//在绘制相应图形时,指定通过该图形在缓冲区中的起始位置和索引个数来找到对应的缓冲区位置
ID3D11Buffer *m_VB;
ID3D11Buffer *m_IB;

ID3DX11Effect *m_fx;
ID3DX11EffectMatrixVariable *m_fxWorldViewProj;

//该程序中绘制的几种几何图形:网格、立方体、球、圆柱
GeoGen::MeshData m_grid;
GeoGen::MeshData m_box;
GeoGen::MeshData m_sphere;
GeoGen::MeshData m_cylinder;

//每个几何体在顶点、索引缓冲区中的起始位置
UINT m_gridVStart m_gridIStart;
UINT m_boxVStart m_boxIStart;
UINT m_sphereVStart m_sphereIStart;
UINT m_cylinderVStart m_cylinderIStart;

//每个几何体的世界变换矩阵:
//网格
XMFLOAT4X4 m_gridWorld;
//立方体
XMFLOAT4X4 m_boxWorld;
//5个球
XMFLOAT4X4 m_sphereWorld[5];
//4个圆柱
XMFLOAT4X4 m_cylinderWorld[4];

//视角矩阵和投影矩阵
XMFLOAT4X4 m_view;
XMFLOAT4X4 m_proj;

POINT m_lastPos; //上一次鼠标位置,用于跟踪鼠标位移

float m_theta m_phy; //用于控制相机位置(相机处于一个球面上)
float m_radius; //相机所处球面半径
};

GeoDraw::GeoDraw(HINSTANCE hInst std::wstring title int width int height):WinApp(hInsttitlewidthheight)
m_inputLayout(NULL)
m_VB(NULL)
m_IB(NULL)
m_fx(NULL)
m_fxWorldViewProj(NULL)
m_theta(XM_PI*1.5f)
m_phy(XM_PI*0.4f)
m_radius(20.f)
{
//在这里初始化各个物体的世界变换矩阵
//网格
XMMATRIX gridWorld = XMMatrixIdentity();
XMStoreFloat4x4(&m_gridWorldgridWorld);
//立方体
XMMATRIX boxWorld = XMMatrixTranslation(0.f0.75f0.f);
XMStoreFloat4x4(&m_boxWorldboxWorld);
//第5个球
XMMATRIX sphereWorld = XMMatrixTranslation(0.f3.5f0.f);
XMStoreFloat4x4(&m_sphereWorld[4]sphereWorld);
//4个圆柱和4个球(位于4个对称点上)
for(UINT i=0; i<2; ++i)
{
for(UINT j=0; j<2; ++j)
{
XMMATRIX cylinderWorld = XMMatrixTranslation(-5.f+i*10.f1.f-5.f+j*10.f);
XMStoreFloat4x4(&m_cylinderWorld[i*2+j]cylinderWorld);
XMMATRIX sphereWorld = XMMatrixTranslation(-5.f+i*10.f4.f-5.f+j*10.f);
XMStoreFloat4x4(&m_sphereWorld[i*2+j]sphereWorld);
}
}
}

GeoDraw::~GeoDraw()
{
SafeRelease(m_inputLayout);
SafeRelease(m_IB);
SafeRelease(m_VB);
SafeRelease(m_fx);
}

bool GeoDraw::Init()
{
//这里重写了父类中的Init()函数
//WinApp::Init(),这句话必须加上
if(!WinApp::Init())
return false;

//这后面添加程序所需的初始化
if(!BuildFX())
retur

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2012-12-23 20:33  D3D11基本几何体绘制\
     目录           0  2012-12-23 20:30  D3D11基本几何体绘制\Common\
     文件          24  2012-12-22 20:53  D3D11基本几何体绘制\Common\AppUtil.cpp
     文件         924  2012-12-23 08:37  D3D11基本几何体绘制\Common\AppUtil.h
     文件    15088652  2012-11-12 01:02  D3D11基本几何体绘制\Common\Effects11.lib
     文件     5698762  2012-11-12 01:01  D3D11基本几何体绘制\Common\Effects11d.lib
     文件       13662  2012-12-23 03:08  D3D11基本几何体绘制\Common\GeometryGens.cpp
     文件        1529  2012-12-23 03:08  D3D11基本几何体绘制\Common\GeometryGens.h
     文件        2458  2012-12-13 22:20  D3D11基本几何体绘制\Common\Timer.cpp
     文件         908  2012-12-13 21:41  D3D11基本几何体绘制\Common\Timer.h
     文件       11395  2012-12-23 07:32  D3D11基本几何体绘制\Common\WinApp.cpp
     文件        2337  2012-12-23 07:36  D3D11基本几何体绘制\Common\WinApp.h
     目录           0  2012-12-23 08:40  D3D11基本几何体绘制\FX\
     文件        4557  2012-12-23 07:53  D3D11基本几何体绘制\FX\BasicColor.cod
     文件         575  2012-12-23 08:29  D3D11基本几何体绘制\FX\BasicColor.fx
     文件        1620  2012-12-23 08:38  D3D11基本几何体绘制\FX\BasicColor.fxo
     文件      268288  2012-12-23 20:32  D3D11基本几何体绘制\GeoDraw.exe
     文件         880  2012-12-23 03:22  D3D11基本几何体绘制\GeoDraw.sln
     文件        7108  2012-12-23 20:32  D3D11基本几何体绘制\GeoDraw.vcxproj
     文件        2104  2012-12-23 08:55  D3D11基本几何体绘制\GeoDraw.vcxproj.filters
     文件       12717  2012-12-23 20:26  D3D11基本几何体绘制\Main.cpp
     文件         382  2012-12-23 20:38  D3D11基本几何体绘制\readme.txt

评论

共有 条评论