首页 > 其他分享 >webgl学习笔记2-入门画点

webgl学习笔记2-入门画点

时间:2023-02-10 11:45:40浏览次数:49  
标签:入门 0.0 webgl 笔记 program ----- aPosition var gl

实现目标画一个点

案例流程

具体代码

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>使用WebGL绘制一个点</title>
  </head>

  <body onl oad="onInit()">
    <canvas id="webgl" width="500" height="500"></canvas>

    <script id="vertexShader" type="x-shader/x-vertex">
      attribute vec4 aPosition;
       attribute float aSize;
          void main() {
            //给内置变量gl_PointSize赋值像素大小
            gl_PointSize= aSize;//60.0
            //顶点位置,位于坐标原点
            gl_Position =aPosition; //vec4(0.0,0.0,0.0,1.0);
          }
    </script>
    <script id="fragmentShader" type="x-shader/x-fragment">
      precision mediump float;//设置精度
       uniform vec4 aColor;
          void main() {
            gl_FragColor=aColor;  //vec4(0.0,1.0,0.0,1.0);
          }
    </script>
    <script>
      function onInit() {
        //获取webgl
        var canvas = document.getElementById('webgl');
        var gl = canvas.getContext('webgl');
        //-----加载着色器-----
        //加载顶点着色器
        var vertexShaderSource = document.getElementById('vertexShader').innerText;
        var vertexShader = gl.createShader(gl.VERTEX_SHADER);
        gl.shaderSource(vertexShader, vertexShaderSource);
        gl.compileShader(vertexShader);

        //加载片元着色器
        var fragShaderSource = document.getElementById('fragmentShader').innerText;
        var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
        gl.shaderSource(fragmentShader, fragShaderSource);
        gl.compileShader(fragmentShader);
        //-----链接程序-----
        var program = gl.createProgram();
        gl.attachShader(program, vertexShader);
        gl.attachShader(program, fragmentShader);
        gl.linkProgram(program);
        gl.useProgram(program);
        //-----基本配置-----
        //设置视口
        gl.viewport(0, 0, canvas.width, canvas.height);
        //设置屏幕背景色RGBA
        gl.clearColor(0.0, 0.0, 0.0, 1.0);
        gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
        gl.enable(gl.DEPTH_TEST); //开启深度检测
        //-----参数赋值----
        // //aPosition赋值
        let aPositionVal = [0.0, 0.0, 0.0, 1.0];
        let aPosition = gl.getAttribLocation(program, 'aPosition');
        //attribute vec4=>Attrib4f,Attrib1fv
        // gl.vertexAttrib4f(aPosition, ...aPositionVal);
        gl.vertexAttrib1fv(aPosition, new Float32Array(aPositionVal));

        //aSize赋值
        let aSizeVal = 60.0;
        let aSize = gl.getAttribLocation(program, 'aSize');
        //attribute float=>Attrib1f
        gl.vertexAttrib1f(aSize, aSizeVal);

        //aColor赋值
        let aColorVal = [1.0, 0.0, 0.0, 1.0];
        let aColor = gl.getUniformLocation(program, 'aColor');
        //uniform vec4=>uniform4f
        gl.uniform4f(aColor, ...aColorVal);
        //-----执行绘制-----
        //画点
        gl.drawArrays(gl.POINTS, 0, 1);
      }
    </script>
  </body>
</html>

标签:入门,0.0,webgl,笔记,program,-----,aPosition,var,gl
From: https://www.cnblogs.com/xiaolidan00/p/17108375.html

相关文章

  • 联邦学习论文阅读笔记03 Incentive Design for Efficient Federated Learning in Mobi
    精翻:https://blog.csdn.net/weixin_43978453/article/details/104947600 挑战:客户端自身存在计算与通信成本,不给足够的好处不愿意参与训练。方法:基于合约理论设计了一......
  • react笔记之添加删除购物车
    前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从......
  • react笔记之完成Counter组件
    前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从......
  • react笔记之引入FontAwesome
    前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从......
  • react笔记之项目准备
    前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从......
  • react笔记之完成meals组件
    前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从......
  • react笔记之加载meal数据
    前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从......
  • JSP_案例_改造Cookie案例与会话技术_Session_快速入门
     JSP_案例_改造Cookie案例<%@pageimport="java.util.Date"%><%@pageimport="java.text.SimpleDateFormat"%><%@pageimport="java.net.URLEncoder"%><......
  • Docker学习笔记:查看当前用户和密码
    一、查看查看所有docker服务器登陆的用户和密码。Linuxcat/root/.docker/config.jsonWindowsC:\Users\Name.docker\config.json二、密码解码在config.json配置......
  • jquery概念以及jquery快速入门
    JQuery概念概念:一个JAVAScript框架jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(框架)。jQuery设计的宗旨是“writeLes......