金沙棋牌官方平台

当前位置:金沙棋牌 > 金沙棋牌官方平台 > 学习总结,渲染引擎介绍

学习总结,渲染引擎介绍

来源:http://www.logblo.com 作者:金沙棋牌 时间:2019-11-08 00:57

GCanvas 渲染引擎介绍

2017/07/31 · HTML5 · Canvas

原来的文章出处: 天猫前端团队(FED卡塔 尔(阿拉伯语:قطر‎- 韦青   

图片 1

GCanvas 提供了意气风发套肖似于 H5 Canvas 规范的 JavaScript API。基于那套 API 能够平价的去做图形绘制、动漫渲染等,开拓的体验与 H5 Canvas 是截然生机勃勃致的。

HTML5 学习计算(四卡塔尔国——canvas绘图、WebGL、SVG,html5webgl

转自原著 有关于OpenGL、OpenGL ES、WebGL的小结

GCanvas 介绍

GCanvas发展经验了三个等级。

  • 率先等第,二〇一六 年中到 二〇一五 年终,清除 Android 平台 WebView Canvas 渲染品质差的标题。
  • 其次阶段,2015 年 11 月到现行反革命,为前端提供 Native 图形绘制技巧。

用一句话来归纳 GCanvas,即依照 W3C 标准,移动端的跨平台的高质量图形渲染引擎。能够从四个地方来分解。

  • 遵循 W3C 标准
    GCanvas 提供了生机勃勃套近似于 H5 Canvas 标准的 JavaScript API,开发职员基于这套 API 能够方便的去做图形绘制、动漫渲染等。开荒的体会与 H5 Canvas 是一丝一毫平等的。
  • 跨平台
    GCanvas 的幼功基于 OpenGL ES, 用 C++ 完结了生龙活虎套用于描述 Canvas 标准API 的接口达成。我们将其称作渲染引擎内核。并通过交叉编写翻译,使得能够适配 Android、iOS 这两大主流移动平台,因而具有跨平台的特点。
  • 高性能
    早期移动平台上 H5 Canvas 去做一些复杂的动漫或娱乐,在 WebView 上的体验十二分数之差。 主要缘由是 WebView 对 GPU 硬件增加速度的帮忙差。高品质则是足够利用了 GPU 硬件的渲染技术,重要反映七个地点:
    • 对此 Android 3.0 早先的系列,Android 的渲染管线是不补助硬件加快的,WebView 中的 Canvas 不能获得 GPU 的图样渲染手艺的支撑。对于那类系统,通过 GCanvas 能够获得更底层的 OpenGL ES 的硬件加速技术升高渲染成效。
    • 链路上来看,收缩了调用路线,提升了渲染品质。使用了 GCanvas 则没有须求通过 WebView 内部的繁缛逻辑管理和图层树渲染,而是让 JavaScript 通过桥接格局直接调用渲染引擎内核(OpenGL ES卡塔 尔(阿拉伯语:قطر‎。

一、Canvas

canvas是HTML5中新扩展二个HTML5标签与操作canvas的javascript API,它能够兑以后网页中做到动态的2D与3D图像技能。<canvas> 标识和 SVG以至 VML 之间的叁个重中之重的差别是,<canvas> 有一个基于 JavaScript 的绘图 API,而 SVG 和 VML 使用多个 XML 文书档案来说述绘图。SVG 绘图超级轻易编辑与转移,但功能明显要弱一些。

canvas能够成功动漫、游戏、图表、图像管理等原本需求Flash完毕的局部效用。、

浏览器支持情状如下:

图片 2

一.   OpenGL简介

  OpenGL(全写Open Graphics Library卡塔尔国是个概念了三个跨编制程序语言、跨平台的编制程序接口的准绳,它用于三个维度图西象(二维的能够卡塔尔国。OpenGL是个专门的学问的图样程序接口,是一个作用强盛,调用方便的最底层图形库。

  关于任何的牵线笔者就不说了。那边小编说一下有OpenGL的能源网址:

  OpenGL官网:

  NeHe网站:

  优良的OpenGL教程:

 

GCanvas 组成

图片 3

如上海体育场地所示 GCanvas 由三层组成 JavaScript 层、插件层、大旨渲染库。

  • JavaScript 层
    JavaScript 提供对外统意气风发的 API,协助 Canvas 2D 和 WebGL 的意义接口。接口扶植境况请仿照效法 API 覆盖。
  • 插件层
    插件层大旨包罗三有些。
    • Bridge 桥接
      JavaScript 到 Native 的桥接,相比主流的秘籍 JSBridge 和 JSBinding。JSBridge 落成形式,如 Cordva、WebviewJavascriptBridge 等。 还足以用 JSBinding 方式来落到实处,如 V8、JavascriptCore 等。实际的使用途景中那二种桥接方式都有支撑。
    • 通用插件
      通用插件包蕴了通用插件接口与得以达成、GCanvas 的保管、渲染命令队列管理、纹理缓存等。支持分裂种类桥接格局下的扩张。
    • 系统适配
      系统适配涉及 Android 和 iOS 对 OpenGL ES 达成的歧异,网络图片下载,字体渲染等方面。
  • 主题渲染库
    基本渲染库满含对外统后生可畏的接口,以至 Contex2D 和 WebGL 模块,底层则是对 OpenGL ES API 等分装。

1.1、创建canvas元素

<canvas id="can" width="800"  height="600">不支持Canvas</canvas>

以上代码创制了三个上升的幅度为800像素,中度为600像素的canvas。不提出接纳CSS样式钦命宽度和中度。
canvas标签中间的内容为代表彰显内容,当浏览器不扶持canvas标签时会显示出来。

成立了canvas成分后,要在canvas元素上面绘制图象,首先必得获得canvas情状上下文:
canvas.getContext(画布上制图的类型)
2d: 表示2维
experimental-webgl: 表示试验版3维
webgl:表示3维

Hello Wolrd示例代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>canvas绘图1</title>
    </head>
    <body>
        <canvas id="canvas1" width="800" height="600"></canvas>
        <script type="text/javascript">
           //获得画布元素
            var canvas1=document.getElementById("canvas1");
            //获得2维绘图的上下文
            var ctx=canvas1.getContext("2d");

            //设置线宽
            ctx.lineWidth=10;
            //设置线的颜色
            ctx.strokeStyle="blue";

            //将画笔移动到00点
            ctx.moveTo(0,0);
            //画线到800,600的坐标
            ctx.lineTo(800,600);

            //执行画线
            ctx.stroke();
        </script>
    </body>
</html>

运行效果:

图片 4

在页面上就展现了一条直线,另存为后正是一张背景透明的png图片。

练习:画一个100X100的圆柱形在画布正中央

二.   OpenGL ES

GCanvas 流程

图片 5

上图是 JavaScript 层渲染主题库的大致流程,关键的多少个流程是初阶化和渲染。

  • 初始化
    开始化,JavaSript 层获取配置决断运转条件,通过桥接层,插件层达成视图和 GCanvas 的始建。进一层成功对 OpenGL 碰到的开始化。
  • 渲染
    渲染,JavaScript 层将装有的API调用托管,况且转变到自定义的吩咐格式(命令类型 + 参数的咬合卡塔尔国。渲染触发则由 JavaScript 放大计时器触发可能手动触发的法子,将那个命令颁发到渲染宗旨库施行。

以 Weex 为例, 绘制图形和图表的测试代码如下。

JavaScript

<template> <div ref="test"> <gcanvas ref="canvas_holder" style="width:750; height:750; background-color:rgba(0, 0, 0, 0.1)"></gcanvas> </div> </template> <script> var GCanvas=require('weex-gcanvas'); var Image=require('weex-gcanvas/gcanvasimage'); module.exports = { mounted: function () { //1、初始化 GCanvas var ref = this.$refs.canvas_holder; var gcanvas = GCanvas.start(ref); var ctx = gcanvas.getContext('2d'); //2、奉行渲染操作 //rect ctx.fillStyle = 'red'; ctx.fillRect(0, 0, 100, 100); //rect ctx.fillStyle = 'black'; ctx.fillRect(100, 100, 100, 100); ctx.fillRect(25, 210, 700, 5); //circle ctx.arc(450, 200, 100, 0, Math.PI * 2, true); ctx.fill(); //drawImage var image = new Image(); image.onload = function(){ ctx.drawImage(image, 100, 330); ctx.drawImage(image, 100+300, 330, 225, 75); } image.src = ''; } }; </script>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<template>
<div ref="test">
<gcanvas ref="canvas_holder" style="width:750; height:750; background-color:rgba(0, 0, 0, 0.1)"></gcanvas>
</div>
</template>
<script>
var GCanvas=require('weex-gcanvas');
var Image=require('weex-gcanvas/gcanvasimage');
module.exports = {
mounted: function () {
  
  //1、初始化 GCanvas
var ref = this.$refs.canvas_holder;
var gcanvas = GCanvas.start(ref);
var ctx = gcanvas.getContext('2d');
//2、执行渲染操作
//rect
ctx.fillStyle = 'red';
ctx.fillRect(0, 0, 100, 100);
 
//rect
ctx.fillStyle = 'black';
ctx.fillRect(100, 100, 100, 100);
ctx.fillRect(25, 210, 700, 5);
 
//circle
ctx.arc(450, 200, 100, 0, Math.PI * 2, true);
ctx.fill();
 
//drawImage
var image = new Image();
image.onload = function(){
ctx.drawImage(image, 100, 330);
ctx.drawImage(image, 100+300, 330, 225, 75);
}
image.src = 'https://www.khronos.org/assets/uploads/ceimg/made/assets/uploads/apis/OpenGL-ES_100px_May16_225_75.png';
}
};
</script>

经过 Weex Playground 运营结果如下

图片 6

具体解析下任何流程。结合插件层和主导渲染库来深入分析。

  • 插件层流程
    以 iOS 为例深入分析,Android 的进程是看似的。
    • GLKView 视图创设,并且与 GCanvas 对象创建绑定关系;
    • GCVCommon,能源加载与纹理绑定;
    • GCanvasPlugin,设置岗位音讯、设备比率、下发渲染命令;
  • 渲染库流程

图片 7

渲染命令的解析,最终通过调用 OpenGL ES 的不二等秘书技或结成情势来兑现 Context2D 和 WebGL 的成效,生成帧缓存,提交给 GPU 渲染,最后在绑定的 GLKView 视图上出示。

  • Context2D,必要落实诸如 G帕特h、GTexture、GTransform、GTriangulate 等来落到实处 Canvas 的渲染效果;
  • WebGL 相对简便易行,WebGL1.0 的 API 基本都能与从 OpenGL ES2.0 找到与之相呼应的 API;

1.2、画线

context.moveTo(x,y)

把画笔移动到x,y坐标,创建新的子路线。

context.lineTo(x,y)
确立上三个点到x,y坐标的直线,如果没有上二个点,则风流罗曼蒂克律moveTo(x,y),把(x,y卡塔 尔(英语:State of Qatar)增多到子路线中。

context.stroke()
描绘子路线

            //设置线宽
            ctx.lineWidth = 10;
            //设置线的颜色
            ctx.strokeStyle = "blue";
            //将画笔移到x0,y0处
            context.moveTo(x0, y0);
            //从x0,y0到x1,y1画一条线
            ontext.lineTo(x1, y1);
            //从x1,y1到x2,y2画条线
            ontext.lineTo(x2, y2);
            //执行填充
            ontext.fill();
            //执行画线
            context.stroke();

 图片 8

结缘javascript事件达成鼠标自由划线:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>canvas绘图2</title>
    </head>

    <body>
        <canvas id="canvas1" width="800" height="600"></canvas>
        <script type="text/javascript">
            //获得画布元素
            var canvas1 = document.getElementById("canvas1");
            //获得2维绘图的上下文
            var ctx = canvas1.getContext("2d");

            //设置线宽
            ctx.lineWidth = 10;
            //设置线的颜色
            ctx.strokeStyle = "blue";

            canvas1.onmousemove=function(e){
                //划线到当前客户端的x与y座标
                ctx.lineTo(e.clientX, e.clientY);
                //执行画线
                ctx.stroke();
            }
        </script>
    </body>

</html>

运作效果:

图片 9

移入手提式有线电电话机端:

图片 10<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> <script> var canvas1; var ctx; var width; var height; var msg; window.onload = function() { canvas1 = document.getElementById("canvas1"); msg = document.getElementById("msg"); ctx = canvas1.getContext("2d"); width = canvas1.width; height = canvas1.height; ctx.fillRect(0, 0, width, height); ctx.moveTo(0, 0); ctx.lineTo(100, 100); ctx.strokeStyle = "red"; ctx.lineWidth = 2; ctx.stroke(); canvas1.onmousemove = function(e) { ctx.lineTo(e.clientX, e.clientY); ctx.stroke(); } canvas1.ontouchmove = function(e) { e.preventDefault(); var touchE=e.targetTouches[0] msg.innerHTML += touchE.clientX+","+touchE.clientY+ "<br/>"; ctx.lineTo(touchE.clientX, touchE.clientY); ctx.stroke(); } canvas1.ontouchstart = function() { msg.innerHTML += "ontouchstart" + "<br/>"; } canvas1.ontouchend = function() { msg.innerHTML += "ontouchend" + "<br/>"; } } </script> </head> <body> <canvas id="canvas1" width="500" height="500">不支持</canvas> <div id="msg"></div> </body> </html> View Code

1.2.1、路径与closePath,beginPath,fill

canvas的景况上下文中总有唯风流倜傥八个路径,路线蕴含三个子路线,这一个子路线可以看成是风流浪漫多级点的聚合。
beginPath()

清空子路径,平常用于起首路线的创导。在两遍巡回地开创路线的经过中,每回在此之前创办时都要调用beginPath函数。

closePath()

假如当前子路线是展开的,就关门它。不然把子路线中的最终叁个点和路子中的第七个点连接起来,变成闭合回路。

canvas绘图有三种格局,风度翩翩种是fill,大器晚成种是stroke,fill是填充,stroke是描边线,fillstyle,strokeStyle内定绘图样式

亲自过问代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>路径与closePath,beginPath,fill</title>
    </head>
    <body>
        <canvas id="canvas1" width="600" height="600"></canvas>
        <script type="text/javascript">
            //获得画布元素
            var canvas1 = document.getElementById("canvas1");
            //获得2维绘图的上下文
            var ctx = canvas1.getContext("2d");

            //设置线宽
            ctx.lineWidth = 10;
            //设置线的颜色
            ctx.strokeStyle = "blue";

            ctx.moveTo(0,0);  //移动画笔到0,0点
            ctx.lineTo(300,300);  //画线到300,300的位置
            ctx.stroke();  //执行描边

            ctx.beginPath();  //清空子路径,一般用于开始路径的创建
            ctx.strokeStyle = "red";
            ctx.moveTo(300,300);
            ctx.lineTo(0,595);  //画线到0,300的位置
            ctx.lineTo(595,595);  //画线到右下角
            ctx.closePath();  //闭合
            //ctx.stroke();  //执行描边
            ctx.fillStyle="lightgreen";  //设置填充颜色
            ctx.fill();  //执行填充
        </script>
    </body>
</html>

运作效果:

图片 11

幼学壮行:试着姣好一个象棋或围棋棋盘。

图片 12

1. OpenGL ES简介

        能够如此说,OpenGL ES是OpenGL的嵌入式本子,OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三个维度图形 API 的子集,针对手提式有线电电话机、PDA和游玩主机等嵌入式设备而安插。该API由Khronos公司概念推广,Khronos是二个图片软硬件行当组织,该组织第意气风发关心图形和多媒体方面包车型大巴怒放规范。

        OpenGL ES的本子差别,首要有多个版本,二个是OpenGL ES 1.X,三个是OpenGL ES 2.0本子,2.0的本子是不包容1.x本子,因为一个是向来作用的管线(1.x卡塔 尔(英语:State of Qatar),其余2.0是可编制程序功用管线,所以众多都不平等,来探视百科是怎么介绍的。OpenGL ES 是从 OpenGL 裁剪的定制而来的,去除了 glBegin/glEnd,四边形(GL_QUADS)、多边形(GL_POLYGONS卡塔 尔(阿拉伯语:قطر‎等复杂图元等居多非相对少不了的特色。经过日久天长更上大器晚成层楼,未来重大有几个版本,OpenGL ES 1.x 针对一定管线硬件的,OpenGL ES 2.x 针对可编程管线硬件。OpenGL ES 1.0 是以 OpenGL 1.3 标准为底子的,OpenGL ES 1.1 是以 OpenGL 1.5 标准为底工的,它们分别又扶植 common 和 common lite三种profile。lite profile只帮助确定地点实数,而common profile既援救定点数又协理浮点数。 OpenGL ES 2.0 则是参照 OpenGL 2.0 标准定义的,common profile宣布于二零零六-8,引入了对可编制程序管线的扶植。

 

GCanvas 测量检验例子

下边给出一些 GCanvas 的案例。

  • GCanvas 与 H5 Canvas 质量比较

图片 13

  • Android 平台,左侧是 GCanvas,左侧是 H5 Canvas。同屏渲染图片越来越多,品质差别越生硬。
  • Hilo 2D
    100 条鱼依靠Hilo 2D 动漫库,满屏鱼的动漫测量检验。
  • Chart Logo渲染
    Chart Logo库的渲染效果依照图表库,分化品种的图形渲染测量试验。

1.3、绘制矩形

context.strokeRect(x,y,width,height)
以x,y为左上角,绘制宽度为width,中度为height的矩形。

context.fillRect(x,y,width,height)
以x,y为左上角,填充宽度为width,高度为height的矩形。

context.clearRect(x,y,width,height)
免除以x,y为左上角,宽度为width,中度为height的矩形区域。

示范代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>绘制矩形</title>
    </head>
    <body>
        <canvas id="canvas1" width="600" height="600"></canvas>
        <script type="text/javascript">
            //获得画布元素
            var canvas1 = document.getElementById("canvas1");
            //获得2维绘图的上下文
            var ctx = canvas1.getContext("2d");

            //设置线宽
            ctx.lineWidth = 10;
            //设置线的颜色
            ctx.strokeStyle ="dodgerblue";

            //画一个空心的矩形,
            ctx.strokeRect(0,0,600,600);

            //画一个实心矩形
            ctx.fillStyle="aquamarine";
            ctx.fillRect(200,200,200,200);

            //清除指定的矩形区域
            ctx.clearRect(250,250,100,100);
        </script>
    </body>
</html>

运作效果: 

图片 14

2. OpenGL ES 2.0概况:

图片 15

支撑的平台:

  - 支持iPad, iPhone3GS 和世襲版本,以致iPodTouch3代和后续版本。

  - 支持Android平台从Android 2.2本子带头。

  - 支持android NDK从Android 2.0本子起始。

  - 支持BlackBerry PlayBook黑莓。

  - 支持Pandora潘多拉调控台的3D库。

  - 被WebGL支撑:浏览器帮助OpenGL

  - 扶植少数最新朝气蓬勃款HUAWEI诺基亚手机,比如N900上的Maemo和N8上的Symbian3塞班3系统。

  - 帮忙多款三星手机,包括Galaxy S和Wave。

  - 使用支付插件能够帮忙Palm webOS。

  - 帮忙Archos 爱可视台式机:70 IT, 101 IT

     opengl es与android有着紧凑的关联,首要体今后那二种接口的迈入轨迹和研发公司。

    近年来关于于OpenGL ES 2.0的质感依然蛮少的,就独有一本书介绍(OpenGL ES 2.0 Programming Guide卡塔尔是马耳他语版,小编有买了一本书,其实不会极不好看懂。你要读书OpenGL ES 最棒先把OpenGL 和 OpenGL Shading Language驾驭一下,毕竟那是幼功的学问内容。

    OpenGL ES 书的网址:

附:GCanvas API 帮助情形

最终附上 GCanvas Contex2D 和 WebGLAPI 的支撑列表,支持常用的接口。别的,WebGL 的 API 近些日子正在做补全开荒,后续会帮助 WebGL1.0 API 的全覆盖。

  • Context2D API
API名称 API类型 状态
fillStyle Attribute getter/setter Implemented
strokeStyle Attribute getter/setter Empty
shadowColor Attribute getter/setter Empty
shadowBlur Attribute getter/setter Empty
shadowOffsetX Attribute getter/setter Empty
shadowOffsetY Attribute getter/setter Empty
createLinearGradient() Method Empty
createPattern() Method Empty
createRadialGradient() Method Empty
addColorStop() Method Empty
isPointInPath() Method Empty
createEvent() Method Empty
toDataURL() Method Empty
lineCap Attribute getter/setter Implemented
lineJoin Attribute getter/setter Implemented
lineWidth Attribute getter/setter Implemented
miterLimit Attribute getter/setter Implemented
font Attribute getter/setter Implemented
textAlign Attribute getter/setter Implemented
textBaseline Attribute getter/setter Implemented
globalAlpha Attribute getter/setter Implemented
globalCompositeOperation Attribute getter/setter Implemented
rect() Method Implemented
fillRect() Method Implemented
strokeRect() Method Implemented
clearRect() Method Implemented
fill() Method Implemented
stroke() Method Implemented
beginPath() Method Implemented
moveTo() Method Implemented
closePath() Method Implemented
lineTo() Method Implemented
clip() Method Implemented
quadraticCurveTo() Method Implemented
bezierCurveTo() Method Implemented
arc() Method Implemented
arcTo() Method Implemented
scale() Method Implemented
rotate() Method Implemented
translate() Method Implemented
transform() Method Implemented
setTransform() Method Implemented
fillText() Method Implemented
strokeText() Method Implemented
measureText() Method Implemented
drawImage() Method Implemented
createImageData() Method Implemented
getImageData() Method Implemented
putImageData() Method Implemented
save() Method Implemented
restore() Method Implemented
getContext() Method Implemented
loadTexture() Method Implemented
unloadTexture() Method Implemented
resetTransform() Method Implemented
render() Method Implemented
capture() Method Implemented
resetClip() Method Implemented
  • WebGL API
API名称 API类型 状态
viewport() Method Implemented
vertexAttribPointer() Method Implemented
vertexAttrib2fv() Method Implemented
useProgram() Method Implemented
uniformMatrix4fv() Method Implemented
uniformMatrix3fv() Method Implemented
uniformMatrix2fv() Method Implemented
uniform4iv() Method Implemented
uniform4i() Method Implemented
uniform4fv() Method Implemented
uniform4f() Method Implemented
uniform3iv() Method Implemented
uniform3i() Method Implemented
uniform3fv() Method Implemented
uniform3f() Method Implemented
uniform2iv() Method Implemented
uniform2i() Method Implemented
uniform2fv() Method Implemented
uniform2f() Method Implemented
uniform1iv() Method Implemented
uniform1i() Method Implemented
uniform1fv() Method Implemented
uniform1f() Method Implemented
texParameteri() Method Implemented
texImage2D() Method Implemented
shaderSource() Method Implemented
scissor() Method Implemented
renderbufferStorage() Method Implemented
pixelStorei() Method Implemented
linkProgram() Method Implemented
lineWidth() Method Implemented
getUniformLocation() Method Implemented
getShaderParameter() Method Implemented
getAttribLocation() Method Implemented
generateMipmap() Method Implemented
frontFace() Method Implemented
framebufferTexture2D() Method Implemented
flush() Method Implemented
enableVertexAttribArray() Method Implemented
enable() Method Implemented
drawElements() Method Implemented
disableVertexAttribArray() Method Implemented
disable() Method Implemented
depthMask() Method Implemented
depthFunc() Method Implemented
deleteTexture() Method Implemented
deleteShader() Method Implemented
deleteRenderbuffer() Method Implemented
deleteProgram() Method Implemented
deleteFramebuffer() Method Implemented
deleteBuffer() Method Implemented
cullFace() Method Implemented
createTexture() Method Implemented
createShader() Method Implemented
createRenderbuffer() Method Implemented
createProgram() Method Implemented
createFramebuffer() Method Implemented
createBuffer() Method Implemented
compileShader() Method Implemented
colorMask() Method Implemented
clearStencil() Method Implemented
clearDepth() Method Implemented
clearColor() Method Implemented
clear() Method Implemented
bufferData() Method Implemented
blendFuncSeparate() Method Implemented
blendFunc() Method Implemented
blendEquationSeparate() Method Implemented
blendEquation() Method Implemented
bindRenderbuffer() Method Implemented
bindFramebuffer() Method Implemented
bindBuffer() Method Implemented
bindAttribLocation() Method Implemented
attachShader() Method Implemented
activeTexture() Method Implemented
validateProgram() Method Empty
texSubImage2D() Method Empty
texParameterf() Method Empty
stencilOpSeparate() Method Empty
stencilOp() Method Empty
stencilMaskSeparate() Method Empty
stencilMask() Method Empty
stencilFuncSeparate() Method Empty
stencilFunc() Method Empty
sampleCoverage() Method Empty
readPixels() Method Empty
polygonOffset() Method Empty
isTexture() Method Empty
isShader() Method Empty
isRenderbuffer() Method Empty
isProgram() Method Empty
isFramebuffer() Method Empty
isEnabled() Method Empty
isContextLost() Method Empty
isBuffer() Method Empty
getVertexAttribOffset() Method Empty
getVertexAttrib() Method Empty
getUniform() Method Empty
getTexParameter() Method Empty
getSupportedExtensions() Method Empty
getShaderSource() Method Empty
getShaderPrecisionFormat() Method Empty
getShaderInfoLog() Method Empty
getRenderbufferParameter() Method Empty
getProgramParameter() Method Empty
getProgramInfoLog() Method Empty
getParameter() Method Empty
getFramebufferAttachmentParameter() Method Empty
getExtension() Method Empty
getError() Method Empty
getContextAttributes() Method Empty
getBufferParameter() Method Empty
getAttachedShaders() Method Empty
getActiveUniform() Method Empty
getActiveAttrib() Method Empty
drawArrays / drawArraysInstancedANGLE() Method Empty
detachShader() Method Empty
depthRange() Method Empty
copyTexSubImage2D() Method Empty
copyTexImage2D() Method Empty
compressedTexSubImage2D() Method Empty
compressedTexImage2D() Method Empty
checkFramebufferStatus() Method Empty
bufferSubData() Method Empty
blendColor() Method Empty
bindTexture() Method Undefined
commit() Method Undefined
finish() Method Undefined
framebufferRenderbuffer() Method Undefined
hint() Method Undefined

1 赞 1 收藏 评论

图片 16

1.4、绘制圆弧

context.arc(x,y,radius,startAngle,endAngle,anticlockwise)

arc方法用来绘制风姿罗曼蒂克段圆弧路线,以(x,y)圆心地方radius为半径、startAngle为初步弧度、endAngle为截至弧度来,而在画圆弧时的转动方向则由最终壹个参数 anticlockwise 来钦点,倘使为 true 就是逆时针,false 则为顺时针,Math.PI * 2 恰好为十七日。

演示代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>绘制圆弧</title>
    </head>
    <body>
        <canvas id="canvas1" width="600" height="600"></canvas>
        <script type="text/javascript">
            //获得画布元素
            var canvas1 = document.getElementById("canvas1");
            //获得2维绘图的上下文
            var ctx = canvas1.getContext("2d");

            //设置线宽
            ctx.lineWidth = 10;
            //设置线的颜色
            ctx.strokeStyle ="dodgerblue";

            //画一段圆弧,300,300是圆心,200是半径,0是超始角度,Math.PI是结束角度,是否逆时钟
            ctx.arc(300,300,200,0,Math.PI,false);
            //闭合
            ctx.closePath();
            ctx.stroke();
            ctx.beginPath();
            ctx.fillStyle="aquamarine";
            ctx.arc(300,300,100,0,Math.PI*2,false);
            ctx.fill();
        </script>
    </body>
</html>

运维效果:

 图片 17

练习:

a、模拟电子石英手表的时,分,秒

b、模拟水波,四个土褐的显示器,多个从基本随机产生彩色的圈不断的加大,接触到荧屏甘休。

三. WebGL

1.5、绘制图像

context.drawImage(image,x,y)

把image图像绘制到画布上x,y坐标地点。

context.drawImage(image,x,y,w,h)

把image图像绘制到画布上x,y坐标位置,图像的上升的幅度是w,中度是h。

context.drawImage(image,sx,sy,sw,sh,dx,dy,dw,dh)
截取image图像以sx,sy为左上角坐标,宽度为sw,中度为sh的一块矩形区域绘制到画布上以dx,dy坐标地方,图像宽度是dw,中度是dh。
其中image可以是htmlImageElement元素,htmlcanvasElement元素,htmlVideoElement元素

演示代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>绘制图像</title>
    </head>
    <body>
        <canvas id="canvas1" width="600" height="600"></canvas>
        <img src="img/apple.png" id="apple" hidden="hidden" />
        <script type="text/javascript">
           //必须当页面中的图片资源加载成功
            window.onload = function() {
                //获得画布元素
                var canvas1 = document.getElementById("canvas1");
                //获得2维绘图的上下文
                var ctx = canvas1.getContext("2d");

                //设置线宽
                ctx.lineWidth = 10;
                //设置线的颜色
                ctx.strokeStyle = "dodgerblue";
                ctx.moveTo(0,0);
                ctx.strokeRect(0,0,600,600);

                //图片
                var apple = document.getElementById("apple");
                //将图像绘制到画布的,图片的左上角
                ctx.drawImage(apple, 300-52, 300-63);
            }
        </script>
    </body>

</html>

运营效果:

图片 18

1. WebGL 简介

        WebGL是黄金时代种3D绘图规范,这种绘图才具规范允许把JavaScript和OpenGL ES 2.0结合在一齐,通过扩大OpenGL ES 2.0的一个javascript绑定,WebGL可以为HTML5 Canvas提供硬件3D加快渲染,那样Web开荒职员就足以依靠系统显卡来在浏览器里更通畅地显示3D场景和模型了,还能够创立复杂的导航和数码视觉化。分明,WebGL技艺标准免去了开销网页专用渲染插件的分神,可被用来创设具备复杂3D结构的网站页面,甚至足以用来规划3D网络游戏之类。

        WebGL康健地化解了现存的Web人机联作式三个维度动漫的七个难题:第意气风发,它经过HTML脚本自家落成Web人机联作式三个维度动画的制作,没有必要任何浏览器插件帮助;第二,它利用底层的图样硬件加速功用扩充的图片渲染,是透过集合的、标准的、跨平台的OpenGL接口完结的。

1.6、绘制文字

context.fillText(text,x,y,[maxWidth])

在canvas上填写文字,text表示要求绘制的文字,x,y分别代表绘制在canvas上的横,纵坐标,最后二个参数可选,表示展现文字的最大开间,防止文字展现溢出。

context.strokeText(text,x,y,[maxWidth])

在canvas上描边文字,参数的含义同fillText
接受context.font属性设置字体
context.font='italic bolder 48px 黑体';

示范代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>绘制文字</title>
    </head>
    <body>
        <canvas id="canvas1" width="600" height="600"></canvas>
        <img src="img/apple.png" id="apple" hidden="hidden" />
        <script type="text/javascript">
           //必须当页面中的图片资源加载成功
            window.onload = function() {
                //获得画布元素
                var canvas1 = document.getElementById("canvas1");
                //获得2维绘图的上下文
                var ctx = canvas1.getContext("2d");

                //设置线宽
                ctx.lineWidth = 1;
                //设置线的颜色
                ctx.strokeStyle = "dodgerblue";
                ctx.moveTo(0,0);
                ctx.strokeRect(0,0,600,600);

                //绘制文字
                //描边
                ctx.font="50px microsoft yahei";
                ctx.strokeText("Hello Zhangguo",20,100);
                //填充
                ctx.fillStyle=
                ctx.fillText("Hello Zhangguo",20,200);
            }

        </script>
    </body>

</html>

运维结果:

图片 19

2. WebGL 的例子

     其实自身有做了三个WebGL的例证,是用WebGL画了叁个色立体,当然方今还相当粗劣,轻易的来讲,它便是html5+OpenGL ES的组合,但是Html5还不成熟,所以有关WebGL的累累例子还只是在不成熟的DEMO上,可是小编想那在其后还生龙活虎种倾向,当然IT业何人也说不清楚,WebGL能够说是OpenGL的网页版,近年来有关WebGL的图书照旧尚未的,官方网站有三个是上学WebGL的教程,当然是韩文了。。呵呵

一时一刻IE还不协助WebGL,有FireFox还也是有Google浏览器等帮忙。。。

10大WebGL应用示范网址案例http://www.fadianzhan.com/index.php/archives/208

读书网址:http://learningwebgl.com/blog/

 

1.7、随机颜色与简短动漫

首要结合随机格局与计时器、时钟完毕简单的卡通片。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>随机颜色与简单动画</title>
    </head>
    <body>
        <canvas id="canvas1" width="1000" height="650"></canvas>
        <img src="img/apple.png" id="apple" hidden="hidden" />
        <script type="text/javascript">
            var magicCircle = {
                randomColor: function() {
                    return "#" + parseInt(Math.random() * 16777216).toString(16);
                },
                getNum: function(min, max) {
                    return parseInt(Math.random() * (max - min)) + min;
                },
                r: 10,
                run: function() {
                    //获得画布元素
                    this.canvas1 = document.getElementById("canvas1");
                    //获得2维绘图的上下文
                    this.ctx = this.canvas1.getContext("2d");
                    //运行
                    setInterval(this.draw, 100);
                    this.bindEvent();
                },
                draw: function() {
                    magicCircle.ctx.beginPath();
                    magicCircle.ctx.lineWidth = magicCircle.getNum(1,10);
                    magicCircle.ctx.strokeStyle = magicCircle.randomColor();
                    magicCircle.ctx.arc(magicCircle.getNum(1,1000), magicCircle.getNum(1,600), magicCircle.r, 0, Math.PI * 2);
                    magicCircle.ctx.stroke();
                    magicCircle.r += 10;
                    if(magicCircle.r > 300) magicCircle.r = 10;
                },
                bindEvent:function()
                {
                    this.canvas1.onmousemove=function(e){
                        magicCircle.ctx.lineWidth = magicCircle.getNum(1,10);
                        magicCircle.ctx.strokeStyle = magicCircle.randomColor();
                        magicCircle.ctx.arc(e.clientX, e.clientY, magicCircle.r, 0, Math.PI * 2);
                        magicCircle.ctx.stroke();
                        magicCircle.r += 10;
                        if(magicCircle.r > 300) magicCircle.r = 10;
                    }
                }
            };

            magicCircle.run();
        </script>
    </body>

</html>

运维效果:

图片 20

二、WebGL

WebGL(全写Web Graphics Library卡塔尔国是意气风发种3D绘图标准,这种绘图本领标准允许把JavaScript和OpenGL ES 2.0整合在生机勃勃道,通过扩展OpenGL ES 2.0的一个JavaScript绑定,WebGL可以为HTML5 Canvas提供硬件3D加速渲染,这样Web开辟职员就能够依赖系统显卡来在浏览器里更流畅地展现3D场景和模型了,还能够创建复杂的领航和数目视觉化。显著,WebGL本事规范免去了开支网页专项使用渲染插件的分神,可被用于创立具备复杂性3D结构的网址页面,甚至足以用来统筹3D网络游戏之类。

WebGL完美地减轻了现有的Web人机联作式三个维度动漫的四个难题:

首先,它通过HTML脚本小编达成Web人机联作式三个维度动漫的制作,没有须要任何浏览器插件扶持;

其次,它应用底层的图片硬件加速功用举办的图纸渲染,是由此联合的、标准的、跨平台的OpenGL接口达成的。

浅显说WebGL中canvas绘图中的3D版本。因为原生的WebGL很复杂,大家平常会接纳部分三方的库,如three.js等,那个库多数用于HTML5娱乐开拓。

图片 21

Three.js的现身说法代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Three.js</title>
    </head>
    <body>
        <script src="js/three.min.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            var scene = new THREE.Scene();

            var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);

            var renderer = new THREE.WebGLRenderer();

            renderer.setSize(window.innerWidth, window.innerHeight);

            document.body.appendChild(renderer.domElement);
            var geometry = new THREE.CubeGeometry(1, 1, 1);
            var material = new THREE.MeshBasicMaterial({
                color: 0x0000ff
            });
            var cube = new THREE.Mesh(geometry, material);
            scene.add(cube);
            camera.position.z = 5;

            function render() {
                requestAnimationFrame(render);
                cube.rotation.x += 0.1;
                cube.rotation.y += 0.1;
                renderer.render(scene, camera);
            }
            render();
        </script>
    </body>

</html>

three.js示例运维结果:

图片 22

2.1、HTML5玩耍开垦

乘胜HTML5的前进与硬件品质的进级HTML5游乐支付尤其受到游戏开垦者的尊重,因为WebGL存在一定的复杂度,全数产生了大多安然无恙的开源HTML5玩耍引擎,下边是github上开源免费的HTML5嬉戏引擎:

Name Updated Time Watch Star Fork Commits Contributors
Three.js 2016/3/28 1590 24041 7768 14825 588
Phaser 2016/2/18 837 11782 4095 4423 206
Pixi.js 2016/3/17 656 10063 1942 2860 161
egret 2016/3/30 215 1275 303 4268 25
enchantjs 2016/1/4 185 1445 301 1683 27
crafty 2016/3/21 134 2050 473 1807 106
turbulenz 2015/11/23 271 2544 406 1737 13
cocos2d-js 2016/3/30 162 1207 469 4559 45
playcanvas 2016/3/30 164 1784 368 5142 16
melonjs 2016/3/30 13 1579 371 3907 40
quintus 2016/2/3 136 1023 412 256 33
Hilo 2016/2/3 173 2449 340 20 2

2.2.1、Cocos2D-HTML5

开源,无需付费的HTML5 2D游戏支付框架,Cocos2D具有多少个首要版本,包涵Cocos2D-HTC、Cocos2D-X,以致被社区遍布主见的Cocos2D-HTML5和JavaScriptbindings for Cocos2D-X。CocoStudio工具集是开源游戏引擎。特点:与Cocos2d的API相仿,轻松上手、普通话文书档案齐全,资料丰硕、基于MIT合同的开源引擎。它由本国Cocos2d-x中坚团队骨干开辟和保证,行当首脑、HTML5矢志不移拉动者谷歌(Google卡塔 尔(阿拉伯语:قطر‎为那些连串提供支持。

github:

官网:

HelloWorld示例:

<!DOCTYPE html>
<html>
<head>
    <title>Hello Cocos2d-JS</title>
</head>
<body>   
    <canvas id="gameCanvas" width="800" height="450"></canvas>
    <script type="text/javascript" src="cocos2d-js-v3.12-lite.js" charset="UTF-8"></script>
    <script type="text/javascript">
          window.onload = function(){
              cc.game.onStart = function(){
                  //load resources
                  cc.LoaderScene.preload(["HelloWorld.png"], function () {
                      var MyScene = cc.Scene.extend({
                          onEnter:function () {
                              this._super();
                              var size = cc.director.getWinSize();
                              var sprite = cc.Sprite.create("HelloWorld.png");
                              sprite.setPosition(size.width / 2, size.height / 2);
                              sprite.setScale(0.8);
                              this.addChild(sprite, 0);

                              var label = cc.LabelTTF.create("Hello World", "Arial", 40);
                              label.setPosition(size.width / 2, size.height / 2);
                              this.addChild(label, 1);
                          }
                      });
                      cc.director.runScene(new MyScene());
                  }, this);
              };
              cc.game.run("gameCanvas");
          };
    </script>
</body>
</html>

运作结果:

图片 23

2.2.2、Egret(白鹭引擎卡塔 尔(阿拉伯语:قطر‎

是四个依据TypeScript语言开垦的HTML5玩耍引擎,围住神经猫正是用那些框架开荒的。

图片 24

官网:

特点:

a)、基于TypeScript及JavaScript手艺,辅助Flash到Egret高效转变,引擎、工具、运营时完全专业流
b)、跨平台:HTML5,iOS,Android,Windows Phone
c)、全汉语文书档案:文书档案与开采者社区全称
d)、开源无偿,BSD开源合同、任性定制及扩充

三、SVG

SVG可缩放矢量图形(Scalable Vector Graphics)是根据可扩展标志语言(XML卡塔 尔(英语:State of Qatar),用于描述二维矢量图片的生机勃勃种图形格式。SVG是W3C("World Wide Web ConSortium" 即 " 国际网络标准组织")在二零零三年八月制订的生龙活虎种新的二维矢量图形格式,也是规范中的互联网矢量图形规范。SVG严厉固守XML语法,并用文本格式的描述性语言来陈说图像内容,因而是意气风发种和图像分辨率非亲非故的矢量图形格式。SVG 于 二〇〇三 年 1 月 14 日成为 W3C 推荐标准。

图片 25

特点:

1.专断放缩
顾客能够Infiniti定缩放图像展现,而不会毁掉图像的清晰度、细节等。
2.文本独立
SVG图像中的文字独立于图像,文字保留可编写制定和可检索的情形。也不会再有字体的界定,客商系统正是未有设置某一字体,也拜候到和她们创设时完全相仿的镜头。
3.很小文件
全部来说,SVG文件比那多少个GIF和JPEG格式的文书要小非常多,因此下载也异常的快。
4.超强展现效果
SVG图像在显示器上海市总是边缘清晰,它的清晰度符合任何显示屏分辨率和打字与印刷分辨率。
5.拔尖颜色调节
SVG图像提供叁个1600万种颜色的调色板,帮助ICC颜色描述文件标准、中华VGB、线X填充、渐变和蒙版。
6.人机联作X和智能化。SVG直面的关键难点一个是怎么样和已经攻陷首要市场占有率的矢量图形格式Flash竞争的标题,另八个难题便是SVG的本地运转境况下的厂商帮助程度。

浏览器帮助:

Internet Explorer9,火狐,谷歌Chrome,Opera和Safari都支持SVG。
IE8和前期版本都亟需叁个插件 - 如Adobe SVG浏览器,那是无需付费提供的。

3.1、SVG Hello Wrold

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>SVG Hello World</title>
    </head>
    <body>
        <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
            <circle cx="100" cy="100" r="30" stroke="blue" stroke-width="2" fill="red" />
        </svg>
    </body>
</html>

运作结果:

图片 26

svg是多个新添标签,xmlns是命名空间,version是svg的本子,circle标签便是对svg要出示的图像进行描述,cx与cy表示地点,r表示半径,stroke是描边样式,stroke-width就线宽,fill是填写样式。浏览器宽容性很好:

图片 27

3.2、三种引进SVG的措施

SVG 文件可透过以下标签嵌入 HTML 文书档案:<embed>、<object> 恐怕<iframe>。
SVG的代码能够一贯嵌入到HTML页面中,或你可以直接链接到SVG文件

引进格局如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>引入SVG的方法</title>
        <style type="text/css">
            body{
                background:url(me.svg);
            }
        </style>
    </head>
    <body>
        <h2>embed</h2>
        <embed src="me.svg" type="image/svg+xml" width="108" height="108" /> 优势:所有主要浏览器都支持,并允许使用脚本 缺点:不推荐在HTML4和XHTML中使用(但在HTML5允许)
        <h2>object</h2>
        <object data="me.svg" type="image/svg+xml" width="108" height="108"></object> 优势:所有主要浏览器都支持,并支持HTML4,XHTML和HTML5标准 缺点:不允许使用脚本。
        <h2>iframe</h2>
        <iframe src="me.svg" frameborder="0" width="108" height="108"></iframe> 优势:所有主要浏览器都支持,并允许使用脚本 缺点:不推荐在HTML4和XHTML中使用(但在HTML5允许)
        <h2>直接嵌入</h2>
        <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="108" height="108">
            <circle cx="54" cy="54" r="50" stroke="blue" stroke-width="2" fill="blue" />
        </svg>
        在Firefox、Internet Explorer9、谷歌Chrome和Safari中,你可以直接在HTML嵌入SVG代码。 注意:SVG不能直接嵌入到Opera。
        <h2>image</h2>
        <img src="me.svg" width="108" height="108" />
    </body>

</html>

运营结果:

图片 28

3.3、画直线

演示代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Line</title>
    </head>
    <body>
        <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="500" height="500">
            <line x1="0" y1="0" x2="500" y2="500" style="stroke:rgb(0,0,255);stroke-width:3" />
        </svg>
    </body>
</html>

参数:

x1 属性在 x 轴定义线条的发端
y1 属性在 y 轴定义线条的伊始
x2 属性在 x 轴定义线条的终结
y2 属性在 y 轴定义线条的甘休

运维结果:

图片 29

3.4、画椭圆

示范代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>椭圆</title>
    </head>
    <body>
        <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="500" hidden="500">
            <ellipse cx="300" cy="80" rx="100" ry="50" style="fill:yellow;stroke:dodgerblue;stroke-width:5" />
        </svg>
    </body>
</html>

参数:

CX属性定义的扁圆形中央的x坐标
CY属性定义的椭圆中央的y坐标
奥迪Q5X属性定义的水平半径
WranglerY属性定义的垂直半径

运作结果:

图片 30

3.5、文本与矩形

演示代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>文本与矩形</title>
    </head>
    <body>
        <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="800" height="500">
            <text x="0" y="50" fill="blue" style="font-size:30px; font-family: 'microsoft yahei';">My Teacher Zhangguo</text>
            <rect x="40" y="60" width="260" height="260" style="fill:blue;stroke:pink;stroke-width:5;
fill-opacity:0.1;stroke-opacity:0.9" />
        </svg>
    </body>
</html>

 

运维结果:

 图片 31

3.6、向下包容与图标

IE8并不间接宽容SVG,假诺急需出示则足以行使插件,如若不应用插件也可以有向下包容的点子。

以身作则代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>向下兼容与图标</title>
    </head>
    <body>
        <svg width="78" height="78">
            <image xlink:href="money.svg" width="78" height="78" src="money.png"></image>
        </svg>
    </body>
</html>

 

运营结果:

图片 32

图片 33

参数:

image本人正是svg中引进外部图像的因素,适逢其时在ie8下又能被解析。

四、示例下载

演示代码:

学习计算(四卡塔 尔(阿拉伯语:قطر‎——canvas绘图、WebGL、SVG,html5webgl 生机勃勃、Canvas canvas是HTML5中新扩张三个HTML5标签与操作canvas的javascript API,它能够实今后网...

本文由金沙棋牌发布于金沙棋牌官方平台,转载请注明出处:学习总结,渲染引擎介绍

关键词:

上一篇:js模拟类继承小例子,js面向对象基础

下一篇:没有了