webgl学习笔记一-绘图单点

摘要:
写在前面WebGl是基于OpenGLES2.0的3D绘图协议。三步曲创建Shader(着色器)对象ObjectcreateShadertype两种选择:gl.VERTEX_SHADER创建顶点着色器,gl.FRAGMENT_SHADER创建片段着色器。四步走创建一个程序对象createProgram();附件着色器attachShader;链接着色器linkProgram;使用程序useProgram;绘图gl.drawArrays;附上代码html˂!gl){console.log;return;}//编译着色器//创建Shader(着色器)对象//将着色器程序附加到Shader上//编译程序varvertShader=gl.createShader;gl.shaderSource;gl.compileShader;varfragShader=gl.createShader;gl.shaderSource;gl.compileShader;//合并程序//创建一个程序对象//附加着色器//链接着色器//使用程序varshaderProgram=gl.createProgram();gl.attachShader;gl.attachShader;gl.linkProgram;gl.useProgram;//绘制一个点gl.drawArrays;}参考文献webglAPI写在最后新博客

写在前面

  •   WebGl(全称:Web Graphics Library : web图形库) 是基于OpenGL ES 2.0的3D绘图协议。

  •   WebGL完美地解决了现有的Web交互式三维动画的两个问题:第一,它通过HTML脚本本身实现Web交互式三维动画的制作,无需任何浏览器插件支持;第二,它利用底层的图形硬件加速功能进行的图形渲染,是通过统一的、标准的、跨平台的OpenGL接口实现的。

绘图一个点的步骤

  • 创建HTML5 canvas
<canvas     height="200px"></canvas>

  • 获取画布canvas的Id
var canvas = document.getElementById('canvas');

  • 获取画布webgl的上下文
var gl = canvas.getContext('webgl');

  • 编写存储着色器程序

    • 顶点着色器 :指定了点的位置和尺寸
            //顶点着色器程序
            var VSHADER_SOURCE =
                "void main() {" +
                //设置坐标
                "gl_Position = vec4(0.0, 0.0, 0.0, 1.0); " +
                //设置尺寸
                "gl_PointSize = 10.0; " +
                "} ";
    
    
    • 片元着色器 :指定了点的颜色
            //片元着色器程序
        var FSHADER_SOURCE =
            "void main() {" +
            //设置颜色
            "gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);" +
            "}";
    
  • 编译着色器。三步曲

    • 创建Shader(着色器)对象
    Object createShader (enum type)
    
    type 两种选择 :
    gl.VERTEX_SHADER创建顶点着色器 ,  gl.FRAGMENT_SHADER 创建片段着色器。
    
    • 将前面的着色器程序绑定到Shader对象上
    shaderSource(Object shader, string source)
    shader :着色器对象
    source :着色器程序
    
    • 编译程序
    compileShader(Object shader)
    
  • 合并程序:将顶点着色器和片元着色器合并,并链接到程序中。四步走

    • 创建一个程序对象
    createProgram();
    
    
    • 附件着色器
    attachShader(Object program, Object shader);
    
    
    • 链接着色器
    linkProgram(shaderProgram);
    
    
    • 使用程序
    useProgram(shaderProgram);
    
    
  • 绘图

gl.drawArrays(gl.POINTS, 0, 1);


附上代码

html


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<canvas     height="200px"></canvas>



</body>
</html>

javascript


<script>

    window.onload = function () {

        //顶点着色器程序
        var VSHADER_SOURCE =
            "void main() {" +
            //设置坐标
            "gl_Position = vec4(0.0, 0.0, 0.0, 1.0); " +
            //设置尺寸
            "gl_PointSize = 10.0; " +
            "} ";

        //片元着色器程序
        var FSHADER_SOURCE =
            "void main() {" +
            //设置颜色
            "gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);" +
            "}";
        //获取canvas元素
        var canvas = document.getElementById('canvas');
        //获取绘制webgl绘图上下文
        var gl = canvas.getContext('webgl');
        if (!gl) {
            console.log("Failed");
            return;
        }
        //编译着色器
//        (1)创建Shader(着色器)对象
//        (2)将着色器程序附加到Shader上
//        (3)编译程序
        var vertShader = gl.createShader(gl.VERTEX_SHADER);
        gl.shaderSource(vertShader, VSHADER_SOURCE);
        gl.compileShader(vertShader);

        var fragShader = gl.createShader(gl.FRAGMENT_SHADER);
        gl.shaderSource(fragShader, FSHADER_SOURCE);
        gl.compileShader(fragShader);
        //合并程序
//        (1)创建一个程序对象
//        (2)附加着色器
//        (3)链接着色器
//        (4)使用程序
        var shaderProgram = gl.createProgram();
        gl.attachShader(shaderProgram, vertShader);
        gl.attachShader(shaderProgram, fragShader);
        gl.linkProgram(shaderProgram);
        gl.useProgram(shaderProgram);

        //绘制一个点
        gl.drawArrays(gl.POINTS, 0, 1);
    }

</script>

参考文献

写在最后

  新博客

免责声明:文章转载自《webgl学习笔记一-绘图单点》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python笔记(一)获取当前目录路径和文件zookeeper+jstorm的集群搭建下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WebGL的第二个小程序

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <...

Shader食谱 Chapter3--Toonshader卡通效果

Shader食谱 Chapter3--Toonshader卡通效果 unity shader toon 卡通Shader  Shader食谱 Chapter3--Toonshader卡通效果 OverView toon shader是游戏中比较常用的效果之一,尤其在二次元游戏中为了模拟角色在动画中手绘的效果。它是一种非真实的渲染技术,可以让...

unity shader 变种(多重编译 multi_compile)

一、定义 在unity中我们可以通过使用#pragma multi_compile或#pragma shader_feature指令来为shader创建多个稍微有点区别的shader变体。这个Shader被称为宏着色器(mega shader)或者超着色器(uber shader)。实现原理:根据不同的情况,使用不同的预处理器指令,来多次编译Shader代...

Unity_发布webGL的问题专题笔记

unity发布成webGL会有很多坑,资源加载,命名,浏览器是否支持等问题。希望大家有什么好的解决办法或问题能互相交流。 如何将Unity的WebGl项目打包发布 :https://blog.csdn.net/qq_25542475/article/details/89370682 Unity 基础开发-WebGL发布无法运行问题:https://blo...

游戏性能指标

对不同主流机器(一般来自TOP20配置,覆盖90%以上的设备)根据不同硬件能力建立高、中、低等多档性能指标,游戏按照该指标对应多个画质选项进行适配。 CPU负载:一帧内执行的指令数 GPU负载:一帧内执行的shader指令数 FPS:游戏每秒运行的帧数 ① GPU瓶颈 影响因素有:DrawCall数、shader复杂度、纹理采样、透明物件、OverDraw...

Cesium深入浅出之3dtiles渲染【转】

引子 接触Cesium一年有余了,期间靠胡吃海塞吸收了很多有用的、没用的知识和技术,感觉有点消化不良,今天终于有时间来梳理一下了。之前一直搞二维的,对三维技术只能算是半路出家,不敢写太深的原理性文章,以免误人子弟,但写写心得还是可以的。我想写一个Cesium深入浅出系列,即将深刻的道理用浅显的语言表述出来,纵观大部分的技术类文章,应该没几个能真正的做到这一...