src/octree.cc
branchpyrit
changeset 49 558fde7da82a
parent 44 3763b26244f0
child 91 9d66d323c354
equal deleted inserted replaced
48:a4913301c626 49:558fde7da82a
   169 #	define tym	st_cur->tym
   169 #	define tym	st_cur->tym
   170 #	define tzm	st_cur->tzm
   170 #	define tzm	st_cur->tzm
   171 
   171 
   172 	int a = 0;
   172 	int a = 0;
   173 	Vector3 ro(ray.o);
   173 	Vector3 ro(ray.o);
   174 	Vector3 rdir(1.0/ray.dir.x, 1.0/ray.dir.y, 1.0/ray.dir.z);
   174 	Vector3 rdir(ray.dir);
   175 
   175 
   176 	if (rdir.x < 0.0)
   176 	if (rdir.x < 0.0)
   177 	{
   177 	{
   178 		ro.x = (bbox.L.x+bbox.H.x) - ro.x;
   178 		ro.x = (bbox.L.x+bbox.H.x) - ro.x;
   179 		rdir.x = -rdir.x;
   179 		rdir.x = -rdir.x;
   189 	{
   189 	{
   190 		ro.z = (bbox.L.z+bbox.H.z) - ro.z;
   190 		ro.z = (bbox.L.z+bbox.H.z) - ro.z;
   191 		rdir.z = -rdir.z;
   191 		rdir.z = -rdir.z;
   192 		a |= 1;
   192 		a |= 1;
   193 	}
   193 	}
       
   194 
       
   195 	if (rdir.x == 0.0) rdir.x = Eps;
       
   196 	if (rdir.y == 0.0) rdir.y = Eps;
       
   197 	if (rdir.z == 0.0) rdir.z = Eps;
       
   198 	rdir.x = 1.0/rdir.x;
       
   199 	rdir.y = 1.0/rdir.y;
       
   200 	rdir.z = 1.0/rdir.z;
   194 
   201 
   195 	tx0 = (bbox.L.x - ro.x) * rdir.x;
   202 	tx0 = (bbox.L.x - ro.x) * rdir.x;
   196 	tx1 = (bbox.H.x - ro.x) * rdir.x;
   203 	tx1 = (bbox.H.x - ro.x) * rdir.x;
   197 	ty0 = (bbox.L.y - ro.y) * rdir.y;
   204 	ty0 = (bbox.L.y - ro.y) * rdir.y;
   198 	ty1 = (bbox.H.y - ro.y) * rdir.y;
   205 	ty1 = (bbox.H.y - ro.y) * rdir.y;
   199 	tz0 = (bbox.L.z - ro.z) * rdir.z;
   206 	tz0 = (bbox.L.z - ro.z) * rdir.z;
   200 	tz1 = (bbox.H.z - ro.z) * rdir.z;
   207 	tz1 = (bbox.H.z - ro.z) * rdir.z;
   201 
   208 
   202 	if (max3(tx0,ty0,tz0) > min3(tx1,ty1,tz1))
   209 	if (max3(tx0,ty0,tz0) >= min3(tx1,ty1,tz1))
   203 		return NULL;
   210 		return NULL;
   204 
   211 
   205 	node = root;
   212 	node = root;
   206 	st_cur->next = -1;
   213 	st_cur->next = -1;
   207 
   214