WebGL编程指南入门基础篇

Unity WebGL 编译和打包说明(官方文档翻译校正) Unity 编辑器中的 WebGL 选项允许您将内容发布为 JavaScript 程序,这些程序使用 HTML5/JavaScript、WebAssembly、WebGL rendering API 以及其他 Web 标准在 Web 浏览器中运行 Unity 内容。默认情况下,WebGL 缓存存储 .data 和 .bundle 文件,并在从缓存加载前重新验证它们。您可以通过添加新的来更改 UnityLoader 配置,从而更改此行为。以下示例显示了在index.html。 阅读详情

WebGL编程指南笔记-入门基础篇

着色器介绍

着色器分为顶点着色器 跟 片元着色器

  • 顶点着色器
    描述顶点特性,包括位置,颜色等
  • 片元着色器
    进行每个片元的处理过程,如光照等;在三维场景中,仅仅用线条和颜色把图形画出来是远远不够的

从js文件到浏览器渲染结果的处理流程示意图
2019-04-28-15-13-28

画点

  • 多基本缓冲区模型
    颜色缓冲区: gl.COLOR_BUFFER_BIT
    深度缓冲区: gl.DEPTH_BUFFER_BIT
    模板缓冲区: gl.STENCIL_BUFFER_BIT
  • 画点关键代码片段
// HelloPoint1.js (c) 2012 matsuda
// Vertex shader program
var VSHADER_SOURCE = 
  'void main() {\n' +
  '  gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n' + // Set the vertex coordinates of the point
  '  gl_PointSize = 10.0;\n' +                    // Set the point size
  '}\n';

  
// Fragment shader program
var FSHADER_SOURCE =
  'void main() {\n' +
  '  gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\n' + // Set the point color
  '}\n';
  
// Initialize shaders
  if (!initShaders(gl, VSHADER_SOURCE, FSHADER_SOURCE)) {
    console.log('Failed to intialize shaders.');
    return;
  }
  
// Draw a point
  gl.drawArrays(gl.POINTS, 0, 1);

webgl初始化流程

/**
 * Create a program object and make current
 * @param gl GL context
 * @param vshader a vertex shader program (string)
 * @param fshader a fragment shader program (string)
 * @return true, if the program object was created and successfully made current 
 */
function initShaders(gl, vshader, fshader) {
  var program = createProgram(gl, vshader, fshader);
  if (!program) {
    console.log('Failed to create program');
    return false;
  }

  gl.useProgram(program);
  gl.program = program;

  return true;
}

2019-04-28-15-32-12

齐次坐标

homogeneous coordinate

2019-04-28-15-44-45

  • webgl的一个显著特征就是不需要交换颜色缓冲区

传输变量

  • Using Attribute Variables
    顶点相关的数据
    必须声明为全局变量
  • Using uniform variable
    顶点无关的数据

所有 attribute 变量都以 a_前缀开始; 所有 uniform 变量都以u_ 前缀开始

  • 获取着色器变量地址
var a_Position = gl.getAttribLocation(gl.program, 'a_Position'); 
  • 赋值
  gl.vertexAttrib1f(location, v0)   
  gl.vertexAttrib2f(location, v0, v1)   
  gl.vertexAttrib3f(location, v0, v1, v2)   
  gl.vertexAttrib4f(location, v0, v1, v2, v3) 

2019-04-28-16-22-10

  • 获取 uniform 变量地址
 gl.getUniformLocation(program, name)   
  • 赋值
  gl.uniform1f(location, v0)   
  gl.uniform2f(location, v0, v1)   
  gl.uniform3f(location, v0, v1, v2)   
  gl.uniform4f(location, v0, v1, v2, v3)   

绘制和变换三角形

使用缓冲区对象

  • 使用流程
    1.    创建缓冲区对象:Create a buffer object ( gl.createBuffer() ).   
    2.    将缓冲区对象绑定到目标:Bind the buffer object to a target ( gl.bindBuffer() ).   
    3.    向缓冲区对象中写入数据:Write data into the buffer object ( gl.bufferData() ).   
    4.    将缓冲区对象分配给a_Position变量:Assign the buffer object to an attribute variable ( gl.vertexAttribPointer() ).   
    5.    连接a_Position变量与分配给它的缓冲区对象:Enable assignment ( gl.enableVertexAttribArray() ).    

2019-04-28-17-10-54

webgl绘制基本图形

2019-04-28-17-35-26

2019-04-28-17-38-03

移动、旋转和缩放

  • 逐顶点操作(per-vertex operation)
  • 平移
    2019-04-28-18-10-23
  • 旋转
    2019-04-28-18-11-11
 x' = x cos β – y sin β  
 y' = x sin β + y cos β  
 z' = z     
  • 变换矩阵
    旋转举证
    2019-04-28-18-15-38

旋转平移矩阵
2019-04-28-18-17-26

高级变换与动画基础

矩阵操作函数库

2019-04-28-19-16-01

颜色与纹理

将非坐标数据传入顶点着色器

多种顶点数据信息存入顶点着色器

