当前位置: 首页 > news >正文

WebGL 绘制圆点

前言

这篇文章不说WebGL相关概念了,初学者先到网上看看WebGL相关概念。这里着重写一下在vue3前端框架下,如何通过webGL绘制圆点。

着色器代码(画点)

画点相关的着色器代码有顶点着色器和片元着色器,代码如下:

顶点着色器:

const vertexShaderSrc = `void main() {gl_Position = vec4(0, 0, 0, 1.0);gl_PointSize = 20.0;}
`;

片元着色器:

const fragmentShaderSrc = `void main() {gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);}
`;

初始化着色器

在网上找的一个通用的初始化着色器代码,如下所示:

function loadShader(gl, type, source) {//根据着色类型,建立着色器对象const shader = gl.createShader(type);//将着色器源文件传入着色器对象中gl.shaderSource(shader, source);//编译着色器对象gl.compileShader(shader);//返回着色器对象return shader;
}
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;
}

代码中注释蛮详细的。

vue3框架使用webGL画点

这里直接贴上全部代码了,如下所示:

<template><div class="point-wrapper"><div style="margin-bottom: 20px">绘制点</div><canvas id="point" width="100" height="100"></canvas></div>
</template><script>
export default {name: "point",
};
</script><script setup>
import { onMounted } from "vue";
import { initShaders } from "@/utils/myGL.js";const vertexShaderSrc = `
void main() {gl_Position = vec4(0, 0, 0, 1.0);gl_PointSize = 20.0;
}
`;const fragmentShaderSrc = `
void main() {gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
`;const fragmentShaderSrcCircle = `
precision mediump float;
void main() {float d = distance(gl_PointCoord, vec2(0.5, 0.5));if(d < 0.5) {gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);} else { discard; }
}
`;onMounted(() => {const canvas = document.getElementById("point");// webgl画笔const gl = canvas.getContext("webgl");// 初始化着色器initShaders(gl, vertexShaderSrc, fragmentShaderSrc);// 指定将要用来清理绘图区的颜色gl.clearColor(0.0, 0.0, 0.0, 1.0);// 清理绘图区gl.clear(gl.COLOR_BUFFER_BIT);// 绘制顶点gl.drawArrays(gl.POINTS, 0, 1);setTimeout(() => {initShaders(gl, vertexShaderSrc, fragmentShaderSrcCircle);// 指定将要用来清理绘图区的颜色gl.clearColor(0.0, 0.0, 0.0, 1.0);// 清理绘图区gl.clear(gl.COLOR_BUFFER_BIT);// 绘制顶点gl.drawArrays(gl.POINTS, 0, 1);}, 5000);
});
</script><style lang="scss" scoped>
.point-wrapper {width: 200px;height: 200px;background-color: gray;
}
</style>

myGL.js中放的是初始化着色器initShaders 接口。

大家可以拷贝代码运行一下,刚开始出现一个正方形点,5秒后变成圆点

相关文章:

WebGL 绘制圆点

前言 这篇文章不说WebGL相关概念了&#xff0c;初学者先到网上看看WebGL相关概念。这里着重写一下在vue3前端框架下&#xff0c;如何通过webGL绘制圆点。 着色器代码(画点) 画点相关的着色器代码有顶点着色器和片元着色器&#xff0c;代码如下&#xff1a; 顶点着色器&…...

迅为RK3588开发板Android12 设置系统默认不锁屏

修改 frameworks/base/packages/SettingsProvider/res/values/defaults.xml 文件&#xff0c;修改为如下 所示&#xff1a; - <bool name"def_lockscreen_disabled">false</bool> <bool name"def_lockscreen_disabled">true</bool&…...

香港服务器速度快的原因

1. 传统域名解析过程 了解CDN系统先从域名解析说起。通常&#xff0c;我们在浏览器中输入域名&#xff0c;敲回车后&#xff0c;进入网站进行信息的获取。您分析过输入域名后浏览是如何请求到服务器上的信息&#xff0c;您了解域名解析的过程么&#xff1f; 1.1. 主机解析域…...

过滤器,监听器与拦截器的区别

过滤器&#xff0c;监听器与拦截器的区别 ​ 过滤器和监听器不是Spring MVC中的组件&#xff0c;而是Servlet的组件&#xff0c;由Servlet容器来管理。拦截器是Spring MVC中的组件&#xff0c;由Spring容器来管理 ​ Servlet过滤器与Spring MVC 拦截器在Web应用中所处的层次如…...

clickhouse ssb-dbgen数据构造 及 clickhouse-benchmark简单压测

一、 测试数据构造 1. 数据样例 官方文档有给出一批数据样例。优点是比较真实&#xff0c;缺点是太大了&#xff0c;动辄上百G不适合简单小测试 Anonymized Yandex.Metrica DatasetStar Schema BenchmarkWikiStatTerabyte of Click Logs from CriteoAMPLab Big Data Benchma…...

