龙书9 chapter13 14 地形绘制的过程和terrain类的实现、 粒子系统入门笔记

地形笔记:

实现过程关键点:1.高度图的读取(得到Y值)-->创建平面网格(得到x z值)-->生成vertex和index

2.纹理映射和预设light:创建空texture-->映射vertex对应的纹理坐标-->映射不同height对应的color-->根据lightDirection计算单位网格对应的明暗程度

3.camera的height:  得到单位网格中xz已知,推导出相应的y坐标

高度图看成一个矩阵, 高度图 中元素需要>=vertex数

camera的height:书中的计算没看明白, 这种方式也可求出height,即EE‘的长度为AA’乘以FE‘除以FA’

例子中的terrain头文件:

class Terrain
{
public:
	Terrain(
		IDirect3DDevice9* device,
		std::string heightmapFileName,
		int numVertsPerRow,
		int numVertsPerCol,
		int cellSpacing,    // space between cells
		float heightScale);   

	~Terrain();

	int  getHeightmapEntry(int row, int col);
	void setHeightmapEntry(int row, int col, int value);

	float getHeight(float x, float z);

	bool  loadTexture(std::string fileName);
	bool  genTexture(D3DXVECTOR3* directionToLight);
	bool  draw(D3DXMATRIX* world, bool drawTris);

private:
	IDirect3DDevice9*       _device;
	IDirect3DTexture9*      _tex;
	IDirect3DVertexBuffer9* _vb;
	IDirect3DIndexBuffer9*  _ib;

	int _numVertsPerRow;
	int _numVertsPerCol;
	int _cellSpacing;

	int _numCellsPerRow;
	int _numCellsPerCol;
	int _width;
	int _depth;
	int _numVertices;
	int _numTriangles;
	float _heightScale;//超越0-255的限制
	std::vector<int> _heightmap;//vertex Y
	// helper methods
	bool  readRawFile(std::string fileName);//读取灰度图
	bool  computeVertices();
	bool  computeIndices();
	bool  lightTerrain(D3DXVECTOR3* directionToLight);
	float computeShade(int cellRow, int cellCol, D3DXVECTOR3* directionToLight);//计算单位网格中纹理在light方向光下的明暗程度

	struct TerrainVertex//内嵌类 只与terrain使用
	{
		TerrainVertex(){}
		TerrainVertex(float x, float y, float z, float u, float v)
		{
			_x = x; _y = y; _z = z; _u = u; _v = v;
		}
		float _x, _y, _z;
		float _u, _v;
		static const DWORD FVF;
	};
};

粒子系统笔记:

点精灵,单个点怎么映射纹理呢?? 两种模式:一.对应整个纹理  二.vertex FVF属性中有纹理坐标,对应纹理坐标;

关键点:1.划分为若干片段的vertexBuffer,保证图形卡的充分利用。    cpu拷贝vertex数据到图形处理器中去,图形卡进行显示操作。

比如有10000个粒子vertex,我们创建一个2000vertex的buffer,划分为4个片段,定义片段索引index

将vertexBuffer指定为动态的,这样可以lock还没有绘制的buffer区域,同时不影响其他部分的绘制

时间: 2024-10-08 20:23:43

龙书9 chapter13 14 地形绘制的过程和terrain类的实现、 粒子系统入门笔记的相关文章

龙书11_chapter_6 一:一般绘制流程

先看BoxDemo的前几节, 1.vertex input  Layout 2.vertexBuffer 3.IndexBuffer 4.vertexShader 5.constant Buffer 6.pixelShader 7.renderState 8.effect 1.vertex input  Layout Once we have defined a vertex structure, we need to provide Direct3D with a description of

龙书学习笔记(二)