顶点着色器和片元着色器之间的数据传输

  • 图形装配过程/图元装配过程
  • 光栅化过程
  • varying变量

纹理映射

texture mapping

  • 准备好纹理图像
  • 配置映射方式
  • 加载纹理图像
  • 在片元着色器将纹理的颜色赋给片元
  • 纹理坐标

纹理映射过程主要包括五个部分

  • 顶点着色器中接收顶点的纹理坐标,光栅化后传递给片元着色器
  • 片元着色器根据片元的纹理坐标,从纹理图像中抽取出纹理颜色,赋给当前片元
  • 设置顶点的纹理坐标
  • 准备待加载的纹理图像,在浏览器中读取它
  • 监听纹理图像的加载事件,一旦加载完成,就在Webgl系统中使用纹理
webGL入门知识讲解 webgl入门知识讲解 阅读详情

相关推荐

WEBGL入门的基础介绍

目录 WebGL基本介绍 概述 WebGL的特性 图形硬件的介绍 WebGL开发入门 WebGL绘制图形抽象过程 基于WebGL封装的框架 WebGL坐标系基础 视变换 投影变换 视口变换 实例演示(使用ThreeJS) 光照 光照类型 光照的原理(漫反射) 光照的原理(环境反射) 光照效果的对比 纹理映射 图片纹理 凹凸纹理 环境贴图 开发调试与...

Amesteur的博客 2062

WebGL编程指南 - WebGL入门

初识绘图流程、缓冲区、、attribute和uniform变量。

m0_74825172的博客 1400

WebGL编程指南笔记-第二章 WebGL入门

WebGL编程指南笔记-第二章 WebGL入门

Kelvin’s blog 708

WebGL 入门

webgl 是在网页上绘制和渲染三维图形的技术,可以让用户与其进行交互。我们之前学过的div+css、canvas 2d 都是专注于二维图形的,它们虽然也能模拟一部分三维效果,但它们和webgl 比起来,那就是玩具枪和AK47的差别。综上所述,webgl 绘图好麻烦啊!麻烦不是不学的理由,因为后面还有three.js 为你排忧解难。那我们为啥不直接学习three.js 呢?那是因为three.js 若是只想画个旋转的立方体还好,若是要深入学习,实现复杂的模型交互逻辑,就必须要有webgl 基础了。

liubangbo的专栏 4157

原生webgl学习(一) 原生WebGL学习和入门引言

一.笔者自述         对于原生WebGL的学习,相信对于很多搞前端图形开发的小伙伴的痛点是花了很多时间,却收效甚微;好在现在存在诸如Three.js、Babylon.js、cesium.js等功能强大和齐全的WebGL第三方库;有了这些第三方库,我们可以用更少的代码构建出绚丽多彩的网络3D应用;那为什么我们还要学习原生的WebGL,原生的WebGL对于我们来说意味着什么?接下来笔者就以自...

Bruce_wjh的博客 1万+

WebGL系列教程:WebGL基础知识

使用顶点绘制的 2D 或 3D 模型称为网格,网格中的每个面都称为多边形,多边形由 3 个或更多顶点组成。要在 WebGL 渲染上下文中绘制模型,就必须使用 JavaScript 数组定义顶点和索引。例如,如果我们想创建一个位于坐标 {(5,5), (-5,5), (-5,-5)} 上的三角形,如下图。为了更好地理解指数,请考虑更复杂的模型,如 square,我们可以将正方形表示为一组两个三角形。

xiangzhihong8的专栏 1395

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编程指南源代码示例大全

