《WebGL编程指南》学习--绘制点

WebGL编程指南笔记-第二章 WebGL入门 阅读详情

最近打算学习《WebGL编程指南》一书,并记录本人的心得体会。文中部分代码及截图源自《WebGL编程指南》。

  • 绘制一个点

1、html文件中的代码:

<body onload="main()">
    <canvas id="webgl" width="400" height="400">
    Please use a browser that supports "canvas"
    </canvas>

    <script src="../lib/webgl-utils.js"></script>
    <script src="../lib/webgl-debug.js"></script>
    <script src="../lib/cuon-utils.js"></script>
    <script src="HelloPoint1.js"></script>
</body>

1行初始化时载入JavaScript中的main函数

2-4行是定义一个canvas绘图区,用于显示webgl生成的图像

6-8行是封装的webgl库

9行是自定义的绘制一个点的代码

2、HelloPoint1.js代码

//顶点着色器
var VSHADER_SOURCE = 
  'void main() {\n' +
  '  gl_Position = vec4(0.5, 0.5, 0.0, 1.0);\n' + // 设置点的位置
  '  gl_PointSize = 10.0;\n' +                    // 设置点的大小
  '}\n';

// 片元着色器
var FSHADER_SOURCE =
  'void main() {\n' +
  '  gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\n' + // 设置点的颜色
  '}\n';

function main() {
  // 获取canvas对象
  var canvas = document.getElementById('webgl');
  // 获取webgl上下文信息,getWebGLContext函数源自cuon-utils.js
  var gl = getWebGLContext(canvas);
  if (!gl) {
    console.log('Failed to get the rendering context for WebGL');
    return;
  }

  // 初始化shader,initShaders函数源自cuon-utils.js
  if (!initShaders(gl, VSHADER_SOURCE, FSHADER_SOURCE)) {
    console.log('Failed to intialize shaders.');
    return;
  }

  // 设置canvas的背景色
  gl.clearColor(0.0, 0.0, 0.0, 1.0);

  // 设置颜色缓存
  gl.clear(gl.COLOR_BUFFER_BIT);

  // 绘制点
  gl.drawArrays(gl.POINTS, 0, 1);
}

1-6行定义顶点着色器,gl_Position和gl_PointSize为webgl内置变量,分别代表绘制的位置和点的大小。

8-12行定义片元着色器,gl_FragColor 为webgl内置变量,代表绘制的颜色。

18-34行为设置webgl环境

37行绘制点。

3.运行代码效果

改变背景为绿色,点的颜色为蓝色。代码

var FSHADER_SOURCE =
  'void main() {\n' +
  '  gl_FragColor = vec4(0.0, 0.0, 1.0, 1.0);\n' + 
  '}\n';

gl.clearColor(0.0, 1.0, 0.0, 1.0);

效果

4、其他知识

4.1 webgl为右手坐标系

4.2 canvas与webgl坐标关系图

