<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>画一个点</title>
</head>
<body onload="main()">
<canvas id="webgl" width="200" height="200">
</canvas>
</body>
<script type="text/javascript" src="webgl01.js">
</script>
</html>
function main(){
var canvas = document.getElementById('webgl');//获得canvas元素 var param = ['webgl', 'experimental-webgl', 'webkit-3d', 'moz-webgl']; var gl;
for (var i = 0; i < param.length; i++) {
gl = canvas.getContext(param[i]);//创建webgl context(得到画图区域) if (gl) {
break;
}
} if (!gl) {
console.log('浏览器不支持WEBGL!');
} gl.clearColor(0.0, 0.0, 0.0, 1.0);//指定颜色 gl.clear(gl.COLOR_BUFFER_BIT);//使用指定的颜色清空画图区域 //编写vertex shader,vertex shader指定特性(位置、大小、颜色等)
//gl_Position指定了点的位置,在三维空间,有XYZ三个轴的坐标,最后一个是透明度,0-1,1代表完全不透明,0则是完全透明
//vec4,是表示一个有四个参数的向量,在WebGL中均采用此类名称,vec表示vector类别,4表示接收四个参数
//每一个参数必须是float类型的,即要加小数点,WebGL采用严格类型,不能使用整型参数
//gl_PointSize 定义点的大小,同样是float类型
var vShaderSource = 'void main(){ \n' +
' gl_Position = vec4(0.0, 0.0, 0.0, 1.0); \n' +
' gl_PointSize = 10.0; \n' +
'} \n'; //编写frament shader,可以理解成对每个像素进行处理
//gl_FragColor接收vec4类型的参数,即RGBA,RGB为三原色,最后代表透明度
var fShaderSource = 'void main(){ \n' +
' gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); \n' +
'} \n'; //其实这一段非常像C,编写源代码,编译,链接...
var vShader = gl.createShader(gl.VERTEX_SHADER);//创建shader
gl.shaderSource(vShader, vShaderSource);//把shader source关联到shader上
gl.compileShader(vShader);//编译shader
var vCompiled = gl.getShaderParameter(vShader, gl.COMPILE_STATUS); var fShader = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(fShader, fShaderSource);
gl.compileShader(fShader);
var fCompiled = gl.getShaderParameter(fShader, gl.COMPILE_STATUS); var program = gl.createProgram();
gl.attachShader(program, vShader);//将编译完的vertex shader和fragment shader关联到创建的program上
gl.attachShader(program, fShader); gl.linkProgram(program);//链接program
var linked = gl.getProgramParameter(program, gl.LINK_STATUS); gl.useProgram(program); gl.drawArrays(gl.POINTS, 0, 1);//第一个参数POINTS表示画点,第二个参数根据前面指定的gl_Position,从第0个元素开始,因为每个点需要三个坐标,即(0.0, 0.0, 0.0),第三个参数表示画一个
}

其中红色加粗的均为WebGL中的方法,为了方便理解,并未对代码结构作规划,重点在于理解WebGL。

