用C语言编写的分形树


计算机图形学分形树,用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  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个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)