glsl函数返回的值包含if语句

时间:2016-11-27 01:24:34

标签: webgl shader

我是webgl编程的初学者,还有更多需要学习的东西。 我找到了一个包含此函数的现有片段着色器:

float shadow(vec3 origin, vec3 ray) { 
    float tSphere0 = intersectSphere(origin, ray, sphereCenter0, sphereRadius0); 
    if(tSphere0 < 1.0) return 0.0; 
    float tSphere1 = intersectSphere(origin, ray, sphereCenter1, sphereRadius1); 
    if(tSphere1 < 1.0) return 0.0; 
    float tSphere2 = intersectSphere(origin, ray, sphereCenter2, sphereRadius2); 
    if(tSphere2 < 1.0) return 0.0; 
    float tSphere3 = intersectSphere(origin, ray, sphereCenter3, sphereRadius3); 
    if(tSphere3 < 1.0) return 0.0;  
    return 1.0;
} 

我的问题是:该功能总是返回1.0吗? 这个功能意味着什么?

这是intersectSphere

的功能
float intersectSphere(vec3 origin, vec3 ray, vec3 sphereCenter, float sphereRadius) {   
    vec3 toSphere = origin - sphereCenter;   
    float a = dot(ray, ray);   
    float b = 2.0 * dot(toSphere, ray);   
    float c = dot(toSphere, toSphere) - sphereRadius*sphereRadius;   
    float discriminant = b*b - 4.0*a*c;   
    if(discriminant > 0.0) {     
        float t = (-b - sqrt(discriminant)) / (2.0 * a);     
        if(t > 0.0) return t;   }   
    return 10000.0; 
} 

0 个答案:

没有答案
相关问题