WebGL编程指南 基本信息 原书名:WebGL Programming Guide: Interactive 3D Graphics Programming with WebGL (OpenGL) 原出版社: Addison-Wesley Professional 作者: (美)Kouichi Matsuda Rodger Lea(松田浩一,罗杰.李) 译者: 谢光磊 出版社:电子工业出版社 ISBN:9787121229428 上架时间:2014-6-11 出版日期:2014 年6月 开本:16开 页码:470 版次:1-1 ---------------------------------------- 目录 《WebGL编程指南》 第1 章 WebGL 概述 1 WebGL 的优势 3 使用文本编辑器开发三维应用 3 轻松发布三维图形程序 4 充分利用浏览器的功能 5 学习和使用WebGL 很简单 5 WebGL 的起源 5 WebGL 程序的结构 6 总结 7 第2 章 WebGL 入门 9 Canvas 是什么? 10 使用[canvas] 标签 11 DrawRectangle.js 13 最短的WebGL 程序:清空绘图区 16 HTML 文件(HelloCanvas.html) 16 JavaScript 程序(HelloCanvas.js) 17 用示例程序做实验 22 绘制一个点(版本1) 22 HelloPoint1.html 24 HelloPoint1.js 24 着色器是什么? 25 使用着色器的WebGL 程序的结构 27 初始化着色器 29 顶点着色器 31 片元着色器 33 绘制操作 34 WebGL 坐标系统 35 用示例程序做实验 37 绘制一个点(版本2) 38 使用attribute 变量 38 示例程序(HelloPoint2.js) 39 获取attribute 变量的存储位置 41 向attribute 变量赋值 42 gl.vertexAttrib3f() 的同族函数 44 用示例程序做实验 45 通过鼠标点击绘点 46 示例程序(ClickedPoints.js) 47 注册事件响应函数 48 响应鼠标点击事件 50 用示例程序做实验 53 改变点的颜色 55 示例程序(ColoredPoints.js) 56 uniform 变量 58 获取uniform 变量的存储地址 59 向uniform 变量赋值 60 gl.uniform4f() 的同族函数 61 总结 62 第3 章 绘制和变换三角形 63 绘制多个点 64 示例程序(MultiPoint.js) 66 使用缓冲区对象 69 创建缓冲区对象(gl.createBuffer()) 70 绑定缓冲区(gl.bindBuffer()) 71 向缓冲区对象中写入数据(gl.bufferData()) 72 类型化数组 74 将缓冲区对象分配给attribute 变量(gl.vertexAttribPointer()) 75 开启attribute 变量(gl.enableVertexAttribArray()) 77 gl.drawArrays() 的第2 个和第3 个参数 78 用示例程序做实验 79 Hello Triangle 80 示例程序(HelloTriangle.js) 80 基本图形 82 用示例程序做实验 83 Hello Rectangle(HelloQuad) 84 用示例程序做实验 85 移动、旋转和缩放 86 平移 87 示例程序(TranslatedTriangle.js) 88 旋转 91 示例程序(RotatedTriangle.js) 93 变换矩阵:旋转 97 变换矩阵:平移 100 4×4 的旋转矩阵 101 示例程序(RotatedTriangle_Matrix.js) 102 平移:相同的策略 105 变换矩阵:缩放 106 总结 108 第4 章 高级变换与动画基础 109 平移,然后旋转 109 矩阵变换库:cuon-matrix.js 110 示例程序(RotatedTriangle_Matrix4.js) 111 复合变换 113 示例程序(RotatedTranslatedTriangle.js) 115 用示例程序做实验 117 动画 118 动画基础 119 示例程序(RotatingTriangle.js) 119 反复调用绘制函数(tick()) 123 按照指定的旋转角度绘制三角形(dr 立即下载

相关推荐

WebGL编程指南.pdf

WebGL编程指南.pdfWebGL编程指南.pdfWebGL编程指南.pdfWebGL编程指南.pdfWebGL编程指南.pdfWebGL编程指南.pdf

webGL编程指南实战教程

顶点着色器是GPU渲染管线上一个可以执行着色器语言的功能单元,具体执行的就是顶点着色器程序,webgl定点着色器程序在javascript中一字符串的形式存在,通过编译处理后传递给顶点着色器执行。片元着色器和顶点着色器一样是GPU渲染管线上一个可以执行着色器程序的功能单元,顶点着色器处理的是逐顶点处理顶点数据,片元着色器是逐片元处理片源数据。下面,我们在上面绘制多个点的案例基础上,改用缓存对象来实现,并且鼠标点击制作坐标收集保存,不做渲染,点击渲染按钮时,一次性对缓冲区中的顶点数据做渲染。

IT飞牛 2690

STM32 伺服电机 指令脉冲+方向位置控制模式 主从定时器 实现PWM脉冲数精确控制

实验室有个项目涉及到多个步进电机以及伺服电机的控制,需要电机得到一个触发信号后精确移动一段距离。 下面以单个伺服电机控制为例,利用伺服电机的指令脉冲加方向位置控制模式实现jing'que ...

phcdd的博客 2万+

WebGL编程指南 - WebGL入门

入门

zaizai1007的博客 2127

飞牛NAS挂载115网盘避坑指南:为什么你的大文件总是传输失败?

本文深入解析了在飞牛NAS上通过AList挂载115网盘时,大文件传输失败的深层原因,包括风控机制、网络协议及兼容性问题。文章提供了从基础排查到高阶优化的系统性解决方案,并建议采用Kopia分片备份等终极策略,以实现稳定可靠的云端数据流转。

weixin_29306011的博客 1695

自动驾驶必备:5分钟搞懂gPTP如何实现μs级时间同步(附开源代码)

本文深入解析了gPTP协议在自动驾驶系统中实现微秒级时间同步的核心机制与工程实践。针对多传感器融合与跨域协同的严苛需求,文章拆解了gPTP的频率同步、对等延迟测量与时间偏移校正三步流程,并提供了基于linuxptp和AVnu gPTP两大开源代码库的实战配置指南与性能评估方法,助力开发者构建高精度、高可靠的车载时间同步网络。

weixin_29211309的博客 168

WebGL编程指南--入门

WebGL是一项用来在网页上绘制和渲染复杂三维图形,并允许用户与之进行交互的技术。传统的三维渲染,需要C或C++语言开发,并利用OpenGL(开源)或Direct3D(微软提供)这些三维图形库开开发独立应用程序。WebGL的出现,改变了桌面端应用程序垄断三维技术的情况。WebGL内嵌在浏览器中,不需要安装软件和3D环境,直接打开网页即可浏览。

lying_19的博客 1685

从模拟到实战:移远EC800M单片机MQTT接入OneNet全流程解析

本文详细解析了移远EC800M单片机通过MQTT协议接入OneNet平台的全流程,涵盖环境准备、模拟设备搭建、硬件迁移、数据交互调试及性能优化等关键步骤。针对常见问题如AT指令缓冲区溢出、心跳间隔设置等提供实战解决方案,帮助开发者高效实现物联网设备稳定接入。

weixin_29215815的博客 432

【笔记】《WebGL编程指南》学习(6)

WebGL编程指南学习(6) 6. 光照 光照使场景变得逼真~ 6.1 从物理出发 计算机图形学中着色(shading)的真正含义就是,根据光照条件重建“物体各表面明暗不一的效果”的过程 两个物理上的事情需要考虑: 发出光线的光源的类型 物体表面如何反射光线 光源 平行光(directional light),或者叫方向光,类似太阳光; 点光源(point light),类似灯泡 环境光(ambient light),其他非直射的光 其他特殊的光源,如聚光灯(spot light) 反射类型 物体反

饮冰室 874

hpm6750evk2开发板(四)TCP回送(1000M网口)

再接下来我们修改代码,先找到配置网速的地方,肯定是在enet的初始化函数里面,我们一个函数一个函数找,也可以用单步调试一步一步找,结果发现是在enet_init函数里面调用的rtl8211_basic_mode_default_config函数配置网速的,我们把enet_phy_port_speed_100mbps改为enet_phy_port_speed_1000mbps,重新编译运行试试。首先我们复制一份lwip_tcpecho代码,重命名为lwip_tcpecho_RGMII,如下图所示。

Silas1750的博客 922

借助AI搞定国社科“研究内容”部分!用Gemini 3 Pro轻松撰写6大模块,让基金本子效率质量更上一层楼

所谓研究整体框架,是对课题研究逻辑结构与技术路径的系统阐述,其核心在于通过研究目标分解、研究内容模块化与研究方法整合,构建一个层次清晰、逻辑严密、科学可行的研究体系。撰写要求:1)分要点、分层次列出主要研究内容,保持各部分之间的逻辑性、层次性与系统性;研究可行性可理解为开展本课题在理论基础、研究方法、研究条件、人员结构、平台支撑及外部协作等方面的可实施程度,可从内部条件与外部条件两个维度进行系统论证。研究背景为:我正在申报xxx年xxx(项目名称),课题名称为:xxx,拟采用的主要研究方法包括:xxx等;

