Began work on post processing
This commit is contained in:
28
src__/ray/ray.glsl
Normal file
28
src__/ray/ray.glsl
Normal file
@@ -0,0 +1,28 @@
|
||||
//Contains the definision of a ray and step functions
|
||||
struct Ray {
|
||||
ivec3 pos;
|
||||
vec3 innerPos;
|
||||
|
||||
vec3 dir;
|
||||
vec3 invDir;
|
||||
};
|
||||
|
||||
Ray ray;
|
||||
void setup(vec3 origin, vec3 direction) {
|
||||
ray.pos = ivec3(origin);
|
||||
ray.innerPos = origin - ray.pos;
|
||||
direction *= inversesqrt(direction);
|
||||
ray.dir = direction;
|
||||
ray.invDir = 1/direction;
|
||||
}
|
||||
|
||||
void step(ivec3 aabb) {
|
||||
//TODO:check for innerPos>=1 and step into that voxel
|
||||
vec3 t2f = (aabb - ray.innerPos) * ray.invDir;
|
||||
float mint2f = min(t2f.x, min(t2f.y, t2f.z));
|
||||
bvec3 msk = lessThanEqual(t2f.xyz, vec3(mint2f));
|
||||
vec3 newIP = mint2f * ray.dir + ray.innerPos;
|
||||
ivec3 offset = min(aabb-1, ivec3(newIP));
|
||||
ray.pos += offset + ivec3(msk);
|
||||
ray.innerPos = mix(vec3(0), newIP - offset, not(msk));
|
||||
}
|
||||
Reference in New Issue
Block a user