12. RayMarching - rain and lights
struct ray { vec3 o; vec3 d;};// 직선과 점이 수직으로 만났을때 지점vec3 clossestPoint(ray r, vec3 p) { return r.o + max(0., dot(p - r.o, r.d)) * r.d;}// 직선과 점과 최단 거리float DistRay(ray r, vec3 p) { return length(p - clossestPoint(r, p));}// 카메라 좌표계 구하기.ray GetRay(vec2 uv, vec3 camPos, vec3 lookat, float zoom) { ray a; a.o = camPos; vec3 f = normalize(lookat - camPos); vec3 r = cross(vec3(0,1,0), f); vec..
2024. 8. 18.
09. RayMarching - SD Operation
도형들의 여러가지 연산 방법들의 대해서 정의 한다. 필요할때 마다 찾아서 사용하면 좋을 듯 하다 1) 도형 1, 도형 2를 합쳐서 출력.float opUnion(float d1, float d2) { return min(d1, d2);} 2) 도형 1, 도형 2를 부드럽게 합쳐서 출력.float opSmoothUnion(float d1, float d2, float k) { float h = clamp( 0.5 + 0.5*(d2-d1)/k, 0.0, 1.0 ); return mix( d2, d1, h ) - k*h*(1.0-h);} 3) 도형 1, 도형 2의 공통 부분만 출력float opIntersection(float d1, float d2) { return max(d1, d2);} 4) 도형..
2024. 8. 12.