htmltable {th, td {th {pre {简介:WebGL是一种Web标准JavaScript API,用于Web浏览器中的硬件加速2D和3D图形渲染。本书包含示例、练习和教程,帮助开发者深入理解WebGL,并掌握网页交互式图形的创建方法。通过本书源代码的学习,开发者可以了解WebGL的基础概念、GLSL着色器、几何数据处理、颜色与纹理、光照和投影、深度测试与混合、动画与交互、性能优化等方面的编程技术。

weixin_36487018的博客 907

WebGL编程指南--入门

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

lying_19的博客 1685

TOPCon vs PERC:2024年光伏电站投资,哪种技术更划算?

本文深入分析了2024年光伏电站投资中TOPCon与PERC技术的财务表现。通过对比初始系统成本、全生命周期发电量及环境适应性,指出当前TOPCon组件与PERC价差已显著缩小,其更高的转换效率和更低的衰减率能有效降低度电成本并提升项目内部收益率,为投资者提供更具长期价值的方案。

p5l2m9n4o6q的博客 267

Conda环境创建报错?教你快速解决Solving environment: failed和ResolvePackageNotFound问题

本文深入解析Conda环境创建中常见的'Solving environment: failed'和'ResolvePackageNotFound'报错原因,并提供从基础到高级的系统化解决方案。涵盖渠道配置、版本通配、环境文件编辑等实用技巧,帮助开发者快速解决conda环境创建问题,提升工作效率。

weixin_28677451的博客 258

WebGL编程指南入门教程:WebGL学习的不二之选

WebGL编程指南入门教程:WebGL学习的不二之选 【下载地址】WebGL编程指南入门教程 《WebGL编程指南(含源码).pdf》是一本专为WebGL初学者打造的入门教程,全面涵盖WebGL的基础知识与核心技能。书中详细讲解了WebGL的基本概念、绘图技巧、矩阵运算及光照处理等关键内容,每章均配有实例代码,帮助读者通...

gitblog_06778的博客 645

Pspice开关电源仿真:从零实现反激式电源设计实战案例

通过Pspice仿真工具,手把手实现反激式开关电源的设计与优化,深入剖析关键参数设置与波形分析,帮助掌握Pspice在电源开发中的实际应用技巧。

weixin_35756690的博客 1155

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

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

XcantloadX的博客 1487

减小伺服电机共振的方法(以松下伺服为例)

嘿 ! 我是【小黄】 , 我们又见面啦 !!! 毕竟技术只有大家交流才会进步嘛 ! 这博客是对自己学习的一点点记录和总结 ,如果您对自动控制感兴趣的话 ,可以关注一下我的动态 , 我们一起学习呀 ! 我们都还年轻 ,我们还有无限可能 。 YES ! 减小伺服电机共振的方法(以松下伺服为例)1. 准备工作:1.1.1 如何推定共振点:1.1.2 测定实操:1.1.3 总结:2. 下期预告: 在我们调试完伺服参数以后机器人运动到某个特定位置会产生振动或异响,我们要做的就是消除这个异响保..

在下小黄的博客 1万+

STM32H743 ADC多通道采样实战:CubeMX配置+DMA传输避坑指南

本文详细介绍了STM32H743 ADC多通道采样的实战配置,包括CubeMX参数设置、DMA传输优化及常见问题解决方案。重点解析了ADC模块的核心特性、多通道采样序列配置、Cache一致性处理等关键技术,帮助开发者高效实现稳定可靠的模拟信号采集系统。

weixin_29175469的博客 611

WebGL编程指南入门教程

WebGL编程指南入门教程 【下载地址】WebGL编程指南入门教程 《WebGL编程指南(含源码).pdf》是一本专为WebGL初学者打造的入门教程,全面涵盖WebGL的基础知识与核心技能。书中详细讲解了WebGL的基本概念、绘图技巧、矩阵运算及光照处理等关键内容,每章均配有实例代码,帮助读者通过动手实践快速掌握开发方法...

gitblog_06762的博客 429

基于BenchmarkSQL的达梦数据库TPCC性能测试

中的用户和密码在达梦数据库中创建测试用户,并保证其表空间足够容纳生成的测试数据。如果开启了归档,还要考虑归档日志占用的空间。BenchmarkSQL默认不支持达梦数据库。这里我们让BenchmarkSQL把达梦数据库当作Oracle即可。Oracle数据库对应的测试配置文件为。是使用BenchmarkSQL进行性能测试的主要配置文件。是生成的测试报告,png文件是报告中包含的图片。拷贝达梦数据库驱动到BenchmarkSQL的。测试结束后,会在当前路径下生成一个以。规则命名的结果目录。

Sebastien23的博客 2635

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

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

gitblog_06558的博客 815

华为OD机试新系统真题【仓库盘点】

华为OD机试真题 新系统【仓库盘点】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【仓库盘点】

qq_45776114的博客 571

2025年抖音面试:商业生态与安全质量运营技能要求及面试

在商业生态与安全岗的质量运营工作中,规则运营职责占据着极为重要的地位,它是保障内容风控质量的关键环节。

王国平的博客 608

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

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

gitblog_06717的博客 785

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

WebGL 从入门到精通

WebGL 是一个强大的在网页上实现 3D 图形渲染的技术。从入门到精通需要逐步掌握其基本概念、进阶技巧和高级应用。通过不断学习和实践,利用丰富的学习资源,包括官网、API 文档、书籍和学习网站等,可以深入理解 WebGL 的原理和应用。在实际开发中,无论是游戏开发、数据可视化还是虚拟展厅等领域,WebGL 都有着广阔的应用前景,值得开发者深入探索和学习。同时,随着浏览器技术的不断发展,WebGL 也在不断改进和完善,为开发者带来更多的可能性。

candy的博客 6130

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

WebGL编程指南一:入门

前言 WebGL被设计出来的目的,就是在网页上创建三维的应用和用户体验,它是内嵌在浏览器中的,你不必安装插件和库就可以直接使用它。它允许Javascript在网页上显示和操作三维图形。WebGL程序由HTMLT和JavaScript文件组成。WebGL页面包含三种语言:HTML5,JavaScript,和GLSL ES,而通常GLSLES是以字符创的形式写在JavaScript中的,所以实际上We...

Zmikoo学习之路 2216

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: 修改Android模拟器为Hyper-V虚拟化,兼容Docker环境
下一篇: Python 中用matplotlib 画出 numpy.random.beta分布
austindev
博客等级 码龄10年 28粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值