一些着色器代码中的环境光照

Posted

技术标签:

【中文标题】一些着色器代码中的环境光照【英文标题】:Ambient Lighting in some shader code 【发布时间】:2011-03-03 11:37:18 【问题描述】:
        #version 150 core
in vec3 pos;
in vec3 vshade;
in vec3 normal;
out vec3 cshade;
out float shadescale_o;
out vec3 v_o;
out vec3 locallight_o;
out vec3 n;
uniform float pscale;
uniform mat3 rotation_projection;
uniform vec3 objcentre_to_eye_projected;
uniform vec3 light_in_object_coords;
uniform vec3 view_in_object_coords;
void main()

//do it all without homogenous co-ords
    vec3 transpos;
    vec3 h,v;   
    vec3 locallight=light_in_object_coords-pos; //subtract because of light direction
    transpos.xyz=rotation_projection*pos.xyz+objcentre_to_eye_projected;
    gl_Position.w= transpos.z;
    transpos.z-=pscale;
    gl_Position.xyz=transpos;
    v=view_in_object_coords+pos;
    n=normal;
    v_o=v;
    v=normalize(v);
    locallight_o=locallight;
    locallight=normalize(locallight);
    h=v-locallight; //light direction shines from source to object
    h=normalize(h);
    shadescale_o= dot(h,normal); //inward normal
    if (shadescale_o<0)
        shadescale_o=0;
    shadescale_o*=shadescale_o;
    shadescale_o*=shadescale_o;

    shadescale_o= dot(locallight,normal);//diffuse

    cshade=vshade;//*(shadescale_o);


这是我的着色器代码,它作为字符串输入到程序中,基本上只是显示一个带有局部光的立方体。

我需要知道如何通过这段代码来实现环境光照,从而照亮整个立方体(以及场景中的其他任何东西)。

它基于 openGL 框架,显示的所有内容都受此代码影响...是的,这是作业!!

【问题讨论】:

vshade 是您的环境光颜色吗?使用cshade=vshade; 会产生单一颜色吗? 【参考方案1】:

无论如何,您都在计算每种颜色的漫反射因子(至少我认为这是正确的,这是您的功课),因此您也可以添加一个恒定的环境因子。

【讨论】:

以上是关于一些着色器代码中的环境光照的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL ES着色语言-光照效果之散射光

OpenGL ES着色语言-光照效果之散射光

OpenGL ES着色语言-光照效果之散射光

GLSL PBS 实现,奇怪的着色器行为

DirectX11第七篇 光照模型——环境光

DirectX11第七篇 光照模型——环境光