WebGl 利用缓冲区对象画多个点
效果:

代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>WebGl 利用缓冲区对象画多个点</title>
</head>
<body> <canvas id="myCanvas" width="500" height="300" style='border:1px solid red'></canvas> </body> <script> window.onload = function () { //步骤一: 获取上下文
var myCanvas = document.getElementById('myCanvas');
var gl = myCanvas.getContext('webgl'); //步骤二: 定义三个点 ,并将其储存在缓存区对象
var vertices = [
-0.5,0.5,0.0,
0.0,0.5,0.0,
-0.25,0.25,0.0,
]; // 2.1 创建一个空的缓冲区对象来存储顶点缓冲区
var vertex_buffer = gl.createBuffer(); // 2.2 绑定缓冲区对象
gl.bindBuffer(gl.ARRAY_BUFFER,vertex_buffer); // 2.3 将顶点数据传递到缓冲区
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW); //步骤三: 创建和编译着色器程序
//定点着色器
var vertCode = "attribute vec3 coordinates;" +
"void main() {" +
"gl_Position = vec4(coordinates,1.0);" + //位置
"gl_PointSize = 10.0;" + //点的大小(单位像素)
"}"; //片段着色器
var fragCode = "void main() {" +
"gl_FragColor = vec4(1, 0.5, 0.0, 1);" + //RBGA值
"}"; // 3.1 创建一个顶点着色器对象、一个片段着色器对象
var vertShader = gl.createShader(gl.VERTEX_SHADER);
var fragShader = gl.createShader(gl.FRAGMENT_SHADER); // 3.2 为两个着色器附加源代码
gl.shaderSource(vertShader, vertCode);
gl.shaderSource(fragShader, fragCode); // 3.3 编译着色器
gl.compileShader(vertShader);
gl.compileShader(fragShader); // 3.4 创建要存储的着色器程序对象
var shaderProgram = gl.createProgram(); // 3.5 为着色器程序附加着色器
gl.attachShader(shaderProgram, vertShader);
gl.attachShader(shaderProgram, fragShader); // 3.6 链接两个着色器
gl.linkProgram(shaderProgram); // 3.7 使用组合着色器程序对象
gl.useProgram(shaderProgram); //步骤四: 关联着色器程序到缓冲对象
// 4.1 绑定缓冲区对象
// gl.bindBuffer(gl.ARRAY_BUFFER, vertex_buffer); // 4.2 获取属性(定点的坐标点)
var coord = gl.getAttribLocation(shaderProgram, "coordinates"); // 4.3 将缓冲区对象分配给coord变量
// 这里是设置获取数据的规则 第二个参数3 表示每个点定点有3个数据(对应vec3)
gl.vertexAttribPointer(coord, 3, gl.FLOAT, false, 0, 0); // 4.4 启用属性
gl.enableVertexAttribArray(coord); //步骤五: 绘制所需的对象
// 清除画布颜色
gl.clearColor(0.5, 0.5, 0.5, 0.9); // 启用深度测试
gl.enable(gl.DEPTH_TEST); // 清除颜色缓冲位
gl.clear(gl.COLOR_BUFFER_BIT); // 设置视图窗口
gl.viewport(0,0,myCanvas.width,myCanvas.height); // 画 三角形
gl.drawArrays(gl.POINTS, 0, 3) } </script> </html>
WebGl 利用缓冲区对象画多个点的更多相关文章
- WebGl 利用drawArrays、drawElements画三角形
效果: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- WebGL简易教程(三):绘制一个三角形(缓冲区对象)
目录 1. 概述 2. 示例:绘制三角形 1) HelloTriangle.html 2) HelloTriangle.js 3) 缓冲区对象 (1) 创建缓冲区对象(gl.createBuffer( ...
- OpenGL顶点缓冲区对象(VBO)
转载 http://blog.csdn.net/dreamcs/article/details/7702701 创建VBO GL_ARB_vertex_buffer_object 扩展可 ...
- [译]OpenGL像素缓冲区对象
目录概述创建PBO映射PBO例子:Streaming Texture Uploads with PBO例子:Asynchronous Readback with PBO 概述 OpenGL ARB_p ...
- WebGl 多缓冲区传递颜色和坐标(矩形)
效果: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- WebGl 一个缓冲区传递颜色和坐标(矩形)
效果: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- OpenGL学习笔记3——缓冲区对象
在GL中特别提出了缓冲区对象这一概念,是针对提高绘图效率的一个手段.由于GL的架构是基于客户——服务器模型建立的,因此默认所有的绘图数据均是存储在本地客户端,通过GL内核渲染处理以后再将数据发往GPU ...
- Entity Framework 实体框架的形成之旅--利用Unity对象依赖注入优化实体框架(2)
在本系列的第一篇随笔<Entity Framework 实体框架的形成之旅--基于泛型的仓储模式的实体框架(1)>中介绍了Entity Framework 实体框架的一些基础知识,以及构建 ...
- 利用navigator对象在浏览器中检查插件
利用navigator对象在浏览器中检查插件,实现的代码如下. // IE4+.firefox.chrome.safari.opera中,利用navigator检测插件 ,name为插件的名字 fun ...
随机推荐
- 在GitHub上删除项目后,在Android Studio上传项目依然提示project is already on github
描述: 在GitHub上面上传项目,但是感觉有些问题,就想删除了重新上传. 但是在Android Studio重新上传项目时,遇到了问题,一直提示“project is already on gith ...
- linux整个日志目录查询记录
在linux下面需要查看整个目录的日志,搜索用户的一个行为.因为不知道具体是那一天,一个个的查询也可以,但是太麻烦.可以用过下面的命令来实现: rep -iRl "关键字" ./ ...
- C# Winform选项卡集成窗体
知识要点:利用反射动态的加载窗体到对应的TabPage的. using System; using System.Collections.Generic; using System.Component ...
- Attribute+Reflection,提高代码重用
这篇文章两个目的,一是开阔设计的思路,二是实例代码可以拿来就用. 设计的思路来源于<Effective c#>第一版Item 24: 优先使用声明式编程而不是命令式编程.特别的地方是,希望 ...
- xml php 解析
JSON作为数据交换可以说已经成为了一种事实上的标准,但是前几年和它对应的xml虽然说用的越来越少,但是我感觉还是有他可以应用的地方. json更偏重于程序员来使用和解读,而xml则更适合用户来使用和 ...
- Windows Server 2008 R2 /2012 修改密码策略(摘抄 原文地址 https://www.cnblogs.com/mili3/p/7799347.html)
今天建了域环境,在添加新用户的时候,发现用简单的密码时域安全策略提示密码复杂度不够,于是我就想在域安全策略里面把密码复杂度降低一点. 问题: 在“管理工具 >> 本地安全策略 > ...
- 5 Dockerfile指令详解 && CMD 指令
CMD 指令的格式和 RUN 相似,也是两种格式: shell 格式: CMD <命令> exec 格式: CMD ["可执行文件", "参数1", ...
- NJCTF 2017 web pictures'wall(详解)
题目: 图片墙上有图片 url:http://218.2.197.235:23719/ writeup: 首先各种尝试登陆,发现任意用户及密码都可以登陆,但登陆后的页面提示的是“Root has pr ...
- TFS使用笔记
TFS是用来存储文件的服务器,放置不同版本的文件.因此文件的数量和内容因版本不同而不同. 在Fig-00中,服务器和本地的对应文件夹Common下的因版本不一致,所以文件数量是不一致的. Fig-00 ...
- ZT I Believe I Can Fly(我相信我能飞)
I Believe I Can Fly(我相信我能飞) 歌手:R. Kelly(罗 凯利) 歌词部分 I used to think that I could not go on 我原以为我无法坚持下 ...