WebGL笔记:WebGL中JS与GLSL ES 语言通信,着色器间的数据传输示例:用鼠标控制点位

最新推荐-2026年固态电池+锂电正极+硅基负极等关键技术实践PPT合集(55份).zip 2026年最新固态电池+锂电正极+硅基负极等关键技术实践PPT合集,共55份。供大家查阅。 一、固态电池 1.全固态电池用硅基负极材料研究进展 2.全固态电池硅基负极的开发思考 3.功能型固态电解质设计及界面调控 4.固态电池及关键材料研发与产业化进展 5.固态电池的产业化应用探索 6.固态锂电池开发现状及未来展望 7.固态锂离子电池正极结构设计与材料选择 8.固态锂金属电池设计与应用 9.硫化物全固态电池石墨和硅负极性能调控技术 10.硫化物固态电解质行业应用 11.聚合物基固态电解质与固态电池的关键技术 12.蜂鸟声共振技术-固态电池产业化的革命性创新 13.长安汽车固态电池应用探索 14.高安全性固态电池技术发展趋势 15.高性能硫化物全固态锂电池解决方案 16.高硅体系的膨胀解决方案 二、硅基负极 1.化学气相沉积碳包覆技术在硅基负极材料中的应用 2.新型粘结剂解决 硅基负极膨胀问题 3.氧化亚硅负极材料化学预锂化与界面设计 4.流化床法生产磷酸铁锂及硅负极材料研究 5.石墨烯包覆硅碳负极 6.硅基材料的发展现状及展望 7.硅基负极与固态电解质 8.硅基负极技术与进展 9.硅基负极材料体积膨胀解决策略 10.硅基负极材料及其结构设计 11.硅基负极材料的冶金法制备 12.硅基负极材料的发展与应用 13.硅基负极材料研究进展 14.硅基负极材料:从基础研究到产业应用 15.硅基负极析锂行为及调制研究 16.硅碳负极低成本制造技术报告 17.硅碳负极制备用多孔碳的开发 18.硅碳负极挑战和进展 19.硅碳负极新路线及关键材料制备 20.硅碳负极锂离子电池应力特性研究 21.锂电石墨负极材料工程化技术进步 22.锂离子电池负极材料 23.高容量石墨烯-硅基复合负极材料的研究进展 三、锂电正极 1.基于AI和图论结构化学的锂电池的材料基因探索 2.废旧磷酸铁锂电池梯次及再生利用进展 3.电动汽车大功率充电标准体系与检测认证实践 4.磷酸铁及磷酸铁锂异物防控管理 5.磷酸铁锂正极材料:液相法合成及产业化应用研究 6.磷酸锰铁锂正极材料的研究现状 7.车用动力电池安全标准化工作进展及未来展望 8.锂电层状氧化物正极材料的原子尺度失效机制 9.锂电正极材料工厂异物防控管理图册 10.锂离子电池高熵正极材料成分设计及储锂机制研究 11.高压实磷酸铁锂正极材料生产工艺配方.docx 12.高安全正极材料添加剂提升三元锂电安全性 13.高比能富锂锰基电池关键技术 14.高能量密度锂离子电池正极材料及应用研究 15.高镍单晶三元正极材料研究 16.三元高电压单晶正极材料 立即下载

用鼠标控制点位

<canvas id="canvas"></canvas>

<!-- 顶点着色器 -->
<script id="vertexShader" type="x-shader/x-vertex">
  attribute vec4 a_Position;
  void main() {
      // 点位
      gl_Position = a_Position;
      // 尺寸
      gl_PointSize = 50.0;
  }
</script>

<!-- 片元着色器 -->
<script id="fragmentShader" type="x-shader/x-fragment">
    void main() {
        gl_FragColor = vec4(1,1,0,1);
    }
  </script>

