小白学-WEBGL

news2024/11/25 7:34:17

第一天:

1.canvas和webgl的区别

  Canvas 和 WebGL 都是用于在网页上绘制图形的技术,它们通过浏览器提供的 API 使开发者能够创建丰富的视觉内容,但它们的工作原理和用途有所不同。

Canvas

  Canvas API 提供了一个通过 JavaScript 和 HTML <canvas> 元素绘制 2D 图形的方法。它是一个由网页浏览器渲染的矩形区域,你可以通过 JavaScript 动态地绘制其中的图像(如线条、形状、图像等)。Canvas 适用于较简单的图形和动画,以及图像处理和游戏的 2D 渲染。

  • 2D 绘图:Canvas API 主要关注于 2D 图形的绘制。
  • 即时渲染:绘制操作立即执行,不涉及场景或对象的概念。
  • 简单易用:API 相对简单,容易上手,适合快速开发简单的图形应用。

WebGL

  WebGL(Web Graphics Library)是一个 JavaScript API,允许在不需要任何插件的情况下,在 Web 浏览器中使用 GPU 加速的方式进行 3D 绘图。WebGL 是 OpenGL ES 的一个绑定(即一个低级图形 API 的 Web 版本),它允许开发者创建复杂的 3D 图形和效果。

  • 3D 绘图:WebGL 提供了创建和操纵在浏览器中渲染的复杂 3D 图形的能力。
  • GPU 加速:利用用户的图形处理器(GPU),可以实现高性能的图形渲染。
  • 复杂度高:由于提供了对底层图形硬件的直接访问,因此比 Canvas API 更复杂,学习曲线更陡峭。

关键区别

  • 维度和性能:Canvas 更适合 2D 图形和简单动画,而 WebGL 专注于更复杂的 3D 渲染和高性能图形。
  • API 复杂性:Canvas 的 API 相对简单易学,而 WebGL 提供了更接近硬件的控制,因此更为复杂。
  • 使用场景:对于需要绘制简单图形或处理图像的应用,Canvas 可能是更好的选择。对于需要复杂三维效果、高性能渲染的应用,WebGL 将是更合适的技术。

2.什么是着色器?

着色器(Shader)是一种用于在图形处理器(GPU)上执行的小程序,专门用于图形渲染的计算。它们是现代图形API(如OpenGL、DirectX)和图形渲染管线的核心组件。着色器使得开发者能够对渲染过程中的顶点、像素(片段)、纹理等进行高度控制和自定义,从而产生各种视觉效果。主要有以下几种类型:

  1. 顶点着色器(Vertex Shaders):处理顶点数据,如位置、颜色、纹理坐标等。它运行在渲染流程的早期,负责将3D坐标转换为另一种3D坐标,同时进行一些顶点级别的处理。

  2. 片段着色器(Fragment Shaders)/像素着色器(Pixel Shaders):处理渲染到屏幕上每个像素的颜色和其他属性。它决定了最终像素的颜色值,包括贴图、阴影、光照效果等。

  3. 几何着色器(Geometry Shaders):介于顶点着色器和片段着色器之间,可以生成从一个顶点到另一个顶点的新图形。

  4. 曲面细分着色器(Tessellation Shaders):可以根据某些规则增加几何体的细节或顶点数量,通常用于实现物体表面的平滑渲染。

  5. 计算着色器(Compute Shaders):并不直接参与图形渲染,而是用于处理非图形的通用计算任务,如物理模拟、图像处理等。

3.绘制一个点的流程

一个个像素

第二天

1.canvas坐标系

canvas坐标系webgl三维坐标系

2.绘制一个水平移动的点

3.声明attribute 变量:只能在顶点着色器使用

3.1.声明变量attribute

3.2attribute获取变量

3.3通过鼠标控制绘制

第三天

1.改变点的颜色

1.1使用uniform 变量

通过添加uniform设置变量

给uniform变量赋值

gl.uniform4f(uColor,1.0,0.0,0.0,1.0)

使用uniform的需要设置精度

precision mediump float;

既可以在顶点着色器使用也可以在片源着色器使用,但是顶点着色器不能使用顶点坐标

uniform 变量的使用流程

2使用缓冲区对象-绘制多个点

2.1什么是缓存区对象?

