资源简介
该程序示例包含了一些基本几何体的绘制方法,包括网格、立方体、圆柱体、球。
网格在水面渲染、地形渲染中应用十分广泛,因此学习其相关的绘制方法很有用。圆柱和球有着相似的绘制方法,通过指定的精细等级(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
相关资源
- 移动立方体算法MC算法Marching Cubes Al
- ABAQUS壳部件的网格划分
- 基于openmesh三角网络模型的补洞算法源
- 利用OpenGL自编程实现球体源码——网
- 立方体线框模型透视投影 计算机图形
- 计算机图形-立方体线框模型透视投影
- rotor37网格文件和算例
- OpenGL计算机图形作业立方体旋转+六个
- cubemap实现将全景图分割为立方体6个面
- 光滑粒子流体动力学 一种无网格粒子
- 精通CFD动网格工程仿真与案例实战.
- feko培训资料,包括网格划分,远场等
- AnsysWoekbench 12个+模型
- hypermesh入门到精通
- 精通CFD动网格工程仿真与案例实战光
- 2015年全国人口空间分布公里网格数据
- Qt通过控件控制立方体旋转
- 限定Delaunay三角网格剖分技术
- 高效可用网格布尔运算
- ANSYS Fluent嵌套网格介绍及视频
- 《网格系统》中英文双语版(Grid sy
- 网格合并插件.rar
- 计算超立方体
- 六自由度运动-动网格udf
- CSS3制作3D图片立方体旋转特效.zip
- 绕翼型网格生成源程序
- svm 网格搜索法
- OpenGL立方体带黑白格格纹理有光照可
- 网格序列法_三角剖分_插值光滑_等高
- 41节的可交互的立方体
评论
共有 条评论