<script type="module">
  import { initShaders } from "./utils.js";

  const canvas = document.querySelector("#canvas");
  canvas.width = window.innerWidth;
  canvas.height = window.innerHeight;

  // 获取着色器文本
  const vsSource = document.querySelector("#vertexShader").innerText;
  const fsSource = document.querySelector("#fragmentShader").innerText;

  // 三维画笔
  const gl = canvas.getContext("webgl");

  // 初始化着色器
  initShaders(gl, vsSource, fsSource);

  // 设置attribute 变量
  const a_Position = gl.getAttribLocation(gl.program, "a_Position");

  gl.vertexAttrib1f(a_Position, 0.1);

  // 声明颜色 rgba
  gl.clearColor(0, 0, 0, 1);
  // 刷底色
  gl.clear(gl.COLOR_BUFFER_BIT);

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

  // 鼠标点击事件
  canvas.addEventListener("click", ({ clientX, clientY }) => {
    const { left, top, width, height } = canvas.getBoundingClientRect();
    const [cssX, cssY] = [clientX - left, clientY - top];

    //解决坐标原点位置的差异
    const [halfWidth, halfHeight] = [width / 2, height / 2];
    const [xBaseCenter, yBaseCenter] = [
      cssX - halfWidth,
      cssY - halfHeight,
    ];
    // 解决y 方向的差异
    const yBaseCenterTop = -yBaseCenter;
    // 解决坐标基底的差异
    const [x, y] = [xBaseCenter / halfWidth, yBaseCenterTop / halfHeight];

    gl.vertexAttrib2f(a_Position, x, y);
    // gl.clear(gl.COLOR_BUFFER_BIT);
    gl.drawArrays(gl.POINTS, 0, 1);
  });
</script>

utils.js

export function initShaders(gl, vsSource, fsSource) {
  // 创建程序对象
  const program = gl.createProgram();
  // 建立着色对象
  const vertexShader = loadShader(gl, gl.VERTEX_SHADER, vsSource);
  const fragmentShader = loadShader(gl, gl.FRAGMENT_SHADER, fsSource);
  // 把顶点着色对象装进程序对象中
  gl.attachShader(program, vertexShader);
  // 把片元着色对象装进程序对象中
  gl.attachShader(program, fragmentShader);
  // 连接webgl上下文对象和程序对象
  gl.linkProgram(program);
  // 启动程序对象
  gl.useProgram(program);
  // 将程序对象挂到上下文对象上
  gl.program = program;
  return true;
}

function loadShader(gl, type, source) {
  // 根据着色类型,建立着色器对象
  const shader = gl.createShader(type);
  // 将着色器源文件传入着色器对象中
  gl.shaderSource(shader, source);
  // 编译着色器对象
  gl.compileShader(shader);
  // 返回着色器对象
  return shader;
}
  • 这里核心点主要在: canvas坐标系和webgl坐标系之间的差异,由此计算出鼠标在webgl坐标系中的位置,并且控制点的位置

两者坐标系的核心算法

const { left, top, width, height } = canvas.getBoundingClientRect();
const [cssX, cssY] = [clientX - left, clientY - top];

//解决坐标原点位置的差异
const [halfWidth, halfHeight] = [width / 2, height / 2];
const [xBaseCenter, yBaseCenter] = [
  cssX - halfWidth,
  cssY - halfHeight
];
// 解决y 方向的差异
const yBaseCenterTop = -yBaseCenter;
// 解决坐标基底的差异
const [x, y] = [xBaseCenter / halfWidth, yBaseCenterTop / halfHeight];
Zotero 是学术管理领域非常优秀的软件 它功能成熟、生态稳定,帮助许多科研人员建立了最初的文献归档体系 Zotero 是学术管理领域非常优秀的软件。它功能成熟、生态稳定,帮助许多科研人员建立了最初的文献归档体系。但在当下日常科研与深度使用各类 Agent 时,传统的文献工具链暴露出一些断点:上下文严重分散:论文存储在 Zotero,笔记记在 Obsidian,与模型的推导和分析留在各个网页对话框中。三者数据彼此隔离,当需要 Agent 结合某篇具体论文与历史笔记进行深入推导时,用户必须反复手动复制粘贴。文献格式对模型不友好:人类习惯阅读排版良好的 PDF 文件;但对于模型而言,直接解析双栏排版、跨页表格、复杂数学公式和交叉引用的成本极高,极易产生识别错误与幻觉。结构化 Markdown 与 LaTeX 才是模型容易准确理解的格式。维护成本较高:AI 伴读、全文翻译、笔记同步等高频需求,往往需要安装和调试多个社区插件,配置门槛高且在版本升级时容易出现兼容性问题。批量自动化能力有限:通过 Deep Research 或自动化检索工具发现的大量文献,目前仍需人工在浏览器中逐篇点击保存,难以顺畅衔接批量研究流。Agentero 并非旨在替代 Zotero,而是探索一种人与 Agent 协同处理科研上下文的新方式:人类负责:提出研究问题、进行学术价值判断、深度研读与核心结论推导;Agent 负责:批量检索筛选、元数据抓取、图表与公式提取、引用关系梳理及基础总结。 立即下载