智能AI让学术科研更容易 964

【笔记】《WebGL 编程指南》第 2 章 WebGL 入门

JS 代码不像之前用 canvas 绘制 2D 矩形那样简单,用 WebGL 绘制一个点必须要用着色器。WebGL 需要的两种着色器【P55】 顶点着色器(Vertex shader):顶点着色器是用来描述顶点特性(如位置、颜色等)的程序。顶点(vertex)是指二维或三维空间中的一个点,比如二维或三维图形的端点或交点。绘制一个点(版本1) 25【P56】 片元着色器(Fragment shader):进行逐片元处理过程如光照(见第8章“光照”)的程序。

XcantloadX的博客 1487

Python 爬虫实战:雪球用户数据爬取与投资行为分析(含 API 签名算法解析)

雪球作为国内领先的投资者社区,拥有丰富的用户数据和投资信息。通过爬取雪球用户数据并进行分析,我们可以深入了解用户的持仓偏好、交易行为和投资策略,为企业和投资者提供有价值的市场洞察。

yansideyucsdn的博客 2247

【笔记】《WebGL编程指南》学习-第3章绘制和变换三角形(1-绘制多个点)

目标:绘制多个点组成的图形。本节的例子将会在屏幕上绘制三个红色小点。

努力的V崽兽 901

【部署】Ubuntu 24.04.4虚拟机下部署OpenClaw