缓冲区对象是WebGL系统中的一块内存区域,可以一次性地向缓冲区对象中填充大量的顶点数据,然后将这些数据保存在其中,供顶点着色器使用

2.2Float32Array是类型化数组

在 webgl 中,需要处理大量的相同类型数据,所以引入类型化数组,这样程序就可以预知到数组中的数据类型,提高性能。

2.3绘制流程

 

2.4多缓存区和数据偏移

 流程和aPosition一样

3. 多种图形绘制

4.图形缩放-着色器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1852640.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

家政预约小程序14权限配置

目录 1 创建用户2 创建角色3 启用登录4 实现退出总结 我们现在小程序端的功能基本开发好了&#xff0c;小程序开发好之后需要给运营人员提供管理后台&#xff0c;要分配账号、配置权限&#xff0c;我们本篇就介绍一下权限如何分配。 1 创建用户 在微搭中&#xff0c;用户分为内…

基于Pico和MicroPython点亮ws2812彩色灯带

基于Pico和MicroPython点亮ws2812彩色灯带 文章目录 基于Pico和MicroPython点亮ws2812彩色灯带IntroductionPracticeConclusion Introduction 点亮发光的LED灯是简单有趣的实验&#xff0c;点亮多个ws2812小灯串联起来的灯带&#xff0c;可对多个彩色小灯进行编程&#xff0c;…

react笔记-03react-router篇

本文章是react的路由笔记 一、react路由&#xff08;v5版本&#xff09; 1. 什么是路由&#xff08;前端&#xff09;&#xff1f; 一个路由就算一个映射关系&#xff08;key: value)key为路径&#xff0c;value为组件 2. 前端路由的工作原理 根据浏览器历史记录&#xff…

Java | Leetcode Java题解之第167题两数之和II-输入有序数组

题目&#xff1a; 题解&#xff1a; class Solution {public int[] twoSum(int[] numbers, int target) {int low 0, high numbers.length - 1;while (low < high) {int sum numbers[low] numbers[high];if (sum target) {return new int[]{low 1, high 1};} else i…

C++ (week9):Git

文章目录 1.git介绍2.git安装3.git配置4.获取自己的SSH公钥5.新建仓库6.邀请开发者7.克隆远程仓库到本地8.在本地进行开发9.本地项目推送到远程仓库10.git的工作原理11.分支管理(1)合作开发的方式(2)分支管理(3)分支合并的原理、冲突管理 12.git 与 svn 的区别13.设置alias别名…

Ubuntu iso 镜像下载 步骤截图说明

Ubuntu镜像下载&#xff0c;在这个网址&#xff1a; Enterprise Open Source and Linux | Ubuntu 步骤如下图所示&#xff1a; 1、登入网址 2、点击Get Ubuntu 3、点击Download Ubuntu Desktop 后续点击Downloadload 24.04 LTS直接下载就行 如果需要下载其它版本&#xf…

0 知识的补充

目录 矢量运算 矢量加法 矢量减法 矢量点乘 矢量叉乘 矢量混合积 坐标系 直角坐标系 柱坐标系 球坐标系 ​​​​​​​ 矢量运算 矢量加法 矢量减法 矢量点乘 矢量叉乘 ​​​​​​​ 矢量混合积 坐标系 直角坐标系 柱坐标系 ​​​​​​​ 球坐标系

MATLAB-SSA-CNN-SVM,基于SSA麻雀优化算法优化卷积神经网络CNN结合支持向量机SVM数据分类(多特征输入多分类)

MATLAB-SSA-CNN-SVM,基于SSA麻雀优化算法优化卷积神经网络CNN结合支持向量机SVM数据分类(多特征输入多分类) 1.数据均为Excel数据&#xff0c;直接替换数据就可以运行程序。 2.所有程序都经过验证&#xff0c;保证程序可以运行。 3.具有良好的编程习惯&#xff0c;程序均包含…

【密码学】分组密码

文章目录 分组密码的模式分组密码与流密码模式明文分组与密文分组 ECB模式ECB定义ECB特点对ECB模式的攻击改变分组顺序攻击 CBC模式CBC定义初始化向量IVCBC特点对CBC模式的攻击对初始向量进行反转攻击填充提示攻击 CFB模式CFB定义对CFB模式的攻击重放攻击 OFB模式OFB定义CFB模式…

模板初阶【C++】