相关推荐

基于 .net 8、blazor 、furion 开发的后台管理系统,功能全(完善的用户权限管理、定时任务、附件管理、日志审计、物联网、企业门户等)、技术新

基于 .net 7开发的后台管理系统,系统前后台分离,api 是基于Furion 框架开发,前端是基于ant-design-blazor开发,系统使用技术或框架较新

webGl shader的学习记录(二)js 与(glsl语言) OpenGL ES之间如何进行交互?及其如何在js中对vertexShader与fragmentShader进行赋值

再上一个的章节之中我们知道,着色的书写分两个着色器(顶点着色器与片元着色器),从而结合成为一个可以使用的单独使用的着色器的程序。 下面我们将会接触到的是,如何使用js 与(glsl语言) OpenGL ES之间进行交互。 在了解两者之间如何通讯的时候,我们需要了解一些定义。这些定义出来的数据,可以是的glsl与js进行交互。 attribute变量: attribute变量是只能在ver...

huhudeni的博客 2047

Halcon 3D点云处理实战:从PLY文件读取到曲面匹配的完整流程(附避坑指南)

本文详细介绍了Halcon在3D点云处理中的完整流程,从PLY文件读取到曲面匹配,特别强调了3D算子的应用技巧和避坑指南。通过实战案例和参数优化建议,帮助开发者高效处理工业视觉检测中的复杂点云数据,提升匹配精度和性能。

weixin_42535720的博客 279

Three 之 three.js (webgl)GLSL-Card 中文手册(基础知识)

Three js 开发的一些知识整理,方便后期遇到类似的问题,能够及时查阅使用。本文简单记录 GLSL 的一些中文手册的基础知识,以便后期查阅。

仙魁XAN 2504

ANSYS Workbench接触分析实战:从算法选择到收敛难题破解

本文深入解析ANSYS Workbench接触分析的核心技术与实战技巧,涵盖四大接触算法选择、收敛难题破解秘籍及典型场景参数设置。通过实际案例演示如何优化接触刚度、pinball区域和非对称行为等关键参数,帮助工程师有效解决结构非线性问题,提升仿真效率和精度。

weixin_28705087的博客 362

从零到一:手把手教你用Python+LangChain搭建企业级RAG知识库(附避坑指南)

本文为开发者提供了一份详尽的实战指南,手把手教你使用Python和LangChain框架从零构建企业级RAG知识库。内容涵盖环境搭建、文档处理、向量化检索、提示工程及生产部署等核心环节,并重点分享了文档分割、检索优化等关键避坑经验,旨在帮助读者打造稳定、高效且易于维护的智能知识中枢。

weixin_29058331的博客 399

javascript基础学习系列五百七十三:GLSL 100 升级到GLSL 300

就可以从(0, 1)到(1, –1)再到(–1, –1)绘制一个三角形,并填充传给片段着色器的颜色。 gl.LINE_STRIP:类似于gl.LINE_LOOP,区别在于不会从最后一个顶点到第一个顶点绘制直线。 gl.TRIANGLES_FAN:类似于gl.TRIANGLES,区别在于前3 个顶点之后的顶点会作为第三个。 gl.TRIANGLES:将数组作为一系列顶点,在这些顶点间绘制三角形。以上常量可以作为gl.drawArrays()方法的第一个参数,第二个参数是数组缓冲区的起点索引,

m0_68635815的博客 443

Jetson AGX ORIN硬件初始化和环境部署