【数据分析】统计量

1. 均值、众数描述数据的集中趋势度量&#xff0c;四分位差、极差描述数据的离散程度。 2. 标准差、四分位差、异众比率度量离散程度&#xff0c;协方差是度量相关性。 期望值分别为E[X]与E[Y]的两个实随机变量X与Y之间的协方差Cov(X,Y)定义为&#xff1a; 从直观上来看&…...

【通用消息通知服务】0x4 - 目前进展 阶段复盘

【通用消息通知服务】0x4 - 阶段复盘 达成 基本的API已经写完✍️了(消息查看发送, 模板crud,终端crud,发送渠道crud,计划crud,计划执行查看)拆分server, executor, planner三个入口, 方便针对性水平扩展整体架构初步形成&#xff0c;通过队列实现了事件驱动模型和消息订阅发…...

vue若依导出word文件,简单的实现

首先前端导包,注意exportDocx的导包位置要修改成你自己的 import {exportDocx} from /utils/docUtil/docutil.js; import {addDays} from date-fns; import {listGongyi} from "/api/system/detail";然后新建一个测试按钮 <el-col :span"1.5"><…...

【LeetCode75】第四十题 最大层内元素和

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 这道题和LeetCode75的上一题大同小异&#xff0c;都是要我们对二叉树进行层序遍历。 那具体如何层序遍历我再上一题也详细介绍过了&#…...

脱离束缚:数字化工厂中ARM控制器的革命性应用!

近年来&#xff0c;中国数字经济体系已进入高速增长阶段。制造业作为中国经济高质量发展的重要支撑力量&#xff0c;在面临生产成本不断上涨、关键装备和核心零部件“受制于人”等挑战时&#xff0c;建设数字化工厂已成必然。 数字化工厂数据采集出现的问题 在数字工厂的建设…...

queue ide is not exists in YARN

报错内容: 2023-08-17 17:30:31.342 [ERROR] [BaseTaskScheduler-Thread-7 ] o.a.l.o.s.a.AsyncExecTaskRunnerImpl (79) [run] - Failed to execute task astJob_1_codeExec_1 org.apache.linkis.orchestrator.ecm.exception.ECMPluginErrorException: errCode:…...

【C++】UDP通信:客户端向服务端发送消息并接收服务端回应的消息

目录 1 UDP简介 2 通信 3 实践 4 运行结果 1 UDP简介 (1)UDP通信是无连接的,因此不需要connect操作。 (2)UDP通信过程需要指定数据接收端的IP和端口。 (3)UDP不对收到的数据进行排序。 (4)UDP对接收到的数据报不回复确认信息。 (5)如果发生了数据丢失,不会丢一…...

RabbitMq深度学习

什么是RabbitMq? RabbitMQ是一个开源的消息队列中间件&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff09;。它被广泛用于分布式系统中的消息传递和异步通信。RabbitMQ提供了一种可靠的、可扩展的机制来传递消息&#xff0c;使不同的应用程序能够相互之间进行…...

EasyExcel自定义字段对象转换器支持转换实体和集合实体

文章目录 1. 实现ObjectConverter2. 使用3. 测试3.1 导出excel3.2 导入excel 1. 实现ObjectConverter package com.tophant.cloud.common.excel.converters;import cn.hutool.json.JSONUtil; import com.alibaba.excel.converters.Converter; import com.alibaba.excel.enums.…...

Linux重置ROOT密码(CentOS)

解释说明 在CentOS中重置root密码通常需要进入单用户模式&#xff0c;这是一个没有密码限制的特殊模式&#xff0c;允许您以root权限登录系统并更改密码。 重启系统 如果您无法登录到系统&#xff0c;可以通过重启系统来开始这个过程。您可以使用虚拟机控制台、物理服务器控制台…...

【Spring】一文带你彻底搞懂IOC、AOP

目录 首先简单了解一下什么是spring框架 什么是IOC&#xff1f; 什么是依赖注入&#xff08;DI&#xff09;&#xff1f; 控制反转和依赖注入又有什么关系&#xff1f; AOP是什么&#xff1f; SpringAOP的实现 说了这么多抽象概念&#xff0c;举个实例方便理解 首先简单…...

国际旅游网络的大数据分析(数学建模练习题)

题目&#xff1a;国际旅游网络的大数据分析 伴随着大数据时代的到来,数据分析已经深入到现代社会生活中的各个方面。 无论是国家政府部门、企事业单位还是个人&#xff0c;数据分析工作都是进行决策之前的 重要环节。 山东省应用统计学会是在省民政厅注册的学术类社会组织&…...

音视频技术开发周刊 | 308

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 OpenAI首席科学家最新访谈&#xff1a;对模型创业两点建议、安全与对齐、Transformer够好吗&#xff1f; OpenAI首席科学家Ilya Sutskever最近和他的朋友Sven Strohband进…...

