资源简介
计算机图形学分形树,用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个文件信息
评论
共有 条评论