orin预安装了ubuntu20.04,只需开机,像重装系统一样设置用户信息即可,可以参考官网的教程[https://developer.nvidia.com/embedded/learn/get-started-jetson-agx-orin-devkit],官网提供了两种方式:一种是orin + 显示器,orin有提供DP接口,你需要准备一台显示器,最好也是有DP口的,因为我用DP转HDMI的连的,分辨率会受影响。确认安装的路径,一般直接回车安装在默认的 /home/你的名字/anaconda3。

TracyGC的博客 3836

js文件中读取 glsl等格式文件内容以适用vscode、webstorm中的代码提示

【代码】js文件中读取 glsl等格式文件内容以适用vscode、webstorm中的代码提示。

qq_20535249的博客 581

【中国大学生计算机设计大赛信息可视化赛道】国奖项目深入剖析—中国古代奇异怪兽移动端可视化应用项目

【中国大学生计算机设计大赛信息可视化赛道】国奖项目深入剖析—中国古代奇异怪兽移动端可视化应用项目 注:本文主要目的是对于往年国奖项目案例-可视化项目的深入剖析讲解,对源码、项目特点、要点、特色继续深入分析。帮助大家学习技术,掌握规律。

一键难忘的博客 3731

Cadence OrCAD Capture 保持元器件编号情况复制元件,复制后元器件编号与复制前不同的问题解决

如下图所示复制时,已经勾选了“Preserve reference on copy”但是复制后的编号却与复制前不一样。本文简单介绍其原因及解决方法。

fydar的博客 3165

基于Three.js的glsl编写环境搭建

目前无论是Three.js官方库还是一些其他的做法,基于网页端glsl的编写都是以字符串的形式来编写的,代码整洁尚且不谈,代码提示和格式校验都十分困难。本文介绍一种glsl与js分离的编写环境搭建方法。 一.安装Parcel Parcel是一款Web 应用打包工具使用简单快捷。 打开终端 npm install -g parcel-bundler 等待自动处理即可安装完成。 安装好以后,先进入项目...

eevee_1的博客 1284

CANoe中如何仿真报文的CRC和Counter,告诉你三种方法皆可实现

CANoe中如何仿真报文的CRC和Counter

蚂蚁小兵 5285

基于Qt与WebAssembly的医学影像Web端三维可视化实践

WebAssembly(Wasm)作为一种可在现代浏览器中高效运行的低级字节码格式,其核心原理是将C/C++等语言编译成接近原生性能的二进制模块,从而突破了JavaScript在计算密集型任务中的性能瓶颈。这项技术的核心价值在于,它使得开发者能够将成熟的、高性能的本地代码库(如医学影像处理算法)无缝迁移至Web平台,无需用户安装插件或客户端,极大地提升了复杂应用的可访问性和部署便利性。在工程实践中,结合Qt框架的跨平台能力与Emscripten工具链,开发者可以构建出具备桌面级性能的Web应用。其典型应用场

weixin_38166557的博客 352

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

从零构建C语言Web游戏引擎:ECS架构与WebAssembly跨平台实践

游戏引擎是驱动现代电子游戏的核心软件框架,其核心原理在于高效地管理游戏对象、处理资源并驱动渲染循环。在追求极致性能与可控性的场景下,开发者常选择C语言这类贴近硬件的系统级语言,以实现对内存、计算资源的精细掌控。其技术价值在于能够构建轻量、高性能且可深度定制的引擎核心。随着Web技术的演进,WebAssembly(Wasm)作为一种可在浏览器中高效运行的二进制指令格式,为高性能计算密集型应用打开了新的大门。这使得将使用C/C++等语言编写的、依赖特定架构模式(如实体-组件-系统)的复杂游戏逻辑,无需重写即可部

weixin_34126557的博客 417

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

javascript之WebGL第一篇 —— 着色器

HTML页面: <body> <canvas id="canvas" width="300" height="300"></canvas> <body/> 一谈起着色器就不得不说下GLSL了,GLSL是一种OpenGL着色语言,WebGL是基于OpenGL ES 2.0实现的。所 以 OpenGL 中使用的着色器可以直接在 WebGL 中使用。...

霍霍的博客 1028

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Three.js 着色器入门:从零开始学习 GLSL 编程

Three.js 是一个强大的 3D 图形库,它不仅提供了丰富的内置功能,还支持通过自定义着色器编写 GLSL (OpenGL Shading Language) 程序,从而实现更加灵活、精美的效果。本文将从零开始,带你学习 GLSL 编程,结合 Three.js 掌握如何创建自定义着色器。是运行在 GPU 上的小程序,用于控制每个顶点或像素的外观。运行代码,你会看到一个带有渐变色的立方体,颜色随着位置变化。为了实现动态效果,我们可以向片段着色器传递时间变量。现在,立方体会随着时间呈现动态变化的颜色。

一名热衷于技术的全栈开发者,专注于前端与后端的全面技术探索。在这里,我将分享我在技术领域的学习与成长,助力更多开发者的进步。 1682

javascript基础学习系列八百七十三:GLSL 100 升级到GLSL 300

就可以从(0, 1)到(1, –1)再到(–1, –1)绘制一个三角形,并填充传给片段着色器的颜色。 gl.LINE_STRIP:类似于gl.LINE_LOOP,区别在于不会从最后一个顶点到第一个顶点绘制直线。 gl.TRIANGLES_FAN:类似于gl.TRIANGLES,区别在于前3 个顶点之后的顶点会作为第三个。 gl.TRIANGLES:将数组作为一系列顶点,在这些顶点间绘制三角形。以上常量可以作为gl.drawArrays()方法的第一个参数,第二个参数是数组缓冲区的起点索引,

m0_68635815的博客 341

使用 Supabase Storage 与 Uppy 实现 TUS 协议的可恢复上传实战指南

本文围绕 [examples/storage/resumable-upload-uppy](https://link.gitcode.com/i/b85dcf2a75fcc9517c7efaf39ae260fc) 这份官方示例展开,讲解如何用 Uppy(浏览器端上传组件库)通过 TUS 协议向 Supabase Storage 进行**可恢复(断点续传)上传**。读完后你将掌握:为什么要用可恢复上

gitblog_00278的博客 507

[Three.js] GLSL入门教程

GLSL 是(OPEN)GL 的标准着色语言。这个编程语言可以用来为OPENGL/WebGL着色,Three.js 库中刚好包含的有这部分内容,当然,这个语言可以在任何你喜欢的WebGl中使用,但是,这次我关注的重点在Three.js上,这个语言有点像 C,但是是用来描述着色(需要一些顶点函数)。基本上,你可以用GLSL来解决着色你运行的那些几何形状。和着色其他的可以操作的相邻的东西。 着色流程 ...

资深架构师分享:深入剖析软件架构,探讨云计算、微服务、大数据等前沿技术。分享实践经验,促进技术交流,共同构建卓越系统。 1989

Three.js-着色器(glsl内置函数)

Threejs中着色器(glsl内置函数)的介绍及使用,利用内置函数实现各种图形及效果。

damadashen的博客 6381

Three.js-着色器(glsl内置函数实现各种效果2)

使用glsl内置函数及自定义函数实现各种图形。

damadashen的博客 1873

【qt openGL入门笔记】OSG着色器、纹理、变换

本篇的目的仅是为了展示OSG场景图下也可以单独处理着色器、纹理、变换。

ocy的博客 241

第97篇:三维数据加载-城市建筑白模自定义着色器——让一条光带沿高度扫上去,快慢却由帧率说了算

本文仅保留 CustomShader 通道,用 20 行 GLSL 实现沿建筑高度向上的扫描光带。核心在于着色器完全接管颜色,忽略 material.diffuse,直接以 u_baseColor 为起点重绘。动画时钟由 Cesium 的帧率驱动,故在 30fps 机器上慢一倍、144fps 上快 2.4 倍。诡异现象——加青色光致红分量变暗——源于颜色叠加的线性混合逻辑。本篇代码可调性强,不依赖属性数据,是四篇中最具通用性的风格化实现。

总得学点什么的博客 261

第96篇:三维数据加载-城市建筑白模样式+着色器——让色带按体量上色,最白的那档却涂不上去

本文解析了Cesium中Cesium3DTileStyle与CustomShader在白模上叠加的管线顺序:风格着色(style)在片元着色器中出现两次——首次在materialStage设置初始颜色,第二次在cpuStylingStage执行。由于REPLACE模式下model_colorBlend经ceil后恒为1,导致第二次乘法无效,使最亮色带“纯白”失效。同时,高度渐变仅增不减因着色器逻辑未归一化,且默认参数已过曝。两条通道非简单叠加,而是交错影响,揭示了渲染管线的深层机制。代码开源可复用。

总得学点什么的博客 617
上一篇: WebGL笔记:WebGL中JS与GLSL ES 语言通信,着色器间的数据传输示例:js控制绘制点位
下一篇: WebGL笔记:WebGL的基本绘图原理
Wang's Blog
博客等级 码龄12年 7438粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值