用C语言编写的分形树
标签:
•
文件类型: .rar
•
文件大小: 2.56MB
•
下载次数: 1
•
计算机图形学分形树,用C语言编写的。实现的是一个二维的分形树。
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 196662 2006-07-13 12:04 simpleGLdataark00.bmp
文件 196664 2006-07-14 08:48 simpleGLdataark01.bmp
文件 196664 2006-07-14 08:49 simpleGLdataark02.bmp
文件 140288 2010-03-12 14:44 simpleGLdataDebugvc60.idb
文件 77824 2010-03-12 14:44 simpleGLdataDebugvc60.pdb
文件 20244 2010-03-12 14:44 simpleGLdataDebugView.obj
文件 3661804 2010-03-12 14:44 simpleGLdataDebugView.pch
文件 25600 2010-03-12 14:44 simpleGLdataDebugView.pdb
文件 196662 2009-11-01 16:36 simpleGLdatalawn.bmp
文件 786488 2006-07-16 07:30 simpleGLdataleaf00.bmp
文件 196664 2006-07-18 04:43 simpleGLdataleaf01.bmp
文件 196664 2006-07-16 12:31 simpleGLdataleaf02.bmp
..A.SH. 36864 2009-11-01 16:36 simpleGLdataThumbs.db
文件 1693 2006-07-24 00:28 simpleGLdataView.cpp
文件 3377 2010-03-12 14:44 simpleGLdataView.dsp
文件 514 2010-03-12 14:44 simpleGLdataView.dsw
文件 503 2006-07-23 23:51 simpleGLdataView.h
文件 33792 2010-03-12 14:44 simpleGLdataView.ncb
文件 53760 2010-03-12 14:44 simpleGLdataView.opt
文件 2534 2010-03-12 14:44 simpleGLdataView.plg
文件 7154 2010-11-12 11:03 simpleGLDebugBuildLog.htm
文件 67 2010-11-12 11:03 simpleGLDebugmt.dep
文件 23447 2010-11-12 11:03 simpleGLDebugopengl.obj
文件 414228 2010-03-12 15:29 simpleGLDebugopengl.pch
文件 410624 2010-03-12 15:29 simpleGLDebugopengl.pdb
文件 274485 2010-11-12 11:04 simpleGLDebugsimpleGL.exe
文件 146 2010-09-17 07:51 simpleGLDebugsimpleGL.exe.embed.manifest
文件 212 2010-09-17 07:51 simpleGLDebugsimpleGL.exe.embed.manifest.res
文件 145 2010-11-12 11:03 simpleGLDebugsimpleGL.exe.intermediate.manifest
文件 370684 2010-11-12 11:04 simpleGLDebugsimpleGL.ilk
............此处省略29个文件信息
#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 simpleGLdataark00.bmp
文件 196664 2006-07-14 08:48 simpleGLdataark01.bmp
文件 196664 2006-07-14 08:49 simpleGLdataark02.bmp
文件 140288 2010-03-12 14:44 simpleGLdataDebugvc60.idb
文件 77824 2010-03-12 14:44 simpleGLdataDebugvc60.pdb
文件 20244 2010-03-12 14:44 simpleGLdataDebugView.obj
文件 3661804 2010-03-12 14:44 simpleGLdataDebugView.pch
文件 25600 2010-03-12 14:44 simpleGLdataDebugView.pdb
文件 196662 2009-11-01 16:36 simpleGLdatalawn.bmp
文件 786488 2006-07-16 07:30 simpleGLdataleaf00.bmp
文件 196664 2006-07-18 04:43 simpleGLdataleaf01.bmp
文件 196664 2006-07-16 12:31 simpleGLdataleaf02.bmp
..A.SH. 36864 2009-11-01 16:36 simpleGLdataThumbs.db
文件 1693 2006-07-24 00:28 simpleGLdataView.cpp
文件 3377 2010-03-12 14:44 simpleGLdataView.dsp
文件 514 2010-03-12 14:44 simpleGLdataView.dsw
文件 503 2006-07-23 23:51 simpleGLdataView.h
文件 33792 2010-03-12 14:44 simpleGLdataView.ncb
文件 53760 2010-03-12 14:44 simpleGLdataView.opt
文件 2534 2010-03-12 14:44 simpleGLdataView.plg
文件 7154 2010-11-12 11:03 simpleGLDebugBuildLog.htm
文件 67 2010-11-12 11:03 simpleGLDebugmt.dep
文件 23447 2010-11-12 11:03 simpleGLDebugopengl.obj
文件 414228 2010-03-12 15:29 simpleGLDebugopengl.pch
文件 410624 2010-03-12 15:29 simpleGLDebugopengl.pdb
文件 274485 2010-11-12 11:04 simpleGLDebugsimpleGL.exe
文件 146 2010-09-17 07:51 simpleGLDebugsimpleGL.exe.em
文件 212 2010-09-17 07:51 simpleGLDebugsimpleGL.exe.em
文件 145 2010-11-12 11:03 simpleGLDebugsimpleGL.exe.intermediate.manifest
文件 370684 2010-11-12 11:04 simpleGLDebugsimpleGL.ilk
............此处省略29个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)