WebGL的shader


WebGL的shader(着色器)有2種:vertexShader(定點着色器)和 fragmentShader(片段着色器)

頂點着色器:定義點的位置、大小
片元着色器:定義畫出來的物體的材質(顏色、反光度等...)

着色器定義有自己的一套語言:GLSL(Graphics Library Shading Language)

推薦閱讀:https://blog.csdn.net/qq_37338983/article/details/78556063
http://www.alloyteam.com/2017/03/teach-you-to-use-webgl-to-quickly-create-a-small-world/

例如用WebGL畫一個點:

<head>
    <!-- 頂點着色器 定義代碼 -->
    <script type='x-shader/x-vertex' id='shader-vs'>
        void main(){
            gl_Position=vec4(100,0.0,0.0,1000);
            gl_PointSize=10.0;
        }
    </script>
    <!-- 片元着色器 定義代碼 -->
    <script type='x-shader/x-fragment' id='shader-fs'>
        void main(){
            gl_FragColor=vec4(0.0,0.0,1.0,1.0);
        }
    </script>
</head>

<body>
    <canvas id='webgl' width='400' height='400'></canvas>
</body>
<script>

    // 獲取webgl的上下文
    var canvas = document.getElementById('webgl');
    var gl = canvas.getContext('webgl');

    // 設置清空顏色
    gl.clearColor(0, 1, 1, 1.0);
    gl.clear(gl.COLOR_BUFFER_BIT);

    // 初始化着色器(定點着色器和片段着色器)
    // 頂點着色器:就是定義點的位置、大小
    // 片元着色器:定義畫出來的物體的材質(顏色、反光度等...)
    var vs_source = document.getElementById('shader-vs').innerHTML,
        fs_source = document.getElementById('shader-fs').innerHTML;

    // 創建頂點着色器對象
    var vertexShader = gl.createShader(gl.VERTEX_SHADER);
    // 給頂點着色器對象綁定定義代碼
    gl.shaderSource(vertexShader, vs_source);
    // 編頂點譯着色器對象
    gl.compileShader(vertexShader);

    // 創建片元着色器對象
    var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
    // 給片元着色器對象綁定定義代碼
    gl.shaderSource(fragmentShader, fs_source);
    // 編譯片元着色器對象
    gl.compileShader(fragmentShader);

    // 創建一個着色器程序
    var glProgram = gl.createProgram();

    // 把前面創建的二個着色器對象添加到着色器程序中(頂點和片段着色器都需要)
    gl.attachShader(glProgram, vertexShader);
    gl.attachShader(glProgram, fragmentShader);

    // 把着色器程序鏈接成一個完整的程序
    gl.linkProgram(glProgram);

    // 使用這個完整的程序
    gl.useProgram(glProgram);

    // 繪制一個點
    gl.drawArrays(gl.POINTS, 0, 1);
</script>

</html>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM