Hello Point——WebGL
<!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的更多相关文章
- Webgl的2D开发方案(一)spritebatcher
使用TypeScript 和 webgl 开发 第一步:实现了SpriteBatcher 例子如下 http://oak2x0a9v.bkt.clouddn.com/test/index.html ...
- HTML5 学习总结(四)——canvas绘图、WebGL、SVG
一.Canvas canvas是HTML5中新增一个HTML5标签与操作canvas的javascript API,它可以实现在网页中完成动态的2D与3D图像技术.<canvas> 标记和 ...
- 数百个 HTML5 例子学习 HT 图形组件 – WebGL 3D 篇
<数百个 HTML5 例子学习 HT 图形组件 – 拓扑图篇>一文让读者了解了 HT的 2D 拓扑图组件使用,本文将对 HT 的 3D 功能做个综合性的介绍,以便初学者可快速上手使用 HT ...
- 基于 WebSocket 实现 WebGL 3D 拓扑图实时数据通讯同步(二)
我们上一篇<基于 WebSocket 实现 WebGL 3D 拓扑图实时数据通讯同步(一)>主要讲解了如何搭建一个实时数据通讯服务器,客户端与服务端是如何通讯的,相信通过上一篇的讲解,再配 ...
- 基于 WebSocket 实现 WebGL 3D 拓扑图实时数据通讯同步(一)
今天没有延续上一篇讲的内容,穿插一段小插曲,WebSocket 实时数据通讯同步的问题,今天我们并不是很纯粹地讲 WebSocket 相关知识,我们通过 WebGL 3D 拓扑图来呈现一个有趣的 De ...
- 基于HTML5的WebGL应用内存泄露分析
上篇(http://www.hightopo.com/blog/194.html)我们通过定制了CPU和内存展示界面,体验了HT for Web通过定义矢量实现图形绘制与业务数据的代码解耦及绑定联动, ...
- 基于WebGL 的3D呈现A* Search Algorithm
http://www.hightopo.com/demo/astar/astar.html 最近搞个游戏遇到最短路径的常规游戏问题,一时起兴基于HT for Web写了个A*算法的WebGL 3D呈现 ...
- 20个不可思议的 WebGL 示例和演示
WebGL 是一项在网页浏览器呈现3D画面的技术,有别于过去需要安装浏览器插件,通过 WebGL 的技术,只需要编写网页代码即可实现3D图像的展示.WebGL 可以为 Canvas 提供硬件3D加速渲 ...
- webgl 循环传参画10个点
function main(){ var canvas = document.getElementById("webgl"); var gl = getWebGLContext(c ...
- webstorm对WebGL自动提示
默认竟然没有勾选上,怪不得提示的时候,有很多webgl接口找不到方法(虽然可以运行).
随机推荐
- 【重要!】告K2老客户书
K2近期升级优化了售后支持系统,以便能更好的为亲爱的老客户们答疑解惑,比如:“老妈和老婆掉水里先救谁”.“中午吃啥晚上吃啥”.“技术男怎么学会撩妹”……这些问题,统统不会告诉你.售后TEAM作为一支专 ...
- 大不了高三艹个FZU
即使做错了也不要紧啊,反正人生就这一次
- js isArray
function isArray(value) { if (typeof Array.isArray === "function") { return Array.isArray( ...
- 通过InputStream访问文件中的数据的四种方法
//方法一(每次只读取一个字节) public static void getFile() throws IOException { File file = new File("D:\\a. ...
- Unity3d之个性化皮肤
1.首先创建皮肤,贴图 2.在代码中定义public GUISkin变量,在Inspector中赋值 3.在OnGUI中调用 GUI.skin = mySkin; GUI.Button(new Rec ...
- Asp.net 事件管道
1.BeginRequest 2.AuthenticateRequest 验证请求,开始检查用户的身份,一般是获取请求的用户信息 3.PostAuthenticateRequest 用户身份检查完 ...
- eap-peap/mschapv2
eap-peap/mschapv2 文件路径 用途 示例 备注 #gedit /usr/local/etc/raddb/sites-available/default #gedit /us ...
- Java泛型学习笔记 - (三)泛型方法
泛型方法其实和泛型类差不多, 就是把泛型定义在方法上, 格式大概就是: public <类型参数> 返回类型 方法名(泛型类型 变量名) {...}泛型方法又分为动态方法和静态方法,:1. ...
- 堆糖瀑布流完整解决方案(jQuery)
2010年堆糖创办以来,网站界面经历过3-5次重大改版,logo也曾更换过两次,早期蓝红相间三个圈的logo恐怕很少有人记得了.与此同时,前端 js 框架也在默默的更新换代.最早堆糖上线时,js 采用 ...
- 北大poj- 1028
Web Navigation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 33281 Accepted: 14836 ...