• WebGL坐标系统以及存储限定符


    • WebGL:笛卡尔坐标系

    面向屏幕时:右手坐标系

    • <canvas>坐标系
    •  attribute变量,传输和顶点相关的变量
    1. 在顶点着色器中声明attribute
    2. 将attribute变量赋值给gl_Position变量
    3. 想attribute传输数据
    var VSHADER_SOURCE=
        'attribute vec4 a_Position;
    '+
        'void main(){
    '+
        'gl_Position=a_Position;
    '+
        'gl_PointSize=10.0;
    '+
    '}
    ';
    
    
    var FSHADER_SOURCE=
        'void main(){
    '+
        'gl_FragColor=vec4(1.0,0.0,0.0,1.0);
    '+
        '}
    ';
    
    function main(){
        var canvas=document.getElementById("webgl");
    
        var gl=getWebGLContext(canvas);
    
        if(!initialShaders(gl,VSHADER_SOURCE,FSHADER_SOURCE))
        {
            Console.log("Failed to initailal shader");
            return 
        }
        var  a_Position=gl.getAttribLocation(gl.program,'a_Position');
    
        if(a_Position<0)
        {
            console.log("Failed to get the storage location of a_Position");
            return
        }
    
        gl.vertexAttrib3f(a_Position,0.0,0.0,1.0);
    
        gl.clearColor(0.0,0.0,0.0,1.0);
        gl.clear(gl.COLOR_BUFFER_BIT);
    
        gl.drawArrays(gl.POINTS,0,1);
    }

    attribute称为存储限定符,表示接下来的变量是一个attribute变量,且为全局变量。

    1. 变量声明:attribute vec4 a_Position

        gl_Position=a_Position

       2.获取attribute 变量的存储位置(第二个参数是attribe 修饰的变量的名称)返回attribute的存储位置

        var  a_Position=gl.getAttribLocation(gl.program,'a_Position');//此处的gl.program是由initShader()函数创建的

       3.使用位置向着色器传入值,使用gl.vertexAttrib3f()函数,(第一个参数是location,后面参数是坐标)

         gl.vertexAttrib3f(a_Position,0.0,0.0,0.0);

    这样做就可以通过javascript代码把坐标位置动态传给着色器,而不用写死在顶点着色器中。

    除了有 gl.vertexAttrib3f还有gl.vertexAttrib1f,2f,3f

         

  • 相关阅读:
    base64加密/解密
    js split 的用法和定义 js split分割字符串成数组的实例代码
    js获取html5 audio 音频时长方法
    获取虾米音乐的歌词
    ajax请求QQ音乐
    MarkdownPad2.5 注册码
    neovim 使用
    tmux的使用方法和个性化配置
    linux 安装libevent
    boost.sha1
  • 原文地址:https://www.cnblogs.com/1521681359qqcom/p/12526790.html
Copyright © 2020-2023  润新知