zoukankan      html  css  js  c++  java
  • canvas 与 webGL , openGL

    通常我们将 CANVAS 与 webGL 区分开 , 移动端和WEB端区分开

    类似于这种关系:

     // 通过getElementById()方法获取canvas画布
     var c2dx=document.getElementById('c2dx');
     // 通过方法getContext()获取2d上下文
     var c=c2dx.getContext('2d');
         c.moveTo(0,0); //直线起点坐标
         c.lineTo(50,50); //直线第2个点坐标
         c.lineTo(0,100); //直线第3个点坐标
         c.stroke(); //把点连成直线绘制出来
     //--------------------------------------------------------------------
     // 通过getElementById()方法获取canvas画布
     var wglx=document.getElementById('webglxxx');
     // 通过方法getContext()获取WebGL上下文
     var gl=wglx.getContext('webgl');
         console.log(gl);

     let [canvas, webgl, opengl] = [‘2d’, ‘web端’, '移动端']

    因为 webgl 通常用GPU的库来处理3D和加速, 所以定义会稍显专业, 但总共分四步骤:

    点、线面 、 着色 、绘制。

    1、let 3d基础 = ['顶点位置', '面颜色定义']

    2、初始化着色器 , 主要是创建点,创建面, 再引入点和面计算光源阴影,编译并渲染出来

    3、创建场景并把 渲染的物体 关联到 具体场景,返回整体参数。

    4、调用绘制方法进行绘制。

     WebGL API

    WebGL API指的就是gl=canvas.getContext('webgl')返回对象gl的一系列绘制渲染方法, GPU相比CPU最大的特点是并行计算,不过WebGL API都 进行了封装,如果你想学习并行计算可以关注CUDA或OpenCL。

     
    <!-- 顶点着色器源码 -->
    <script id="vertexShader" type="x-shader/x-vertex">
      void main() {
        //给内置变量gl_PointSize赋值像素大小
        gl_PointSize=20.0;
        //顶点位置,位于坐标原点
        gl_Position =vec4(0.0,0.0,0.0,1.0);
      }
    </script>
    <!-- 片元着色器源码 -->
    <script id="fragmentShader" type="x-shader/x-fragment">
      void main() {
        gl_FragColor = vec4(1.0,0.0,0.0,1.0);
      }
    </script>

    把代码放在script 标签中独立开来也是可行的。

    //顶点着色器源码
    var vertexShaderSource = document.getElementById('vertexShader').innerText;
    //片元着色器源码
    var fragShaderSource = document.getElementById('fragmentShader').innerText;
    //初始化着色器
    var program = initShader(gl,vertexShaderSource,fragShaderSource);

    支持的数据类型

     参阅: https://www.khronos.org/registry/OpenGL/specs/es/2.0/GLSL_ES_Specification_1.00.pdf

  • 相关阅读:
    装饰者模式
    Linux 编译的一些注意参数
    CodeBlocks使用静态链接库
    [BOOST] BOOST::String
    [BOOST] BOOST::Regex
    如何启动仿真环境里的网络联接?
    BlackCore
    Silverlight 中为Dialog添加委托
    c# windows应用程序或C# 控制台应用程序 添加web引用步骤
    Hyperv Server Q&A
  • 原文地址:https://www.cnblogs.com/xred/p/14673186.html
Copyright © 2011-2022 走看看