多旋翼飞控底层算法开发系列实验 | 多旋翼动力系统设计实验3

多旋翼动力系统设计实验3 01/多旋翼动力系统简介​​​​​​​ 多旋翼无人机的动力系统通常包括螺旋桨、电机、电调以及电池。动力系统是多旋翼最重要的组成部分&#xff0c;它决定了多旋翼的主要性能&#xff0c;如悬停时间、载重能力、飞行速度和飞行距离等。动力系统的部件…...

Redis之Sentinel(哨兵)机制

一、Sentinel是什么&#xff1f; Sentinel&#xff08;哨岗、哨兵&#xff09;是Redis的高可用性&#xff08;high availability&#xff09;解决方案&#xff1a;由一个或多个Sentinel实例&#xff08;instance&#xff09;组成的Sentinel系统&#xff08;system&#xff09;…...

【独家首发】Midjourney针孔相机风格参数白皮书:基于1,842张生成图像的光学畸变量化分析(含f/1.4–f/16等效光圈映射表)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney针孔相机风格的光学本质与范式演进 光学原理的数字复现 针孔成像&#xff08;Pinhole Camera&#xff09;的本质在于无透镜、小孔衍射与直线传播的几何约束。Midjourney 通过扩散模型隐式建…...

AI 测试用例审核 Skill:把用例评审从“凭经验”变成“可评分”

导读测试用例写完以后&#xff0c;最怕的不是数量不够&#xff0c;而是评审会上被连续追问&#xff1a;“这个前置条件是什么&#xff1f;” “这里为什么直接跳到下一步&#xff1f;” “预期结果怎么算出来的&#xff1f;” “边界值有没有覆盖&#xff1f;” “PRD 里这个互…...

FanControl深度实战指南:5分钟精通Windows风扇精准控制

FanControl深度实战指南&#xff1a;5分钟精通Windows风扇精准控制 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/f…...

Raspberry Pi Imager终极指南:快速上手树莓派系统安装

Raspberry Pi Imager终极指南&#xff1a;快速上手树莓派系统安装 【免费下载链接】rpi-imager The home of Raspberry Pi Imager, a user-friendly tool for creating bootable media for Raspberry Pi devices. 项目地址: https://gitcode.com/gh_mirrors/rp/rpi-imager …...

可穿戴智能服饰制作:NeoPixel灯带与Circuit Playground的集成实践

1. 项目概述&#xff1a;当可穿戴电子遇上创意服饰如果你和我一样&#xff0c;既着迷于微控制器上跑起的第一行代码&#xff0c;又无法抗拒布料、针线和那些闪闪发光的小玩意儿&#xff0c;那么这个项目就是为你准备的。将NeoPixel灯带和Circuit Playground微控制器“缝”进一件…...

高危场所专用防爆门 符合建筑消防标准

在化工车间、危险品仓库、油气厂区、锅炉房、粉尘车间等高危作业场所&#xff0c;爆炸、明火、冲击波隐患时刻存在&#xff0c;普通门窗无法起到安全防护作用&#xff0c;高危场所专用防爆门成为场地安防必备设施。 这款专业防爆门严格遵循国家建筑消防规范生产制造&#xff0…...

17个AI新闻站吸4.4万访客,10美元即可搭建,滥用AI威胁原创媒体!

《佛罗里达论坛报》揭秘AI伪媒体系统智东西5月15日报道&#xff0c;当地时间5月14日&#xff0c;美国调查媒体《佛罗里达论坛报》披露&#xff0c;南佛州《南佛罗里达标准报》是由AI批量生成的伪媒体系统。该网站包装本地新闻团队&#xff0c;用AI生成记者头像、履历和邮箱&…...

靠谱的微晶电热板机构

在实验设备领域&#xff0c;微晶电热板是一款重要的工具&#xff0c;选择靠谱的机构至关重要。微晶电热板的重要性微晶电热板在环境监测、食品安全、农产品检测等分析实验室中应用广泛。它能够为样品前处理提供稳定的加热环境&#xff0c;保障实验结果的准确性。行业报告显示&a…...

SLO-Warden:云原生时代SLO自动化管理的工程实践

1. 项目概述&#xff1a;当SLO成为运维的“紧箍咒”在云原生和微服务架构成为主流的今天&#xff0c;服务的稳定性和可靠性不再是锦上添花&#xff0c;而是业务的生命线。对于运维工程师和SRE&#xff08;站点可靠性工程师&#xff09;而言&#xff0c;我们每天都在和各种指标、…...

如何让QtScrcpy投屏画质提升300%?3个隐藏参数解锁超清体验

如何让QtScrcpy投屏画质提升300%&#xff1f;3个隐藏参数解锁超清体验 【免费下载链接】QtScrcpy Android实时投屏软件&#xff0c;此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScr…...