Hello Point——WebGL的更多相关文章

  1. Webgl的2D开发方案(一)spritebatcher

    使用TypeScript 和 webgl 开发   第一步:实现了SpriteBatcher 例子如下 http://oak2x0a9v.bkt.clouddn.com/test/index.html ...

  2. HTML5 学习总结(四)——canvas绘图、WebGL、SVG

    一.Canvas canvas是HTML5中新增一个HTML5标签与操作canvas的javascript API,它可以实现在网页中完成动态的2D与3D图像技术.<canvas> 标记和 ...

  3. 数百个 HTML5 例子学习 HT 图形组件 – WebGL 3D 篇

    <数百个 HTML5 例子学习 HT 图形组件 – 拓扑图篇>一文让读者了解了 HT的 2D 拓扑图组件使用,本文将对 HT 的 3D 功能做个综合性的介绍,以便初学者可快速上手使用 HT ...

  4. 基于 WebSocket 实现 WebGL 3D 拓扑图实时数据通讯同步(二)

    我们上一篇<基于 WebSocket 实现 WebGL 3D 拓扑图实时数据通讯同步(一)>主要讲解了如何搭建一个实时数据通讯服务器,客户端与服务端是如何通讯的,相信通过上一篇的讲解,再配 ...

  5. 基于 WebSocket 实现 WebGL 3D 拓扑图实时数据通讯同步(一)

    今天没有延续上一篇讲的内容,穿插一段小插曲,WebSocket 实时数据通讯同步的问题,今天我们并不是很纯粹地讲 WebSocket 相关知识,我们通过 WebGL 3D 拓扑图来呈现一个有趣的 De ...

  6. 基于HTML5的WebGL应用内存泄露分析

    上篇(http://www.hightopo.com/blog/194.html)我们通过定制了CPU和内存展示界面,体验了HT for Web通过定义矢量实现图形绘制与业务数据的代码解耦及绑定联动, ...

  7. 基于WebGL 的3D呈现A* Search Algorithm

    http://www.hightopo.com/demo/astar/astar.html 最近搞个游戏遇到最短路径的常规游戏问题,一时起兴基于HT for Web写了个A*算法的WebGL 3D呈现 ...

  8. 20个不可思议的 WebGL 示例和演示

    WebGL 是一项在网页浏览器呈现3D画面的技术,有别于过去需要安装浏览器插件,通过 WebGL 的技术,只需要编写网页代码即可实现3D图像的展示.WebGL 可以为 Canvas 提供硬件3D加速渲 ...

  9. webgl 循环传参画10个点

    function main(){ var canvas = document.getElementById("webgl"); var gl = getWebGLContext(c ...

  10. webstorm对WebGL自动提示

    默认竟然没有勾选上,怪不得提示的时候,有很多webgl接口找不到方法(虽然可以运行).

随机推荐

  1. js判断数组

    1.constructor 在W3C定义中的定义:constructor 属性返回对创建此对象的数组函数的引用 就是返回对象相对应的构造函数.从定义上来说跟instanceof不太一致,但效果都是一样 ...

  2. [css3]叉叉旋转效果

    .close_frame{display:inline-block;height:14px;width:14px;background:url("../images/closeiframe. ...

  3. python学习09——字典(3)

    今天写了一道python字典题目,用了上次字典(2)中的方法,代码如下: json = {', 'IP':'10.0.0.1'} def find_value(themap, word): if wo ...

  4. [导读]Learning from Imbalanced Classes

    原文:Learning from Imbalanced Classes 数据不平衡是一个非常经典的问题,数据挖掘.计算广告.NLP等工作经常遇到.该文总结了可能有效的方法,值得参考: Do nothi ...

  5. MicroERP开发技术分享:vsFlexGrid、scriptControl实现工资表自定义列与表间关系计算

    开发大型的MIS系统,肯定是离不开第三方控件的,同时也要根据项目需要自己写几个. MicroERP共用了以下几个控件: 第三方商业控件: vsFlexGrid:大名鼎鼎的表格控件,不用多说,配合vsP ...

  6. Making the Newsfeed web part available outside of My Sites in SharePoint 2013 分类: Sharepoint 2015-07-07 19:29 4人阅读 评论(0) 收藏

    The Newsfeed is a key piece in SP2013's approach to social computing. It appears on the landing page ...

  7. win8没有无线网络适配器问题

    1. 先关闭ssid : 命令提示符(管理员)输入 :netsh wlan set hostednetwork mde=disallow ssid 2. 再设置无线名称和密码 :netsh wlan ...

  8. unicode编码与utf-8 区别

    unicode编码与utf-8 区别 如果是为了跨平台兼容性,只需要知道,在 Windows 记事本的语境中: 所谓的「ANSI」指的是对应当前系统 locale 的遗留(legacy)编码.[1] ...

  9. 黑马程序员——C语言基础 函数

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)函数的定义 1> 任何一个C语言程序都是由一个或者多个程序段( ...

  10. JQuery基础总结下

    JQuery动画与特效 show()和hide()方法可以用来显示和隐藏元素,toggle()方法用来切换显示和隐藏. $(selector).hide(speed,[callback]); $(se ...