Tree.h
上传用户:yunyi28
上传日期:2021-04-25
资源大小:6978k
文件大小:2k
源码类别:

分形几何

开发平台:

Visual C++

  1. #pragma once
  2. #include <string>
  3. #include <windows.h>
  4. #include <gl/gl.h>
  5. #pragma warning( disable : 4244 ) // double to float
  6. #pragma warning( disable : 4996 )
  7. using   namespace   std;
  8. #define MAX_BRANCH (10240)
  9. #define STACK_SIZE (10240)
  10. //
  11. //用于生成一棵树的信息
  12. //
  13. struct Vertex
  14. {
  15. Vertex(){}
  16. Vertex(float nx,float ny,float nz){   x=nx; y=ny; z=nz;}
  17. float x,y,z;
  18. };
  19. struct TreeInfo
  20. {
  21. string base[3]; //
  22. int numBase; //
  23. float angle[3]; //偏转角度
  24. int maxAlpha; //alpha角最小值
  25. int minAlpha; //alpha角最大值
  26. int maxBeta; //beta角最大值
  27. int minBeta; //beta角最小值
  28. int depth; //递归次数
  29. float r; //初始树干半径
  30. float rfade; //树枝半径衰减比率
  31. float l; //初始树干长度
  32. float lfade; //树枝长度衰减比率
  33. float bfade; //分枝半径衰减比率
  34. float sizeleaf; //树叶子大小
  35. string tree; //用于生成树的字符串
  36. };
  37. //树的类型
  38. struct TreeType
  39. {
  40. char name[10];
  41. TreeInfo ti;
  42. };
  43. //
  44. //树的节点
  45. //
  46. struct TreeNode
  47. {
  48. Vertex position; //树节点所在局部坐标的位置
  49. float  r; //树枝在此节点的半径
  50. int alpha; //树枝在此节点与Y轴夹角
  51. int beta; //树枝在此节点与X轴夹角
  52. float length; //树枝在此节点一截的长度
  53. void operator = (TreeNode t)
  54. {
  55. position = t.position;
  56. r = t.r;
  57. alpha = t.alpha;
  58. beta = t.beta;
  59. length = t.length;
  60. }
  61. };
  62. //
  63. //一截树枝,中间没有任何分叉,Brabch两头对应两个TreeNode
  64. //
  65. struct Branch
  66. {
  67. TreeNode begin,end; //树枝的两端所在节点
  68. int alpha; //树枝与Y轴夹角
  69. int beta; //树枝与Z轴夹角
  70. bool leaf;
  71. Vertex beginv[9],endv[9]; //存储用来模拟树干的八边形的顶点,两端各八个顶点
  72. Vertex pt[4]; //存储树叶的四边形的顶点
  73. };
  74. class Tree
  75. {
  76. public:
  77. Tree(void);
  78. public:
  79. ~Tree(void);
  80. void InitTree(TreeInfo *i);
  81. void InitTreeInfo();
  82. void BuildTree();
  83. int  RenderTree();
  84. int  RenderBranch(Branch *b);
  85. int  RenderLeaves(Branch *b);
  86. void CallRenderList();
  87. Vertex center;
  88. TreeInfo *info;
  89. private:
  90. Branch  branch[MAX_BRANCH];
  91. int bCount;
  92. GLuint list;
  93. void ComputeBranchInfo(Branch* b);
  94. };