GameApi 28
Library used by GameApi Builder tool
Loading...
Searching...
No Matches
RayTrace.hh
Go to the documentation of this file.
1
2#include "VectorTools.hh"
3#include "Graph.hh"
4
5class RayTrace
6{
7public:
8 virtual bool RayIntersect(Point p1, Vector dir) const=0;
9 virtual Point RayIntersectPoint(Point p1, Vector dir) const=0;
10};
11
13{
14public:
15 virtual Vector PointNormal(Point p) const=0;
16 virtual unsigned int PointColor(Point p) const=0;
17 virtual Point2d PointTexCoord(Point p) const=0;
18 virtual float RaySplitPercentage(Point p) const=0;
19};
20
21class SurfaceProperty : public Bitmap<Color>
22{
23public:
24 SurfaceProperty(PointProperty &p, Point p1, Vector dx, Vector dy, int sx, int sy)
25 {
26 dx/=sx;
27 dy/=sy;
28 }
29 int SizeX() const { return sx; }
30 int SizeY() const { return sy; }
31 Color Index(int x, int y) const
32 {
33 Point p = p1+float(x)*dx+float(y)*dy;
34 unsigned int color = p.PointColor(p);
35 return Color(color);
36 }
37private:
39 Point p1;
40 Vector dx;
41 Vector dy;
42 int sx;
43 int sy;
44};
45
46
48{
49public:
50 virtual Point2d Ray(Point p1, Vector dir) const=0;
51
52};
53
55{
56public:
57 virtual Point2d Obj(Point p) const=0;
58};
59
61{
62public:
64 virtual Point2d Obj(Point p) const
65 {
66 p-=center;
67 float r = sqrt(p.x*p.x+p.y*p.y+p.z*p.z);
68 float alfa = acos(p.z/r);
69 float beta = atan2(p.y,p.x);
70 Point2d p = { alfa, beta };
71 return p;
72 }
74};
75
76
77
79{
80public:
81 RayTraceSphereImpl(Point center, float radius) : center(center), radius(radius) { }
82 bool RayIntersect(Point p1, Vector dir) const
83 {
84 float a = Vector::DotProduct(dir, dir);
85 float b = 2.0*Vector::DotProduct(dir, p1);
86 float c = Vector::DotProduct(p1,p1) - (radius*radius);
87 float disc = b*b - 4*a*c;
88 if (disc < 0) { return false; }
89 float distSqrt = sqrtf(disc);
90 float q;
91 if (b<0) { q = (-b - distSqrt)/2.0; }
92 else { q = (-b + distSqrt)/2.0; }
93
94 float t0 = q/a;
95 float t1 = c/q;
96 if (t0>t1)
97 {
98 float tmp = t0;
99 t0 = t1;
100 t1=tmp;
101 }
102 if (t1<0.0) { return false; }
103 if (t0<0.0) { t = t1; return true; }
104 t = t0;
105 return true;
106 }
107 virtual Point RayIntersectPoint(Point p1, Vector dir) const {
108 RayIntesect(p1,dir);
109 return t;
110 }
111
112private:
113 Point t;
114 Point center;
115 float radius;
116};
117
119{
120public:
121 SphereRaySpace(Point center, float radius) : center(center), radius(radius) { }
122 virtual Point2d Ray(Point p1, Vector dir) const
123 {
124 Point p = impl.RayIntersectPoint(p1, dir);
125 Point2d p2 = objspace.Obj(p);
126 return p2;
127 }
128
129private:
131 SphereObjectSpace objspace;
132
133};
size dy
Definition GameApi_gui.cc:1727
Definition GraphI.hh:826
Definition VectorTools.hh:380
Definition RayTrace.hh:55
virtual Point2d Obj(Point p) const =0
Definition RayTrace.hh:13
virtual Vector PointNormal(Point p) const =0
virtual unsigned int PointColor(Point p) const =0
virtual Point2d PointTexCoord(Point p) const =0
virtual float RaySplitPercentage(Point p) const =0
Definition RayTrace.hh:48
virtual Point2d Ray(Point p1, Vector dir) const =0
Definition RayTrace.hh:79
RayTraceSphereImpl(Point center, float radius)
Definition RayTrace.hh:81
bool RayIntersect(Point p1, Vector dir) const
Definition RayTrace.hh:82
virtual Point RayIntersectPoint(Point p1, Vector dir) const
Definition RayTrace.hh:107
Definition Graph.hh:3837
virtual bool RayIntersect(Point p1, Vector dir) const =0
RayTrace(ContinuousVoxel< float > &objs)
Definition Graph.hh:3839
virtual Point RayIntersectPoint(Point p1, Vector dir) const =0
Definition RayTrace.hh:61
virtual Point2d Obj(Point p) const
Definition RayTrace.hh:64
Point center
Definition RayTrace.hh:73
SphereObjectSpace(Point center)
Definition RayTrace.hh:63
virtual Point2d Ray(Point p1, Vector dir) const
Definition RayTrace.hh:122
SphereRaySpace(Point center, float radius)
Definition RayTrace.hh:121
int SizeY() const
Definition RayTrace.hh:30
Color Index(int x, int y) const
Definition RayTrace.hh:31
int SizeX() const
Definition RayTrace.hh:29
SurfaceProperty(PointProperty &p, Point p1, Vector dx, Vector dy, int sx, int sy)
Definition RayTrace.hh:24
Definition VectorTools.hh:125
static float DotProduct(const Vector &aVec, const Vector &aVec2)
Definition VectorTools.hh:185
border radius
Definition gameapi_example.php:45
background color
Definition gameapi_example.php:46
Definition VectorTools.hh:910
Definition Parser.cc:60
float x
Definition Parser.cc:60
float y
Definition Parser.cc:60
float z
Definition Parser.cc:60