资源简介
该程序示例包含了一些基本几何体的绘制方法,包括网格、立方体、圆柱体、球。
网格在水面渲染、地形渲染中应用十分广泛,因此学习其相关的绘制方法很有用。圆柱和球有着相似的绘制方法,通过指定的精细等级(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
相关资源
- umeshmotion网格推移
- 计算机图形学(openGL)代码
- Sun 系统为NewEnergy 网格基础架构带来活
- Sun 网格计算技术在美国爱达荷国家实
- Sun Solaris计算网格为下一代核反应堆注
- 商用软件GAMBIT网格数据解析和应用
- OGC Discrete Global Grid Systems 全球离散网
- IBM推出新型虚拟网格计算磁带及存储
- opengl实现三维网格光顺Laplacian算法
- Smoothed Particle Hydrodynamics A Meshfree Par
- 无网格法在空心弹流场数值模拟中的
- 网格剖分工具--Tetgen源码和使用,查看
- 8.流固耦合自动划分网格.pdf
- 有限元中网格剖分算法
- MESH网格划分课程
- 网格序列法实现等值线生成
- OpenGL立方体在世界坐标系中缩放_旋转
- 四棱锥立方体旋转
- 网格编码调制(TCM)
- 基于八叉树的网格简化算法实现
- 基于结构网格二维Euler方程的Jameson求
- COMSOL高级网格划分
- 变网格步长声波方程有限差分数值模
- 三维模型网格简化源码
- ANSYS+Workbench中网格化分和材料参数对
- 网格模型简化算法
- OpenGL下立方体 正四面体绘制与贴图。
- 三角网格法画等值线
- tetgen四面体剖分-三维有限元网格剖分
- 介绍FDTD的资料
评论
共有 条评论