zoukankan      html  css  js  c++  java
  • webgl复习笔记——绘制 点、多个点

    谨记绘制流程

    绘制一个点

    //获取canvas
    let canvas = document.getElementById("webgl");
    //获取webgl
    let webgl = canvas.getContext("webgl");
    
    //顶点着色器
    function draw1Point() {
        let v_shader = `
    void main(){
        gl_Position = vec4(0.5,0,0,1);
        gl_PointSize = 10.0;
    }
    `;
        //gl_Position 四位,最后一位叫做齐次坐标,用来矩阵相乘用。
        let f_shader = `
    void main(){
        gl_FragColor = vec4(1,0,0,.5);
    }
    `;
        initShaders(webgl, v_shader, f_shader);
    
        webgl.clearColor(0, 0, 0, 1.0);
        webgl.clear(webgl.COLOR_BUFFER_BIT);
        webgl.drawArrays(webgl.POINT, 0, 1);
    }
    

    绘制多个点

    function draw2Point(){
        let v_shader = `
        attribute vec4 a_position;
    void main(){
        gl_Position = a_position;
        gl_PointSize = 10.0;
    }
    `;
        //gl_Position 四位,最后一位叫做齐次坐标,用来矩阵相乘用。
        let f_shader = `
    void main(){
        gl_FragColor = vec4(1,0,0,.5);
    }
    `;
        initShaders(webgl, v_shader, f_shader);
    
        webgl.clearColor(0, 0, 0, 1.0);
        webgl.clear(webgl.COLOR_BUFFER_BIT);
    
        let a_position = webgl.getAttribLocation(webgl.program, "a_position");
    
        for(let i = 0; i < 10; i ++){
            webgl.vertexAttrib3f(a_position, .5, 0.1*i, 0)
            webgl.drawArrays(webgl.POINT, 0, 1);
        }
    }
    

    初始化着色器部分

    // cuon-utils.js (c) 2012 kanda and matsuda
    /**
     * Create a program object and make current
     * @param gl GL context
     * @param vshader a vertex shader program (string)
     * @param fshader a fragment shader program (string)
     * @return true, if the program object was created and successfully made current 
     */
    function initShaders(gl, vshader, fshader) {
        var program = createProgram(gl, vshader, fshader);
        if (!program) {
            console.log('Failed to create program');
            return false;
        }
    
        gl.useProgram(program);
        gl.program = program;
    
        return true;
    }
    
    /**
     * Create the linked program object
     * @param gl GL context
     * @param vshader a vertex shader program (string)
     * @param fshader a fragment shader program (string)
     * @return created program object, or null if the creation has failed
     */
    function createProgram(gl, vshader, fshader) {
        // Create shader object
        var vertexShader = loadShader(gl, gl.VERTEX_SHADER, vshader);
        var fragmentShader = loadShader(gl, gl.FRAGMENT_SHADER, fshader);
        if (!vertexShader || !fragmentShader) {
            return null;
        }
    
        // Create a program object
        var program = gl.createProgram();
        if (!program) {
            return null;
        }
    
        // Attach the shader objects
        gl.attachShader(program, vertexShader);
        gl.attachShader(program, fragmentShader);
    
        // Link the program object
        gl.linkProgram(program);
    
        // Check the result of linking
        var linked = gl.getProgramParameter(program, gl.LINK_STATUS);
        if (!linked) {
            var error = gl.getProgramInfoLog(program);
            console.log('Failed to link program: ' + error);
            gl.deleteProgram(program);
            gl.deleteShader(fragmentShader);
            gl.deleteShader(vertexShader);
            return null;
        }
        return program;
    }
    
    /**
     * Create a shader object
     * @param gl GL context
     * @param type the type of the shader object to be created
     * @param source shader program (string)
     * @return created shader object, or null if the creation has failed.
     */
    function loadShader(gl, type, source) {
        // Create shader object
        var shader = gl.createShader(type);
        if (shader == null) {
            console.log('unable to create shader');
            return null;
        }
    
        // Set the shader program
        gl.shaderSource(shader, source);
    
        // Compile the shader
        gl.compileShader(shader);
    
        // Check the result of compilation
        var compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS);
        if (!compiled) {
            var error = gl.getShaderInfoLog(shader);
            console.log('Failed to compile shader: ' + error);
            gl.deleteShader(shader);
            return null;
        }
    
        return shader;
    }
    
    /** 
     * Initialize and get the rendering for WebGL
     * @param canvas <cavnas> element
     * @param opt_debug flag to initialize the context for debugging
     * @return the rendering context for WebGL
     */
    function getWebGLContext(canvas, opt_debug) {
        // Get the rendering context for WebGL
        var gl = WebGLUtils.setupWebGL(canvas);
        if (!gl) return null;
    
        // if opt_debug is explicitly false, create the context for debugging
        if (arguments.length < 2 || opt_debug) {
            gl = WebGLDebugUtils.makeDebugContext(gl);
        }
    
        return gl;
    }
    
    
  • 相关阅读:
    Head First Java pdf下载
    【ARC068F】Solitaire(dp,计数,思维)
    【BZOJ3270】博物馆(概率dp,高斯消元)
    【BZOJ3143】【HNOI2013】游走(期望dp,高斯消元)
    【BZOJ3622】已经没什么好害怕的了(dp,容斥原理,二项式反演)
    【BJWC2018】上学路线(dp,Lucas,crt)
    【BZOJ4987】Tree(树形dp)
    【SDOI201】黑白棋 /【XSY3064】小奇的博弈(博弈,nim,dp,组合数)
    【HNOI2017】礼物(FFT)
    【BZOJ2502】清理雪道(最大费用最大流)
  • 原文地址:https://www.cnblogs.com/wyy5552/p/13620370.html
Copyright © 2011-2022 走看看