跳到主要内容
← Ray Tracing

Ray Tracing

Ray

shader-learning 自学第 1 课:Ray

实时渲染 · 2D 片段 GLSL

第 1 课:Ray

实现

uniform vec2 iResolution;
uniform float iTime;

vec3 getRayOrigin() {
  // move the ray origin around the ellipse.
  vec3 p = vec3(cos(iTime) * 0.5, sin(iTime) * 0.5, 0.1);
  p.x *= iResolution.x / iResolution.y;
  return p;
}

void main() {
  vec2 uv = gl_FragCoord.xy / iResolution.xy;
  uv = uv * 2.0 - 1.0;
  uv.x *= iResolution.x / iResolution.y;

  vec3 rayOrigin = getRayOrigin();

  vec3 curPos = vec3(uv, 0.0);
  vec3 rayDir = normalize(curPos - rayOrigin);
  float t = (rayOrigin.z)/abs(rayDir.z);

  float dist = length(rayDir * t);

  gl_FragColor = vec4(1.0 - dist, 0.0, 0.0, 1.0);
}