資源簡介
大多數分形程序都是二維的,本人提供一個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個文件信息
- 上一篇:Linux From Scratch 中文手冊
- 下一篇:張力控制變頻收卷程序
評論
共有 條評論