Tree.h
资源名称:XLT.rar [点击查看]
上传用户:yunyi28
上传日期:2021-04-25
资源大小:6978k
文件大小:2k
源码类别:
分形几何
开发平台:
Visual C++
- #pragma once
- #include <string>
- #include <windows.h>
- #include <gl/gl.h>
- #pragma warning( disable : 4244 ) // double to float
- #pragma warning( disable : 4996 )
- using namespace std;
- #define MAX_BRANCH (10240)
- #define STACK_SIZE (10240)
- //
- //用于生成一棵树的信息
- //
- struct Vertex
- {
- Vertex(){}
- Vertex(float nx,float ny,float nz){ x=nx; y=ny; z=nz;}
- float x,y,z;
- };
- struct TreeInfo
- {
- string base[3]; //
- int numBase; //
- float angle[3]; //偏转角度
- int maxAlpha; //alpha角最小值
- int minAlpha; //alpha角最大值
- int maxBeta; //beta角最大值
- int minBeta; //beta角最小值
- int depth; //递归次数
- float r; //初始树干半径
- float rfade; //树枝半径衰减比率
- float l; //初始树干长度
- float lfade; //树枝长度衰减比率
- float bfade; //分枝半径衰减比率
- float sizeleaf; //树叶子大小
- string tree; //用于生成树的字符串
- };
- //树的类型
- struct TreeType
- {
- char name[10];
- TreeInfo ti;
- };
- //
- //树的节点
- //
- struct TreeNode
- {
- Vertex position; //树节点所在局部坐标的位置
- float r; //树枝在此节点的半径
- int alpha; //树枝在此节点与Y轴夹角
- int beta; //树枝在此节点与X轴夹角
- float length; //树枝在此节点一截的长度
- void operator = (TreeNode t)
- {
- position = t.position;
- r = t.r;
- alpha = t.alpha;
- beta = t.beta;
- length = t.length;
- }
- };
- //
- //一截树枝,中间没有任何分叉,Brabch两头对应两个TreeNode
- //
- struct Branch
- {
- TreeNode begin,end; //树枝的两端所在节点
- int alpha; //树枝与Y轴夹角
- int beta; //树枝与Z轴夹角
- bool leaf;
- Vertex beginv[9],endv[9]; //存储用来模拟树干的八边形的顶点,两端各八个顶点
- Vertex pt[4]; //存储树叶的四边形的顶点
- };
- class Tree
- {
- public:
- Tree(void);
- public:
- ~Tree(void);
- void InitTree(TreeInfo *i);
- void InitTreeInfo();
- void BuildTree();
- int RenderTree();
- int RenderBranch(Branch *b);
- int RenderLeaves(Branch *b);
- void CallRenderList();
- Vertex center;
- TreeInfo *info;
- private:
- Branch branch[MAX_BRANCH];
- int bCount;
- GLuint list;
- void ComputeBranchInfo(Branch* b);
- };