資源簡介
大多數(shù)分形程序都是二維的,本人提供一個(gè)3DIFS分形樹程序,以及分形山。
程序很簡單,適合初學(xué)者.
程序很簡單,適合初學(xué)者.
代碼片段和文件信息
#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;
}
/*參數(shù)含義
??fa:數(shù)組首地址,存儲(chǔ)高度值
??size:網(wǎng)格的大小
??seedValue:隨機(jī)算法所用種子值
??heightScale:
??h:擾動(dòng)值?
??*/
//數(shù)組的真實(shí)大小為Size=Pow(2i)+1正方形個(gè)數(shù)為Pow(22i)i為迭代次數(shù)
//此處的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;
//只處理維數(shù)為2的整數(shù)次方的數(shù)組
?//???if?(!powerOf2(size)?||?(size==1))?{?return;?}
??????if(!power_of_two(size)?||?(size==1))?return;
????/*?subSize?以縱橫向線段數(shù)計(jì)的數(shù)組維數(shù)
???????segments?以頂點(diǎn)數(shù)計(jì)的數(shù)組維數(shù)
*/
????subSize?=?size;
????size++;
????
????/*?initialize?random?number?generator?*/
????srand?(seedValue);
????
/*?設(shè)定我們的粗糙度常量
???隨機(jī)數(shù)始終在0.0到1.0范圍內(nèi)生成。
???隨機(jī)數(shù)將乘上scale,每次迭代后scale將乘上ratio以有效的減少隨機(jī)數(shù)范圍。*/
ratio?=?(float)?pow?(2.-h);
scale?=?heightScale?*?ratio;
????/*?設(shè)置前四個(gè)種子值。如一個(gè)4X4數(shù)組,我們將初始化下邊*代表的點(diǎn):
???????????*?.?.?.?*
???????????.?.?.?.?.
???????????.?.?.?.?.
???????????.?.?.?.?.
???????????*?.?.?.?*
???????按diamond-square算法的術(shù)語,這將給我們正方形。
???????數(shù)組四角賦相同的值,這使我們排列數(shù)組時(shí)能無縫的拼接起來*/
????stride?=?subSize?/?2;
????fa[(0*size)+0]?=
??????fa[(subSize*size)+0]?=
????????fa[(subSize*size)+subSize]?=
??????????fa[(0*size)+subSize]?=?0.f;
????
????/*現(xiàn)在依據(jù)棱錐種子值遞增加入細(xì)節(jié)。
根據(jù)stride循環(huán)每次循環(huán)末尾都會(huì)將stride減半,
直到stride為0時(shí)結(jié)束?*/
????while?(stride)?{
/*?先用square數(shù)據(jù)生成diamond數(shù)據(jù)。
???第一遍經(jīng)過4X4矩陣時(shí),已有數(shù)據(jù)為下邊的X,
???我們要生成*處的數(shù)據(jù):
???????????????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數(shù)據(jù)生成square數(shù)據(jù)。
???第一遍經(jīng)過這段代碼時(shí),已有數(shù)據(jù)為下邊的X,
???我們要生成*處的數(shù)據(jù):
???????????????X?.?*?.?X
???????????????.?.?.?.?.
???????????????*?.?X?.?*
???????????????.?.?.?.?.
???????????????X?.?*?.?X
???????ij代表我們在數(shù)組中的(xy)位置。我們想生成的第一個(gè)值位于(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]
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????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個(gè)文件信息
- 上一篇:Linux From Scratch 中文手冊
- 下一篇:張力控制變頻收卷程序
評論
共有 條評論