模板的作用 模板的主要作用是实现泛型编程&#xff0c;泛型编程即编写与类型无关的通用代码&#xff0c;是代码复用的一种手段 模板就是泛型编程的基础。 例 我们经常使用的交换函数就可以使用泛型编程来进行编写&#xff0c;这样可以大大减少重复的代码 一般编写方式 可以…

MyBatis拦截器(Interceptor)的理解与实践

文章目录 1. 什么是MyBatis拦截器&#xff1f;2. 拦截器的基本原理3. 编写自定义拦截器3.1 示例&#xff1a;实现SQL执行时间统计拦截器3.2 配置拦截器 4. 实战应用场景5. 总结 &#x1f389;欢迎来到SpringBoot框架学习专栏~ ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博…

可视化大屏开发系列——页面布局

页面布局是可视化大屏的基础&#xff0c;想要拥有一个基本美观的大屏&#xff0c;就得考虑页面整体模块的宽高自适应&#xff0c;我们自然就会想到具有强大灵活性flex布局&#xff0c;再借助百分比布局来辅助。至此&#xff0c;大屏页面布局问题即可得到解决。 可视化大屏开发系…

三大交易所全面恢复 IPO 申请

6月21日晚间&#xff0c;北交所受理了3家企业的IPO申请&#xff0c;这是北交所时隔3个月之后恢复IPO受理。6月20日晚间&#xff0c;沪深交易所各受理了1家IPO申请&#xff0c;这是沪深交易所时隔半年后再次受理IPO。这也意味着&#xff0c;三大交易所IPO受理全部恢复。 6月21日…

Ubuntu-基础工具配置

基础工具配置 点击左下角 在弹出界面中点击 以下命令都是在上面这个界面执行&#xff08;请大家注意空格&#xff09; 命令输入完后&#xff0c;回车键就是执行,系统会提示输入密码&#xff08;就是你登录的密码&#xff09; 1.安装net工具 &#xff1a;&#xff08;ifconfi…

代码-功能-python-爬取博客网标题作者发布时间

环境&#xff1a; python 3.8 代码&#xff1a; # 爬取博客园内容 # https://www.cnblogs.com/import re from lxml import etree import requests import json import threading from queue import Queue import pymysql import timeclass HeiMa:def __init__(self):# 请…

2小时极速入门 TypeScript-慕课网 笔记

TS文档&#xff1a;https://www.tslang.cn/docs/handbook/modules.html 一&#xff0c;什么是TS 注:Typescript无法在浏览器中运行 ,所以需要编译器,将TS转变为JS 问&#xff1a;TS运行这么麻烦&#xff0c;为什么还要有TS&#xff1f; 答&#xff1a;TS强类型 1&#xff0c;规…

【大疆pocket3】到手后5个必改初始设置关键点(上)

【大疆pocket3】到手后5个必改初始设置关键点&#xff08;上&#xff09; 一&#xff0c;简介二&#xff0c;必改关键点2.1 视频拍摄格式2.2 竖拍选择2.3 开拍后息屏设置2.4 摇杆转速设置2.5 提示音设置为静音 一&#xff0c;简介 本文记录大疆pocket3上手后5个必改关键点&…

独立看门狗窗口开门狗

独立看门狗 接线图&#xff1a;按键用于阻塞喂狗。独立看门狗&窗口开门狗接线一样。 第一步&#xff0c;是开启时钟了&#xff0c;只有这个LSI时钟开启了独立看门狗才能运行&#xff0c;所以初始化独立看门狗之前&#xff0c;LSI必须得开启&#xff0c;但是这个开启LSI的…

System.Data.OracleClient.OracleException:“ORA-12571: TNS: 包写入程序失败

System.Data.OracleClient.OracleException:“ORA-12571: TNS: 包写入程序失败 解决方法&#xff1a; 首先%oracle_home%/network/admin下的sqlnet.ora文件&#xff0c;把SQLNET.AUTHENTICATION_SERVICES (NTS)加个 # 注释掉就好了

稳态与敏态业务阶段

稳态业务就是比如你登录学校的图书馆教务处这些业务系统 用户数量和数据基本上不会发生太大的变化 业务系统的更新也不是很频繁&#xff0c;比较方便资源的采购 敏态业务就是比如我开发一个应用上线了&#xff0c;我不知道有多少用户和数量&#xff0c;无法预估 这就没办法…