《Focus On 3D Terrain Programming》中一段代码的注释二

取自《Focus On 3D Terrain Programming》中的一段:

 1 bool CTERRAIN::MakeTerrainFault( int iSize, int iIterations, int iMinDelta, int iMaxDelta, float fFilter )
 2 {
 3   ......
 4   .............
 5   for( iCurrentIteration=0; iCurrentIteration<iIterations; iCurrentIteration++ )
 6   {
 7     //calculate the height range (linear interpolation from iMaxDelta to iMinDelta) for this fault-pass
 8     iHeight= iMaxDelta - ( ( iMaxDelta-iMinDelta )*iCurrentIteration )/iIterations;
 9
10     //pick two points at random from the entire height map
11     iRandX1= rand( )%m_iSize;
12     iRandZ1= rand( )%m_iSize;
13
14     //check to make sure that the points are not the same
15     do
16     {
17       iRandX2= rand( )%m_iSize;
18       iRandZ2= rand( )%m_iSize;
19     } while ( iRandX2==iRandX1 && iRandZ2==iRandZ1 );
20
21
22     //iDirX1, iDirZ1 is a vector going the same direction as the line
23     iDirX1= iRandX2-iRandX1;
24     iDirZ1= iRandZ2-iRandZ1;
25
26     for( z=0; z<m_iSize; z++ )
27     {
28       for( x=0; x<m_iSize; x++ )
29       {
30         //iDirX2, iDirZ2 is a vector from iRandX1, iRandZ1 to the current point (in the loop)
31         iDirX2= x-iRandX1;
32         iDirZ2= z-iRandZ1;
33
34         //if the result of ( iDirX2*iDirZ1 - iDirX1*iDirZ2 ) is "up" (above 0),
35         //then raise this point by iHeight
36         if( ( iDirX2*iDirZ1 - iDirX1*iDirZ2 )>0 )
37           fTempBuffer[( z*m_iSize )+x]+= ( float )iHeight;
38       }
39     }
40     //erode terrain
41     FilterHeightField( fTempBuffer, fFilter );
42   }
43   .......
44   ..............
45   return true;
46 }

===================

代码的核心内容就是实现一个fault formation算法,算法是一个简单的数学模型,所以只要按照在纸上画个图就明白了。随笔的重点只是一行代码:

iDirX2*iDirZ1 - iDirX1*iDirZ2>0

这行代码参考的是二维向量共线定理:若设a=(x1,y1),b=(x2,y2),则有x1y2=x2y1。即与平行概念相同x1y2 - x2y1=0

另外,iMinDelta和iMaxDelta确实不符合我们的习惯,我们一般都习惯iMinValue和iMaxValue这样

时间: 2024-11-06 03:38:18

《Focus On 3D Terrain Programming》中一段代码的注释二的相关文章

《Focus On 3D Terrain Programming》中一段代码的注释三

取自<Focus On 3D Terrain Programming>中的一段: 1 //-------------------------------------------------------------- 2 // Name: CIMAGE::LoadUncompressedTGA - private 3 // Description: Load an uncompressed targa (TGA) 4 // Arguments: None 5 // Return Value: A

书中一段代码的注释

取自<Focus On 3D Terrain Programming>中的一段: //-------------------------------------------------------------- // Name: CTERRAIN::FilterHeightBand - private // Description: Apply the erosion filter to an individual // band of height values // Arguments:

bootstrap 中这段代码 使bundles 失败

_:-ms-fullscreen, :root input[type="date"], _:-ms-fullscreen, :root input[type="time"], _:-ms-fullscreen, :root input[type="datetime-local"], _:-ms-fullscreen, :root input[type="month"] { line-height: 1.42857143; }

3D Game Programming with directx 11 习题答案 8.3

第八章 第三题 1.将flare.dds和flarealpha.dds拷贝到工程目录 2.创建shader resource view HR(D3DX11CreateShaderResourceViewFromFile(md3dDevice, L"Textures/flare.dds", 0, 0, &mFlareSRV, 0)); HR(D3DX11CreateShaderResourceViewFromFile(md3dDevice, L"Textures/fla

3D Game Programming with directx 11 习题答案 8.2

第八章 第二题 1.首先找到Directx Texture Tool,它位于 2.填入配置 3.用画图工具画好每个level的图片,例如level0 4.用Directx Texture Tool添加到dss中 5.依次添加level1… 6.加载到程序中查看效果,下图是Filter = MIN_MAG_MIP_POINT的情况. 3D Game Programming with directx 11 习题答案 8.2

viewpager 自动无限循环 这段代码移到你的程序中就可以用了

本程序需要懂得viewpager的基础知识,也就是说你能够自己写出一个手动滑动的viewpager,下面我将附带加小圆点的知识 那么我们回顾一下图片轮转的基础知识,如果你已经对viewpager很熟悉了就不用看了,浪费时间 1.viewpager是在v4兼容报里面的,使用控件时请带上报名 2.数据来源用list存放,我这里用的是textview做的小圆点list<textview>,layout做的单张幻灯片list<view>,将xml文件inflate成为view,View.i

如何在Sql2008中获取表字段属性和注释?

如何在Sql2008中获取表字段属性和注释? select b.[value] from sys.columns a left join sys.extended_properties b on a.object_id=b.major_id and a.column_id=b.minor_id inner join sysobjects c on a.column_id=c.id and a.[name]='列名' and c.[name]='表名' SELECT 表名=case when a.

c# winform中的一段代码赏析

我遇到了一个bug,是客户测试我们的产品,报出来的,而且有异常信息文件,这对于定位问题,很有帮助. 我找到源码看了下,bug还无法重现.于是我随便点点客户端,经过了几次调试,结果报出错误来了.客户端界面如下: 代码如下: 1 /// <summary> 2 /// 选定项发生改变事件 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name=&quo

程序运行中(BSS段、数据段、代码段、堆栈)

程序运行中(BSS段.数据段.代码段.堆栈) BSS段:(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS段属于静态内存分配. 数据段 :数据段(data segment)通常是指用来存放程序中 已初始化 的 全局变量 的一块内存区域.数据段属于静态内存分配. 代码段: 代码段(code segment/text segment)通常是指用来存放 程序执行代码 的一块内存区域.这部分区域的大小