美文网首页
webgl学习二 从外部向着色器传值

webgl学习二 从外部向着色器传值

作者: MrSwilder | 来源:发表于2020-11-19 10:50 被阅读0次

    代码:

    <html>
        <head>
            <title>
                webgl程序之从外部向着色器传值
            </title>
            <script type="text/javascript" src="./lib/webgl-debug.js"></script>
            <script type="text/javascript" src="./lib/webgl-utils.js"></script>
            <script type="text/javascript" src="./lib/cuon-utils.js"></script>
        </head>
        <body>
            <canvas id='canvas' width="800" height="800"></canvas>
            <script type="text/javascript">
    
                //定义变量存储位置
                //attribute:存储顶点位置,经常变的,无精度限定
                //uniform:存储不变的值,有精度限定
                var VShader="attribute vec4 a_position;\n"+
                "void main(){\n"+
                "gl_Position=a_position;"+
                "gl_PointSize=10.0;\n"+
                "}"
        
        
                var FShader="precision mediump float;\n"+
                "uniform vec4 u_color;\n"+
                "void main(){\n"+
                "gl_FragColor=u_color;\n"+
               
                "}"
    
                //
                var canvas=document.getElementById("canvas");
                var gl=getWebGLContext(canvas);
                if(!gl){
                    console.log("获取webgl上下文失败")
                }
              
    
                
                if(!initShaders(gl,VShader,FShader)){
                    console.log("初始化着色器失败")        
                }
    
                //获取着色器中的变量的地址
                var a_position=gl.getAttribLocation(gl.program,'a_position')
                var u_color=gl.getUniformLocation(gl.program,'u_color')
                if(a_position<0){
                    console.log("获取a_position变量地址失败")
                }
                if(u_color<0){
                    console.log("获取f_color变量地址失败")
                }
    
                //将顶点位置赋给a_position变量,传4个float类型的值则为4f,或者3f...
                gl.vertexAttrib4f(a_position,0,0,0,1)
                //传给颜色值
                var color=[255,0,0,1];
                //有四个分量的矢量,float类型
                gl.uniform4fv(u_color,color)
                gl.clearColor(0,0,0,1)
                gl.clear(gl.COLOR_BUFFER_BIT)
                gl.drawArrays(gl.POINTS,0,1)
    
            </script>
        </body>
      
    </html>
    

    效果:


    图片.png

    相关文章

      网友评论

          本文标题:webgl学习二 从外部向着色器传值

          本文链接:https://www.haomeiwen.com/subject/olpkiktx.html