资源简介
opengl 做的很漂亮的一棵树,用分形算法实现 含代码
代码片段和文件信息
//****************************************************************************
// Branch.cpp: implementation of the CBranch class.
//
// Copyright (c) Boris J. Wang (e_boris2002@hotmail.com) 2002 - 2003
// From Institute of Computing Technology Chinese Academy of Sciences
// Beijing 100871 China
//
// THIS CODE AND INFORMATION IS PROVIDED “AS IS“ WITHOUT WARRANTY OF
// ANY KIND EITHER EXPRESSED OR IMPLIED INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//****************************************************************************
#include “stdafx.h“
#include “opengl.h“
#include “Branch.h“
#include “tree.h“
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
/////////////////////////////////////////////////////////////////////
//Implement for CSegment
////////////////////////////////////////////////////
CglMaterial CSegment::BarkMTR;
float CSegment::SegLeafSize = 1.970f;
float CSegment::LeafExpand = 26.4f;
float CSegment::SegExpand = 26.4f;
float CSegment::SegScaleLen = 0.83f;
float CSegment::SegScaleRad = 0.75f;
float CSegment::SegTwistInc = 61.02f;
float CSegment::SegSideExpand = 58.8f;
float CSegment::SegSideScaleDepth = 0.81f;
float CSegment::SegSideScale = 0.93f;
CglTexture CSegment::Tex(_T(“bark.bmp“)GL_Tex_BMP7);
#define SegDefaultLength 8.0f
CSegment::~CSegment()
{
if(SideBranch)
{
delete SideBranch;
SideBranch = NULL;
}
if(Leaves)
{
delete Leaves;
Leaves = NULL;
}
}
CSegment::CSegment()
{
SetExpand(0.0f);
SetLength(SegDefaultLength);
SetRadius(0.8f);
SetTwist(0.0f);
SideBranch = NULL;
Leaves = NULL;
}
void CSegment::Render(CSegment &Father)
{
Tex.Apply();
BarkMTR.Apply();
glColor4f(000CTree::BranchShadowDensity);
glBegin(GL_QUAD_STRIP);
DefineOneLine(HalfRadius TriRadius Father.HalfRadius Father.TriRadius 0.0f ); // 0/6
DefineOneLine(-HalfRadius TriRadius -Father.HalfRadius Father.TriRadius 0.1666666667f ); // 1/6
DefineOneLine(-Radius 0.0f -Father.Radius 0.0f 0.3333333333f ); // 2/6 and so on
DefineOneLine(-HalfRadius -TriRadius -Father.HalfRadius -Father.TriRadius 0.5f );
DefineOneLine(HalfRadius -TriRadius Father.HalfRadius -Father.TriRadius 0.6666666667f );
DefineOneLine(Radius 0.0f Father.Radius 0.0f 0.8333333333f );
DefineOneLine(HalfRadius TriRadius Father.HalfRadius Father.TriRadius 1.0f ); // 6/6
glEnd();
CTree::TotalQuad += 6;
CTree::TotalVertex += 12;
CTree::TotalNode ++;
CTree::TotalMemory += sizeof(CSegment);
}
void CSegment::DefineOneLine(GLfloat x GLfloat z GLfloat fx GLfloat fz GLfloat Tex)
{
glNormal3f(fx0.0ffz);
glTexCoord2f(Tex0.0f);
glVertex3f(fx 0.0f fz);
{GLfloat x3y3z3x2z2x1;
x1 = - z*SinTwist + x*CosTwist
相关资源
- OpenGL参考手册
- Qt Creator opengl实现四元数鼠标控制轨迹
- [免费]MFC制作目录树
- 二叉树基本操作源代码
- OpenGL文档,api大全,可直接查询函数
- opengl轮廓字体源代码
- MFC读三维模型obj文件
- 利用OpenGL写毛笔字算法
- MFC中OpenGL面和体的绘制以及动画效果
- B-树 C 实现 基本功能
- 基于OPENGL的光线跟踪源代码368758
- 基于MFC的文件目录树的对话框实现代
- VC 实现三维旋转(源码)
- 组态王6.53树形控件实例
- 自编用openGL实现3D分形树,分形山
- prim和kruskal算法求最小生成树262629
- OpenGL球形贴图自旋程序
- OpenGL导入贴图的Texture类
- 计算机图形学(openGL)代码
- PRIM算法,求最小生成树
- 用OpenGL开发的机械臂运动仿真程序(
- OpenGL-3D坦克模拟
- 树状导航菜单的制作
- OPENGL实现世界上最小的3D游戏
- VS2012OpenGL配置所需要的全部libdllh文件
- 易语言树型框扩充源码
- 易语言树型框刷新收缩源码
- 易语言树型框加载目录源码
- 易语言简单树型框分割文本源码
- 易语言大强学易之树型框与MDB数据库
评论
共有 条评论