OpenClaw是一款基于AI的智能助手工具,本文详细介绍了在Ubuntu 24.04.4系统上的三种安装方法。推荐使用一键安装脚本(curl -fsSL https://openclaw.ai/install.sh | bash),自动完成Node.js检测、CLI安装和引导配置。对于开发者,提供了从源码构建的详细步骤,包括环境准备、依赖安装和构建流程。文章还包含常见问题解决方案(如sharp构建错误处理)以及后续维护建议(更新、配置检查和日志查看)。安装完成后,用户可通过终端TUI或Web UI进行初始

海兰 1万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

WebGL与ES6:屏幕鼠标点击连续点绘制

基于上一篇博文WebGL与ES6:绘制简单点。 在学习WebGL编程指南这本书时,发现书上有一个WebGL通过鼠标连续绘制点的代码,其中的屏幕坐标系转WebGL坐标系的方法,居然是错误的。自己动手改了一下,可以完整运行了。 import "../css/index.css"; import {RenderTool} from "./lib_webgl/cuon-utils-ES6"; l...

做GIS梦的人 1133

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

《WebGL权威编程指南》书本例题及学习笔记(1~6章)

《WebGL权威编程指南》书本例题及学习笔记(1~6章)

u010530400的博客 1069

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

WebGL学习及项目实战(第03期:绘制多个点,线,面)

本文主要梳理了在Webgl中如何绘制一个点的所有具体代码,解释了具体的功能。然后基于此,引入了buffer,添加了点的数量,绘制了多个点,以及更改绘制方式和点的数量来绘制了线和面,给出了多种绘制点与面的方式,

qf2005100102的博客 1149

WebGL编程指南笔记(二)绘制和变换三角形

WebGL编程指南笔记(二)绘制和变换三角形。本文内容参考《WebGL编程指南》第三章内容,主要介绍在如何使用WebGL进行基础图形的绘制以及实现基础的变换。

weixin_45887187的博客 1066

WebGL编程指南笔记(一)概念及入门

本文章包含《WebGL编程指南》第一章和第二章的内容,包含WebGL概念和入门知识。WebGL的技术规范继承自免费和开源的OpenGL标准。 从2.0版本开始,OpenGL支持了一项非常重要的特性———可编程着色器方法。 编写着色器的语言又称为着色器语言(shading language),OpenGL ES 2.0基于OpenGL着色器语言(GLSL), 因此后者又被称为OpenGLES着色器语言(GLSL ES)。 WebGL基于OpenGL ES 2.0, 也使用GLSL ES编写着色器。

weixin_45887187的博客 1550

《WebGL编程指南》学习笔记 02、WebGL 用鼠标绘点

webgl 的同步绘图的现象,其实是由webgl 底层内置的颜色缓冲区导致的。“胸有成竹”大家知道吧?这个颜色缓冲区就是“胸有成竹”的胸,它在电脑里会占用一块内存。在我们使用webgl 绘图的时候,是先在颜色缓冲区中画出来,这样的图像还在胸中,所以外人看不见,只有webgl系统自己知道。在我们想要将图像显示出来的时候,那就照着颜色缓冲区中的图像去画,这个步骤是webgl 内部自动完成的,我们只要执行绘图命令即可。颜色缓冲区中存储的图像,只在当前线程有效。

公子我姓柯 978

WebGL与Vue结合连续绘制点

本文主要介绍《WebGL编程指南》中连续绘制点功能的学习,并将代码改造在Vue框架中运行。部分代码源自https://blog.youkuaiyun.com/GISuuser/article/details/82224057以及《WebGL编程指南》。 1、在src/components中新建canvas.vue文件。 2、代码如下: <template> <div> ...

XTTX110的博客 552

webgl入门实例-05绘制多个点

/ 将 buffer 对象分配给 a_Position 变量。// 将 vertices 的数据写入 buffer 对象。//获取 a_Position 变量在内存中的位置。// 启用a_Position变量的赋值。// attribute 变量。// 创建buffer对象。

mkbbreak的博客 1007

探索WebGL的奇妙世界:《WebGL编程指南》随书代码推荐

探索WebGL的奇妙世界:《WebGL编程指南》随书代码推荐 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 《WebGL编程指南》是一本深入浅出的WebGL技术指南,旨在帮助开发者掌握从基础到高级的WebGL编程技巧。为了更好地辅助读者学习和实践,本书的作者特别提供了随书代码仓库,包含了书中所有章节的代码示例。这些代码不仅可以帮助读者理解书中的理论知识,还能通过实际操...

gitblog_06558的博客 815

WebGL编程指南PDF及源码下载:开启WebGL学习之旅

WebGL编程指南PDF及源码下载:开启WebGL学习之旅 【下载地址】WebGL编程指南PDF及源码下载 探索WebGL编程的绝佳资源!本仓库提供了《WebGL编程指南》的PDF版本,以及教材中所有实例的完整源码,支持Windows和Mac系统。此外,还包含了cuon-matrix.js、cuon-utils.js、w...

gitblog_06717的博客 785

【笔记】《WebGL编程指南》学习(0)

WebGL编程指南学习,界明城,2022-3-1 0. WebGL编程,从入坑到放弃 知识路径 《WebGL编程指南》环境搭建 WebGL编程范式 0.1 知识路径 Level 1:了解计算机图形学,尤其是渲染相关概念 Level 2:用过OpenGL,知道 0.2 《WebGL编程指南》环境搭建 0.2.1 TODO 对本书的评价,将在整本书读完后更新 0.2.2 代码运行环境 本机运行环境:MacOS Monterey 12.2.1 编辑器:VS Code 本书对WebGL特性的支持:WebG

饮冰室 1176
下一篇: Vue与WebGL结合
XTTX110
博客等级 码龄15年 35粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值