資源簡介
計算機圖形學分形樹,用C語言編寫的。實現的是一個二維的分形樹。

代碼片段和文件信息
#include?
#include?
#include?
#include?
#define?N?4
#define?BMP_Header_Length?54
GLuint?texBarktexLeaftexLawn;
int?list=0;
GLUquadric?*qObj;//創建二次曲面對象
float?R[N+1]?H[N+1]?k?p?q?m?alpha?z[N+1]?a=6;
float?Gauss(float?min?float?max)
{
//rand()函數返回0和RAND_MAX之間的一個偽隨機數(pseudorandom)。
//RAND_MAX常量被定義stdlib.h中,并且等于32767或更大。
int?a?=?rand()?b?=?rand()?c?=?rand()?d?=?rand();
int?x?=?a?+?b?+?c?+?d;
double?y?=?(x*sqrt((float)3))/RAND_MAX-sqrt((float)12);
double?mid?=?(min?+?max)/2;
float?z?=?(float)(mid?+?(max?-?mid)*y/(2*sqrt((float)3)));
return?z;
}?
void?setData(void)
{
R[N]?=?0.3;
H[N]?=?2.4;
k?=?0.5;
q?=?0.5;?
m?=?0.7;
alpha?=?45;
for(int?i=N-1;?i>=0;?i--)//N==5
{
R[i]?=?R[i+1]*q;
H[i]?=?H[i+1]*m;
}
}
void?init?(void)
{
GLfloat?white_light[]={1.0?1.0?0.0?1.0};
GLfloat?light_position[]={14?14?-14};//設置光源
qObj?=?gluNewQuadric();//創建二次對象
gluQuadricTexture(qObjGL_TRUE);
glClearColor(0.00.00.01);
glShadeModel(GL_SMOOTH);
glLightfv(GL_LIGHT0?GL_AMBIENT?white_light);
glLightfv(GL_LIGHT0?GL_DIFFUSE?white_light);
glLightfv(GL_LIGHT0?GL_SPECULAR?white_light);
glLightfv(GL_LIGHT0?GL_POSITION?light_position);//設置光源
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL);
????setData();
}
void?drawTree(int?n)
{
if(n?==?0)//繪制最末尾的枝干
{
// float?curLen?=?len*((rand()/(float)RAND_MAX)/2?+?0.75f);
float?h?=?Gauss(0.4?0.7);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2DtexBark);
gluCylinder(qObj?R[n]?k*R[n]?H[n]?20?20);//圓柱
glDisable(GL_TEXTURE_2D);
glTranslatef(00H[n]);
glCallList(list);
return;
?????}
else
{?
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2DtexBark);
gluCylinder(qObj?R[n]?k*R[n]?H[n]?20?20);//k=0.5
glTranslatef(0?0?H[n]);
glDisable(GL_TEXTURE_2D);
glPushMatrix();
glRotatef(Gauss(30?80)?0?0?1);
glRotatef(Gauss(40?70)?0?1?0);
drawTree(n-1);
glPopMatrix();
?glPushMatrix();
glRotatef(Gauss(140?200)?0?0?1);
glRotatef(Gauss(40?70)?0?1?0);
drawTree(n-1);
glPopMatrix();
???
?????glPushMatrix();
?????
glRotatef(Gauss(260?320)?0?0?1);
glRotatef(Gauss(40?70)?0?1?0);
drawTree(n-1);
glPopMatrix();
?????glPushMatrix();
glRotatef(Gauss(5?15)?0?1?0);
glRotatef(Gauss(30?50)?0?0?1);
drawTree(n-1);
glPopMatrix();
};
}
void?drawLawn()
{
glDisable(GL_TEXTURE_2D);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0f1.0f0.0f);
glBindTexture(GL_TEXTURE_2DtexLawn);
????glEnable(GL_TEXTURE_2D);
glBegin(GL_POLYGON);
glTexCoord2f(0.0f0.0f);glVertex3f(-15.0f?15.0f?0.0f);
glTexCoord2f(0.0f1.0f); glVertex3f(15.0f?15.0f0.0f);
glTexCoord2f(1.0f1.0f);glVertex3f(?15.0f?-15.0f0.0
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????196662??2006-07-13?12:04??simpleGL\data\bark00.bmp
?????文件?????196664??2006-07-14?08:48??simpleGL\data\bark01.bmp
?????文件?????196664??2006-07-14?08:49??simpleGL\data\bark02.bmp
?????文件?????140288??2010-03-12?14:44??simpleGL\data\Debug\vc60.idb
?????文件??????77824??2010-03-12?14:44??simpleGL\data\Debug\vc60.pdb
?????文件??????20244??2010-03-12?14:44??simpleGL\data\Debug\View.obj
?????文件????3661804??2010-03-12?14:44??simpleGL\data\Debug\View.pch
?????文件??????25600??2010-03-12?14:44??simpleGL\data\Debug\View.pdb
?????文件?????196662??2009-11-01?16:36??simpleGL\data\lawn.bmp
?????文件?????786488??2006-07-16?07:30??simpleGL\data\leaf00.bmp
?????文件?????196664??2006-07-18?04:43??simpleGL\data\leaf01.bmp
?????文件?????196664??2006-07-16?12:31??simpleGL\data\leaf02.bmp
????..A.SH.?????36864??2009-11-01?16:36??simpleGL\data\Thumbs.db
?????文件???????1693??2006-07-24?00:28??simpleGL\data\View.cpp
?????文件???????3377??2010-03-12?14:44??simpleGL\data\View.dsp
?????文件????????514??2010-03-12?14:44??simpleGL\data\View.dsw
?????文件????????503??2006-07-23?23:51??simpleGL\data\View.h
?????文件??????33792??2010-03-12?14:44??simpleGL\data\View.ncb
?????文件??????53760??2010-03-12?14:44??simpleGL\data\View.opt
?????文件???????2534??2010-03-12?14:44??simpleGL\data\View.plg
?????文件???????7154??2010-11-12?11:03??simpleGL\Debug\BuildLog.htm
?????文件?????????67??2010-11-12?11:03??simpleGL\Debug\mt.dep
?????文件??????23447??2010-11-12?11:03??simpleGL\Debug\opengl.obj
?????文件?????414228??2010-03-12?15:29??simpleGL\Debug\opengl.pch
?????文件?????410624??2010-03-12?15:29??simpleGL\Debug\opengl.pdb
?????文件?????274485??2010-11-12?11:04??simpleGL\Debug\simpleGL.exe
?????文件????????146??2010-09-17?07:51??simpleGL\Debug\simpleGL.exe.em
?????文件????????212??2010-09-17?07:51??simpleGL\Debug\simpleGL.exe.em
?????文件????????145??2010-11-12?11:03??simpleGL\Debug\simpleGL.exe.intermediate.manifest
?????文件?????370684??2010-11-12?11:04??simpleGL\Debug\simpleGL.ilk
............此處省略29個文件信息
評論
共有 條評論