Subversion Repositories gelsvn

Rev

Rev 349 | Rev 595 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 349 Rev 428
Line 47... Line 47...
47
 
47
 
48
  class BSPTree 
48
  class BSPTree 
49
  {
49
  {
50
    bool b_is_build;
50
    bool b_is_build;
51
 
51
 
52
	static int node_calls;
52
	  static int node_calls;
53
    static int tri_calls;
53
    static int tri_calls;
54
    BSPNode* root;
54
    BSPNode* root;
55
    BBox bbox;
55
    BBox bbox;
56
    std::vector<const Geometry::TriMesh*> trimesh;
56
    std::vector<const Geometry::TriMesh*> trimesh;
57
    std::vector<CGLA::Mat4x4f> transforms;
57
    std::vector<CGLA::Mat4x4f> transforms;
Line 63... Line 63...
63
    std::vector<FastBSPNode> fast_tree;
63
    std::vector<FastBSPNode> fast_tree;
64
    
64
    
65
    unsigned int max_objects;
65
    unsigned int max_objects;
66
    unsigned int max_level;
66
    unsigned int max_level;
67
	
67
	
68
   public:
68
  public:
69
    BSPTree();
69
    BSPTree();
70
    ~BSPTree();
70
    ~BSPTree();
71
 
71
 
72
    void init(std::vector<const Geometry::TriMesh*>& trimesh, 
72
    void init(std::vector<const Geometry::TriMesh*>& trimesh, 
73
	      int max_objects, int max_level);
73
              int max_objects, int max_level);
74
    void init(std::vector<const Geometry::TriMesh*>& _trimesh, 
74
    void init(std::vector<const Geometry::TriMesh*>& _trimesh, 
75
	      std::vector<CGLA::Mat4x4f>& _transforms, 
75
              std::vector<CGLA::Mat4x4f>& _transforms, 
76
	      int _max_objects, int _max_level);
76
              int _max_objects, int _max_level);
77
    void init(const Geometry::TriMesh* mesh, CGLA::Mat4x4f transform, 
77
    void init(const Geometry::TriMesh* mesh, CGLA::Mat4x4f transform, 
78
	      std::vector<int> &trilist, 
78
              std::vector<int> &trilist, 
79
	      int _max_objects, int _max_level);
79
              int _max_objects, int _max_level);
80
 
80
 
81
    void build();
81
    void build();
82
    bool is_build();
82
    bool is_build();
83
    void clear();
83
    void clear();
84
 
84
 
85
    bool intersect(Ray &ray) const;
85
    bool intersect(Ray &ray) const;
86
	
86
	
87
  private:
87
  private:
88
	void delete_node(BSPNode *node);
88
    void delete_node(BSPNode *node);
89
//	bool intersect2(BRender::Ray &ray, const TriAccel &acc, double t_max) const;
-
 
90
    void subdivide_node(BSPNode &node, BBox &bbox, 
89
    void subdivide_node(BSPNode &node, BBox &bbox, 
91
			unsigned int level, 
90
                        unsigned int level, 
92
			std::vector<ISectTri*>& objects, 
91
                        std::vector<ISectTri*>& objects, 
93
			std::vector<TriAccel*>& tri_objects);
92
                        std::vector<TriAccel*>& tri_objects);
94
    void init();
93
    void init();
95
 
94
 
96
    bool intersect_node(Ray &ray, const BSPNode &node, 
95
    bool intersect_node(Ray &ray, const BSPNode &node, 
97
			double t_min, double t_max) const;
96
                        double t_min, double t_max) const;
98
    void print(BSPNode *node, int depth);
97
    void print(BSPNode *node, int depth);
99
    int size(BSPNode *node);
98
    int size(BSPNode *node);
100
    int size();
99
    int size();
101
 
100
 
102
    void make_fast_tree(BSPNode *node);
101
    void make_fast_tree(BSPNode *node);
103
    void push_fast_bsp_node(BSPNode *node, int id);
102
    void push_fast_bsp_node(BSPNode *node, int id);
104
    void intersect_fast_node(Ray &ray, 
103
    void intersect_fast_node(Ray &ray, 
105
				      const FastBSPNode *node, 
104
                             const FastBSPNode *node, 
106
				      double t_min, double t_max) const;
105
                             double t_min, double t_max) const;
107
    bool intersect(Ray &ray, const ISectTri &isecttri, double t_max) const;
106
    bool intersect(Ray &ray, const ISectTri &isecttri, double t_max) const;
108
  };
107
  };
109
}
108
}
110
#endif
109
#endif
111
 
110