• 大小: 956.47 KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2024-08-31
  • 语言: 其他
  • 标签: 分形山  

资源简介

大多数分形程序都是二维的,本人提供一个3DIFS分形树程序,以及分形山。
程序很简单,适合初学者.

资源截图

代码片段和文件信息

#include “stdafx.h“
#include “CFractalTerrian.h“
#include 
GLfloat fogColor[4] = {.84f .87f 1.f 1.f};
extern int power_of_two(int n);
extern GLuint load_texture(const char* file_name);

GLuint CFractalTerrian::texture=0;

CFractalTerrian::CFractalTerrian(int sizeint num)
{
grid=NULL;
    Size=size;
Num=num;
}


/*参数含义
  fa:数组首地址,存储高度值
  size:网格的大小
  seedValue:随机算法所用种子值
  heightScale:
  h:扰动值 
  */
//数组的真实大小为Size=Pow(2i)+1正方形个数为Pow(22i)i为迭代次数
//此处的size=Size-1;
void CFractalTerrian::fill2DFractArray (float *fa int size
       int seedValue float heightScale float h)
{
    int i j;
    int stride;
    int oddline;
    int subSize;
float ratio scale;
//只处理维数为2的整数次方的数组
 //   if (!powerOf2(size) || (size==1)) { return; }
      if(!power_of_two(size) || (size==1)) return;
    /* subSize 以纵横向线段数计的数组维数
       segments 以顶点数计的数组维数
*/
    subSize = size;
    size++;
    
    /* initialize random number generator */
    srand (seedValue);
    
/* 设定我们的粗糙度常量
   随机数始终在0.0到1.0范围内生成。
   随机数将乘上scale,每次迭代后scale将乘上ratio以有效的减少随机数范围。*/
ratio = (float) pow (2.-h);
scale = heightScale * ratio;

    /* 设置前四个种子值。如一个4X4数组,我们将初始化下边*代表的点:
           * . . . *
           . . . . .
           . . . . .
           . . . . .
           * . . . *
       按diamond-square算法的术语,这将给我们正方形。
       数组四角赋相同的值,这使我们排列数组时能无缝的拼接起来*/

    stride = subSize / 2;
    fa[(0*size)+0] =
      fa[(subSize*size)+0] =
        fa[(subSize*size)+subSize] =
          fa[(0*size)+subSize] = 0.f;
    
    /*现在依据棱锥种子值递增加入细节。
根据stride循环每次循环末尾都会将stride减半,
直到stride为0时结束 */
    while (stride) {
/* 先用square数据生成diamond数据。
   第一遍经过4X4矩阵时,已有数据为下边的X,
   我们要生成*处的数据:
               X . . . X
               . . . . .
               . . * . .
               . . . . .
               X . . . X
        */
for (i=stride; i for (j=stride; j fa[(i * size) + j] =
scale * randnum (-.5f.5f) +
avgSquareVals (i j stride size fa);
j += stride;
}
i += stride;
}

/* 先用diamond数据生成square数据。
   第一遍经过这段代码时,已有数据为下边的X,
   我们要生成*处的数据:
               X . * . X
               . . . . .
               * . X . *
               . . . . .
               X . * . X
       ij代表我们在数组中的(xy)位置。我们想生成的第一个值位于(i=2j=0),
   用“oddline“及“stride“来增加j到所需值。
    */
oddline = 0;
for (i=0; i     oddline = (oddline == 0);
for (j=0; j if ((oddline) && !j) j+=stride;

/* i and j are setup. Call avgDiamondVals with the
   current position. It will return the average of the
   surrounding diamond data points. */
fa[(i * size) + j] =
scale * randnum (-.5f.5f) +
avgDiamondVals (i j stride size subSize fa);

/* To wrap edges seamlessly copy edge values around
   to other side of array */
if (i==0)
fa[(subSize*size) + j]

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       8215  2008-02-14 15:41  IFS分形树\CFractalTerrian.cpp

     文件       1041  2008-02-14 15:34  IFS分形树\CFractalTerrian.h

     文件       1089  2008-02-20 13:21  IFS分形树\CSky.cpp

    .CA....       174  2008-02-20 13:22  IFS分形树\CSky.h

     文件      12271  2008-02-14 15:15  IFS分形树\CTree.cpp

     文件        754  2008-02-20 13:22  IFS分形树\CTree.h

     文件      49206  2003-02-13 23:49  IFS分形树\data\bark.BMP

     文件     196664  2006-07-18 04:43  IFS分形树\data\leaf.bmp

     文件     786486  2002-12-24 11:58  IFS分形树\data\sky.bmp

     文件    3145782  2008-02-23 13:43  IFS分形树\data\terrian.bmp

    ..A.SH.     71168  2008-02-23 13:57  IFS分形树\data\Thumbs.db

     文件       2584  2008-02-23 13:55  IFS分形树\MainFrm.cpp

     文件       1583  2007-12-16 16:42  IFS分形树\MainFrm.h

     文件       4385  2007-12-16 14:11  IFS分形树\ReadMe.txt

     文件        766  2008-02-23 13:51  IFS分形树\res\icon1.ico

    ..A.SH.      8192  2008-02-23 13:57  IFS分形树\res\Thumbs.db

     文件       1078  2007-12-16 14:11  IFS分形树\res\Toolbar.bmp

     文件       1078  2007-12-16 14:11  IFS分形树\res\三维分形模拟.ico

    .CA....       404  2007-12-16 14:11  IFS分形树\res\三维分形模拟.rc2

     文件       1078  2007-12-16 14:11  IFS分形树\res\三维分形模拟Doc.ico

     文件        738  2008-02-23 13:52  IFS分形树\resource.h

    .CA....       214  2008-01-28 22:15  IFS分形树\StdAfx.cpp

     文件       1118  2007-12-21 16:53  IFS分形树\StdAfx.h

     文件      43532  2008-02-23 13:52  IFS分形树\三维分形模拟.aps

     文件       2078  2008-02-23 14:46  IFS分形树\三维分形模拟.clw

     文件       4186  2007-12-21 16:56  IFS分形树\三维分形模拟.cpp

     文件       5209  2008-02-23 13:51  IFS分形树\三维分形模拟.dsp

    .CA....       549  2007-12-16 14:11  IFS分形树\三维分形模拟.dsw

     文件     139342  2008-02-23 14:33  IFS分形树\三维分形模拟.exe

     文件       1336  2007-12-16 14:11  IFS分形树\三维分形模拟.h

............此处省略14个文件信息

评论

共有 条评论