Subversion Repositories gelsvn

Rev

Rev 307 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 307 Rev 308
1
#ifndef __BOUNDINGNODE_H
1
#ifndef __BOUNDINGNODE_H
2
#define __BOUNDINGNODE_H
2
#define __BOUNDINGNODE_H
3
 
3
 
4
#include <vector>
4
#include <vector>
5
#include "CGLA/Vec3f.h"
5
#include "CGLA/Vec3f.h"
-
 
6
#include "Ray.h"
6
#include "Triangle.h"
7
#include "Triangle.h"
7
#include "AABox.h"
8
#include "AABox.h"
8
#include "OBox.h"
9
#include "OBox.h"
9
 
10
 
10
namespace Geometry
11
namespace Geometry
11
{
12
{
12
 
13
 
13
/// Abstract BOUNDINGNODE node.
14
/// Abstract BOUNDINGNODE node.
14
template<class BoxType>
15
template<class BoxType>
15
class BoundingNode: public BoxType
16
class BoundingNode: public BoxType
16
{
17
{
17
 public:
18
 public:
18
	
19
	
19
	BoundingNode(const BoxType& box): BoxType(box) {}
20
	BoundingNode(const BoxType& box): BoxType(box) {}
20
 
21
 
21
	/// Count number of intersections from a point in a given direction
22
	/// Count number of intersections from a point in a given direction
22
	virtual int intersect_cnt(const CGLA::Vec3f&,const CGLA::Vec3f&) const=0;
23
	virtual int intersect_cnt(const CGLA::Vec3f&,const CGLA::Vec3f&) const=0;
23
 
24
 
24
	/// Find the surface intersection point
25
	/// Find the surface intersection point
25
	virtual bool intersect(const CGLA::Vec3f&,const CGLA::Vec3f&,float&) const=0;
26
	virtual bool intersect(const CGLA::Vec3f&,const CGLA::Vec3f&,float&) const=0;
26
 
27
 
-
 
28
	virtual void intersect(Ray& r) const = 0;
-
 
29
 
27
	/** For a given point, return the min and max square distance and the
30
	/** For a given point, return the min and max square distance and the
28
			sign. Non-leafs return zero for the sign. Leaves
31
			sign. Non-leafs return zero for the sign. Leaves
29
			return the square of the true distance as both min and max. */
32
			return the square of the true distance as both min and max. */
30
	virtual void sq_distance(const CGLA::Vec3f&, float&, float&, float&) const;
33
	virtual void sq_distance(const CGLA::Vec3f&, float&, float&, float&) const;
31
	
34
	
32
	static BoundingNode* build(std::vector<Triangle>& triangles);
35
	static BoundingNode* build(std::vector<Triangle>& triangles);
33
};
36
};
34
 
37
 
35
}
38
}
36
#endif
39
#endif
37
 
40