补线代之余抽空把第四章上色学了,之所以说之余,是因为这一章内容确实不怎么多,不过为了巩固知识,便结合刚学的上色又做了一个小程序. 首先进行回顾,这一章学到的一共有四点: 一.Direct3D中颜色用RGB(Red.Green.Blue)三元组表示,用两种结构来保存 D3DCOLOR,即unsigned long,共32位,分成4个8位项,分别保存Alpha(这玩意的作用会在第七章学到).红.绿.蓝,均在0x00~0xff之间取值(就是0~255) 通过结构体来保存(D3DXCOLOR和D3DCO

龙书学习笔记(三)

在将第五章每个示例代码过了一遍之后,大致明白了光照这一章的内容,主要分为四点: 一.光照的类型分为三种,并且均通过结构D3DCOLORVALUE或D3DXCOLOR来表示光线的颜色 环境光(Ambient Light)经其它表面反射到达物体表面,并照亮整个场景,通常用做较低代价的粗略模拟. 漫射光(Diffuse Light)沿着特定的方向传播,到达某个表面后将沿着各个方向均匀反射,因此从各个方向观察物体表面亮度均相同. 镜面光(Specular Light)沿着特定的方向传播,到达一表面后将沿

龙书(Dragon book) +鲸书(Whale book)+虎书(Tiger book)

1.龙书(Dragon book)书名是Compilers: Principles,Techniques,and Tools作者是:Alfred V.Aho,Ravi Sethi,Jeffrey D.Ullman国内所有的编译原理教材都是抄的它的,而且只是抄了最简单的前端的一些内容.龙书中文版第一版龙书英文版第二版 2.鲸书(Whale book)书名是:Advanced Compiler Design and Implementation作者是:Steven S.Muchnick也就是高级编译

DirectX 9.0c游戏开发手记之“龙书”第二版学习笔记之8: Chap10: Lighting

这一章讲的是光照.光照(lighting)是Direct3D中非常重要的概念,而与之相对应的是材质(material)的概念.如果没有材质的话,那么光照的作用也无法体现. 在较早一些的关于DirectX 9的编程入门书籍里,一般是使用D3DLIGHT9结构体来建立一个光源,而用D3DMATERIAL9结构体来定义物体的材质.我们要做的就是一些很琐碎的家务活,基本上就是创建这些结构体对象.设定其中的参数.启用光照之类的,至于具体实现的细节就非吾等所需(和所能)操心的了. 不过在我们的"龙书&quo

龙书11_chapter_4 一: GameTime解读

看龙书DX11,首先是第四章,本文对GameTime类进行解释 问:此类主要实现了什么功能? 答:Returns the total time elapsed since Reset() was called, NOT counting any time when the clock is stopped. 从渲染窗口Reset开始记时,记录总共的时间.不包括此间的pause时间. 问:关键时间接口? 答: 1. //获取频率(取决于主板 OS相关,不是CPU的主频)参考:http://www.

龙书常见错误解决方案

龙书简单地看了一遍,但是大部分内容只能勉强弄懂原理,一些算法只知其然而不知其所以然.不过饭还是要一口一口地吃,图形学的一些算法需要自己多多积累学习探索,早日成竹在胸.游刃有余. 龙书中例子都很经典,但是不少例子无法编译成功,下面就是一些常见的解决方案: ①将字符集改为使用多字节字符集,这样可以解决无法从“const char”转换为“LPCWSTR”问题,当然也可以在所有字符串前面加上TEXT(). ②CD3DFont也可以使用,但是编译错误会很多,比如经典的strcpy问题,以及众多类似问题.

编译原理三大经典书籍(龙书 虎书 鲸书)

1.龙书(Dragon book)  英文名:Compilers: Principles,Techniques,and Tools  作者:Alfred V.Aho,Ravi Sethi,Jeffrey D.Ullman  中文名:编译原理技术和工具   第一版龙书   第二版龙书 龙书”.龙书是Alfred V. Aho等人于1986年出版的,由于出版年代较早,其中包含部分过时的技术并且没有反映一些新的编译技术.新编的<编译原理>抛弃诸如算符优先分析等过时技术,增加面向对象编译.类型检查等新

Directx10 龙书笔记- 雾效的实现

雾 : 说白了就是一层有颜色的(一般是白色,灰色) 蒙蒙的感觉 混在光线里面. 不管是白天还是黑天. 龙书里面是这样实现的: 1.  给雾定义一个颜色 float3 gFogColor={0.7f,0.7f,0.7f}; 2. 然后呢在顶点着色器里面计算出 顶点级别的雾化需要的颜色加成比例 加成比例: 意思是当距离摄像机,就是你的眼睛越远,雾的浓度越大,就是颜色越深. 根据这个得出一个(0,1)的和距离有关的比例系数 vout.fogLerp = saturate((d-gFogStart)/g