WebGL 探秘 (1)

2-1510291500300-L.jpg

人类是无利不起早,有时候我们总是避讳不谈利益而谈理想和最求,但是相对这些都没有利益驱动做一件事更靠谱。要知道一个简单道理就是利益是人类进步的原动力,是一切行动的原动力和目的。区块链也是建立承认利益的基础上的,因为犯错成本太高所以才不会破坏。

有用我们才会去学习,在开始之前我们需要明确我们学习的目的。所以先看一看学习了 webGL 我们会得到哪些利益,直白地说就是可观薪酬,获取被仰慕的眼神,我们还要什么这些就够了。先看看 webGL 的应用吧。

商业上 WebGL 应用

  • 人体结构 zygotebody

    body-browser-webgl-01.jpg

  • web 游戏

    RCR_WebGL_02.jpeg.e4a8168569202aa419c42c8d84a2e4d6.jpeg

  • 建筑表现

    151203_wbgl_clipping_new.png

  • 大数据可视化

  • 物理展示

WebGL 定义

WebGL 是一项利用 javascript API 来呈现 3D 电脑图形的技术,与之前通过浏览器外挂程序不同,WegGL 是只需要编写网页代码就可以实现 3D 图像的展示。

WebGL 是基于 OpenGL ES 2.0 提供了 3D 图像的程序界面。
现在 html5 Canvas 支持 webGL 的功能。

什么是 OpenGL ES(OpenGL for Embedded Systems)

是 OpenGL 三维图像 API 的子集,针对手机、PDA 和游戏机等嵌入式设备而设计的。

什么是 OpenGL

OpenGL(全写Open Graphics Library)是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。

为什么是 WebGL 而不是 canvas 和 SVG

与 canvas 和 SVG 不同的是 WebGL 通过 webGL javascript API 连接 javascript 和 GPU 进行编程。GPU 绘图的渲染工作大部分在 GPU 上完成,减少浏览器的压力,从而提供了性能。所以使用 WebGL 是要在浏览器端进行 3D 渲染和大数据可视化唯一的选择。

检查 webGL 支持度

访问这个网站 https://get.webgl.org 可以�检查浏览器是否支持 WegGL

  • 如果浏览器不支持 webGL ,此网站会建议您安装支持 WebGL 的浏览器
  • 如果浏览器支持 webGL ,还是无法启用 webGL 那可能是因为您网卡不支持 webGL,这的多老网卡呀,也可能与显卡的驱动有关系。

还有可能 webGL 不好用的情况是浏览器支持 webGL,显卡也没有问题,那么我们就需要检查浏览器的设置,这里先以 Chrome 浏览器为例

  • chrome 浏览器有关 webGL 的设置
    1. 在浏览器地址栏输入 chrome://flags
    2. Ctrl+F 开启搜索栏,在搜索栏输入 "rendering list" 后找到 "overwrite rendering list" 然后将 enable 修改为 disable,这样就会对不受支持的系统设定为启用 GPU 加速处理功能。

webGL 开发流程

1.搭建环境

  1. 检查浏览器是否支持 html5 特性,对于 webGL 的开发人员所有工作都是在 canvas
<canvas id="game-surface">
        浏览器不支持 html5
</canvas>
  1. 给 canvas 指定宽度和高度,我们所有的工作都在这个窗口内完成。
<canvas id="game-surface" width="800" height="600">
        浏览器不支持 html5
    </canvas>
    <br/>
    <i>Demo webGL</i>
  1. 创建 app.js 然后在 html 中引入 app.js 同时在 onload 方法加载 InitDemo() 方法
<body onload="InitDemo()">
    <canvas id="game-surface" width="800" height="600">
        浏览器不支持 html5
    </canvas>
    <br/>
    <i>Demo webGL</i>
    <script src="app.js"></script>
</body>

我们首先在 InitDemo 方法中打印一句话,看看是否被执行到

function InitDemo(){
    console.log(111)
}
  1. 获取 webGL 对象,canvas 通过提供 context 来作为一个接口供开发者使用这个接口来对 canvas 进行绘制。如何传入 2d 可以获取绘制2D 图形的 context。chrome 和 firefox 可以通过 webgl 获取 webGL 的 context,而 IE 需要通过传入 experimental-webgl 来获取 webgl。说道这里还有一些小故事,微软开始是不支持 webgl,声称原因是 webgl 的安全性存在问题,其实微软是存在一些私心的,因为 openGL 是与微软的directX 是同一类型产品,但是最近大势所趋微软的浏览器也不得不支持 webGL。
function InitDemo(){
    var canvas = document.getElementById("game-surface");
    var gl = canvas.getContext('webgl');

    if(!gl){
        gl = canvas.getContext('experimental-webgl');
    }

    if(!gl){
        alert("您的不支持 webGL")
    }
}

通过 gl.viewport 我们的 webGL 在 canvas 绘制相对的窗口的尺寸。每次绘制图片前我们都需要清空一下画布。会调用 clear 方法来清理画布。

canvas.width = window.innerWidth;
    canvas.height = window.innerWidth;

    gl.viewport(0,0,window.innerWidth,window.innerHeight)
    gl.clearColor(0.75,0.85,0.8,1.0)
    gl.clear();
app.js:14 Uncaught TypeError: Failed to execute 'clear' on 'WebGLRenderingContext': 1 argument required, but only 0 present.
  • color buffer
  • depth buffer
gl.clearColor(0.75,0.85,0.8,1.0);
    gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);

这里做练习我们就两个 gl.COLOR_BUFFER_BIT 和 gl.DEPTH_BUFFER_BIT 都定义了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容

  • 谈起WebGL可能有一些人比较陌生,实际上WebGL是一种3D绘图标准,这种绘图技术标准允许把JavaScript...
    三石青韦阅读 18,209评论 2 11
  • 本篇文章是基于谷歌有关Graphic的一篇概览文章的翻译:http://source.android.com/de...
    lee_3do阅读 7,123评论 2 21
  • 本系列所有文章目录 这是学习WebGL系列的第一篇文章,我们将了解什么是WebGL以及使用WebGL的一个简单例子...
    handyTOOL阅读 5,231评论 4 10
  • 好久不见,你还好吗? 那些夜深人静时你不经意想起的人和事; 那些你端起酒杯时脑海里喧嚣而过的画面; 那些你走过的江...
    paperfree阅读 194评论 0 2
  • 本文是lhyt本人原创,希望用通俗易懂的方法来理解一些细节和难点。转载时请注明出处。文章最早出现于本人github...
    lhyt阅读 1,787评论 0 1