webgl 23.為正方體添加環(huán)境光

上一節(jié)我們給正方體添加了漫反射,但物體背光的部分幾乎完全是黑色的,我們可以再添加環(huán)境光讓物體顯示的更真實。

ambient light.png

非常簡單了,直接把環(huán)境光加上就行了

<script id="vertex-shader" type="glsl">
    attribute vec4 a_Position;
    attribute vec4 a_Color;
    attribute vec3 a_Normal;
    uniform vec3 u_LightColor;
    uniform vec3 u_LightDirection;
    uniform vec3 u_AmbientLight;
    uniform mat4 u_mvpMatrix;
    varying vec4 v_Color;

    void main() {
        gl_Position = u_mvpMatrix * a_Position;
        // 標準化(把長度變?yōu)?1 )
        vec3 normal = normalize(a_Normal);
        float nDotL = max(dot(u_LightDirection, normal), 0.0);
        vec3 diffuse = u_LightColor * a_Color.rgb * nDotL;
        vec3 ambient = u_AmbientLight * a_Color.rgb;
        v_Color = vec4(diffuse + ambient, a_Color.a);
    }
</script>
var u_AmbientLight = gl.getUniformLocation(gl.program, 'u_AmbientLight');
// 設置環(huán)境光
gl.uniform3f(u_AmbientLight, 0.2, 0.2, 0.2);

思考:

  1. 現(xiàn)在我們是針對每個頂點計算光照,光照后的顏色值還是會進行插值。要進行更加逼真的光照效果,可以在 fragment shader 中針對每個 fragment 計算光照,但這樣性能肯定會有影響。

查看源碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • <轉(zhuǎn)>我也忘了轉(zhuǎn)自哪里,抱歉,感謝原作者 什么是Shader Shader(著色器)是一段能夠針對3D對象進行操作...
    星易乾川閱讀 5,842評論 1 16
  • 1, OpenGL 編程模型 2, 管線流程(重點,每一個細節(jié)都要講清楚) 渲染流水線,就是一系列有序的處理階段的...
    rogerwu1228閱讀 791評論 0 0
  • 轉(zhuǎn)載http://wetest.qq.com/lab/view/315.html 移動平臺硬件架構(gòu) 移動平臺無論是...
    李嘉的博客閱讀 1,924評論 0 4
  • 轉(zhuǎn)載注明出處:點擊打開鏈接 Shader(著色器)是一段能夠針對3D對象進行操作、并被GPU所執(zhí)行的程序。Shad...
    游戲開發(fā)小Y閱讀 3,674評論 0 4
  • 前一陣在公司用vue開發(fā)webapp,遇到一個用戶拍照或者調(diào)用手機相冊展示圖片,然后上傳服務器的需求,接觸前端僅半...
    45b645c5912e閱讀 6,980評論 8 35

友情鏈接更多精彩內(nèi)容