Shader特效——“Simple RayTrace”的实现 【GLSL】


判断 “直线和圆是否相交” 的理论推导。

延伸阅读:“直线和平面是否相交” 的理论推导。


效果图:

Shader特效——“Simple RayTrace”的实现 【GLSL】_第1张图片



GLSL代码:

vec2 iResolution = vec2(512., 512.);

// 简单的光线结构体,更高级的Ray Tracer所需的字段更多
struct Ray
{
   vec3 origin;     // 光源点
   vec3 direction; // 光源方向
};

struct Sphere
{
   vec3 center;  // 球心
   float radius;  // 半径
};

vec4 diffuse(in vec3 surface, in vec3 center, in vec4 color, in vec3 litePos)
{
   // 归一化的表面法线向量
   vec3 n = normalize(surface - center);

   // 从表面到光源点的方向向量(归一化)
   vec3 l = normalize(litePos - surface);

   // 散射(diffuse)公式
  

你可能感兴趣的:(Shader,ShaderJoy,——,Shader,实例详解)