WebGL与Vue结合连续绘制点

在vue中使用unity3D实现webGL将要呈现的效果 文章目录 Vue + webGL + unity3D 1. 什么是webGL? 1.1 兼容性 2. 什么是unity3D? 2.1 unity3D 的发展史 2.2 从 JavaScript 调用 Unity 脚本函数 2.2 WebGL 性能注意事项 2.2.1可在 WebGL 上期待什么样的性能? 2.2.2 影响性能的 WebGL 特有设置 2.2.3 WebGL 性能分析 2.2.4 后台标签中的 WebGL 内容 2.2.5 限制 WebGL 性能 3. 如何在vu 阅读详情

本文主要介绍《WebGL编程指南》中连续绘制点功能的学习,并将代码改造在Vue框架中运行。部分代码源自https://blog.youkuaiyun.com/GISuuser/article/details/82224057以及《WebGL编程指南》。

1、在src/components中新建canvas.vue文件。

2、代码如下:

<template>
  <div>
    <canvas ref="myglCanvas" @mousedown="clickCanvas($event)" width="400" height="400"></canvas>
  </div>
</template>

<script>
import Tools from "../lib/tools";
export default {
  name: "glCanvas",
  data() {
    return {
      VSHEADER_SOURCE: `attribute vec4 a_Position;
                        void main(){
                        gl_Position = a_Position;
                        gl_PointSize = 10.0;
                        }`,
      FSHEADER_SOURCE: `void main(){
                        gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
                        }`,
      points: [],
      gl: null,
      a_Position: null
    };
  },
  methods: {
    //点击canvas事件
    clickCanvas: function(ev) {
      //屏幕坐标系转WebGL坐标系
      let x = ev.clientX; //鼠标点击处的X坐标
      let y = ev.clientY; //鼠标点击处的Y坐标
      let rect = ev.target.getBoundingClientRect();      
      let canvasWidth = this.$refs.myglCanvas.width;
      let canvasHeight = this.$refs.myglCanvas.height;
      x = (x - rect.left - canvasWidth / 2) / (canvasWidth / 2);
      y = (canvasHeight / 2 - (y - rect.top)) / (canvasHeight / 2);
      this.points.push(x);
      this.points.push(y);

      this.gl.clear(this.gl.COLOR_BUFFER_BIT); //清除之前绘制的点
      for (let i = 0; i < this.points.length; i += 2) {
        //重新绘制点
        this.gl.vertexAttrib3f(
          this.a_Position,
          this.points[i],
          this.points[i + 1],
          0.0
        );
        this.gl.drawArrays(this.gl.POINTS, 0, 1);
      }
    },
    setGL: function() {
      this.gl = this.$refs.myglCanvas.getContext("webgl");
    },

  },
  mounted() {    
    this.setGL();
    Tools.initShaders(this.gl, this.VSHEADER_SOURCE, this.FSHEADER_SOURCE);
    this.a_Position = this.gl.getAttribLocation(this.gl.program, "a_Position");
    //设置背景色
    this.gl.clearColor(0.0, 0.0, 0.0, 1);
    //设置缓冲区颜色
    this.gl.clear(this.gl.COLOR_BUFFER_BIT);
  }
};
</script>

<style scoped>
</style>

1-5行  vue的template模板中新建canvas节点,并设置ref属性为myglCanvas目的是能够在代码中获取canvas对象;添加mousedown点击事件;设置canvas的宽高,注意这里的width和height,而不是在style中设置宽高。两者的区别,请自行百度。

8行引入Tools进行webgl的基本设置,代码内容参见前期的文章。

13-20行设置顶点着色器和片元着色器,这里使用的是模板字符串(``)。与之前不同的是这里在顶点着色器中引入了a_Position变量给顶点的位置赋值;

attribute变量用于传输与顶点相关的数据;

uniform变量用于传输与顶点无关的数据,即所有顶点都相同的数据;

21行定义绘制的点的数组;

22行定义webgl上下文;

23行定义a_Position变量;

43-47行这只顶点的位置;

53行建立gl上下文;

60行获取顶点着色器中的a_Position,并建立与data中a_Position的联系;

3、运行效果

4、更多内容请扫码关注我的微信公众号,或者在微信里搜索公众号webgis学习,我会不定期更新自己的webgis方面的学习心得。

DINOv2 基于自定义数据集进行图片分类预测 (前提是安装好pytorch)1. pip安装2. 下载dinov2提供的预训练模型,需要自行前往网站上查找dinov2模型进行下载。模型需要下载三个文件:下载完成后将上述三个文件放置在本地一个名为dinov2_base的文件夹中即可。 阅读详情

相关推荐

不用敲命令!用宝塔面板可视化部署pbootCMS的保姆级教程(2024最新版)

本文提供2024年最新版pbootCMS可视化部署教程,全程使用宝塔面板操作,无需任何命令行知识。从服务器初始化、LNMP环境配置到源码上传、安装向导,手把手指导用户通过图形化界面快速搭建专业网站,适合零基础新手和追求高效建站的用户。

weixin_42509507的博客 490

Vue与WebGL结合

本文将WebGL与当前前端比较火的Vue框架进行初步结合,以备后续项目开发需要。部分代码源自https://blog.youkuaiyun.com/GISuuser/article/details/82224057以及《WebGL编程指南》。 大家可以自己百度搜索vue的安装配置。这里仅介绍本项目的开发过程。 1、创建vue工程 在cmd窗口中输入vue init webpackvueproject,...

XTTX110的博客 1万+

【Linux系统】Kdenlive软件多机位同音频视频同步化处理

Kdenlive简介 官网链接:https://kdenlive.org/zh/ 命令行安装: apt-get install kdenlive Kdenlive能够进行多轨道视频编辑,可以使用和调整多条音频、视频轨道。每条轨道可以按需进行单独锁定、静音。 Kdenlive多机位同音频视频同步化处理步骤 1. 新建Kdenlive文件 选择<文件>-<新建>,建立新的kdenlive文件,初始设置为<视频轨:2>,<音频轨:2>。 视.

qq_31550269的博客 1886

vue中使用百度webgl地图以及踩坑记录

百度webgl地图简单使用教程,初始化、添加marker和自定义覆盖物以及设置个性化主题等

猫七先生的博客 3489

[华为ensp]双核心的园区网

(给部分只会emm......借鉴的朋友提个醒,在group-member e0/0/2 to e0/0/20是所选,所以到了p l t那会给2-20端口都配置上trunk,别紧张,不是你问题)完成上述配置后,PC1可以ping通HTTP2服务器,Client1可以访问HTTP2服务器的HTTP站点,如果不能就要检查上述是否正确。本次实验主要目的是采用双核心的冗余网络,采用MSTP和VRRP技术,在核心层交换机上配置SC1上配置OSPF协议。SC1交换机上配置VRRP。在SC1上配置DHCP。

2301_78859499的博客 1416

Unity URP风格化水面Shader全流程实现与性能优化指南

在游戏开发中,Shader是实现特定视觉风格的核心技术,它通过编写在GPU上运行的程序,控制模型每个像素的最终颜色与光照表现。其原理在于对顶点位置、纹理坐标、光照信息及深度等数据进行一系列数学运算与插值。这项技术的价值在于能够以极高的自由度创造从写实到卡通的各种渲染效果,同时通过算法优化实现对硬件资源的精准控制。在移动游戏、独立游戏等对性能与风格化有强烈需求的场景中,自定义Shader尤为重要。本文聚焦于使用Unity URP渲染管线,从零构建一个高效的风格化水面Shader,详细拆解了深度色、波浪动画、边

weixin_34320724的博客 372

探索Vue.js与WebGL的融合:Vue-GL

探索Vue.js与WebGL的融合:Vue-GL 是一个强大的开源项目,它将流行的JavaScript框架Vue.js与高性能3D图形库Three.js相结合,为开发人员提供了一种优雅的方式来构建Web上的交互式3D应用。这篇文章将深入探讨Vue-GL的核心概念、技术分析、应用场景及其独特之处。 项目简介 Vue-GL旨在简化在Vue组件中使用WebGL的过程。它以Three.js为基础,通过Vu...

gitblog_00034的博客 1108

磁环电感参数计算

电感饱和是指当电感中的电流超过一定阈值时,电感中的磁场无法继续增加,而是达到一个饱和状态,导致电感的感应电动势减小或消失。电感通常由线圈组成,当通过线圈的电流不断增加时,线圈内部的磁场也随之增加。然而,当电流达到一定程度时,线圈的铁芯磁化达到饱和,无法进一步增加磁场强度。电感饱和的阈值取决于电感的结构、材料和尺寸等因素。通常情况下,电感的额定电流会标明其饱和电流值。一旦电感中的电流超过了饱和电流,电感将饱和并出现异常行为。当我们谈论电感饱和的时候,实际上是在谈论磁芯饱和——空心的电感永远不会饱和。

小幽余生不加糖 4032

将WebGL打包的unity项目部署至Vue中

好在你的windows在C盘自带了字体,我这里使用的微软雅黑来进行了替换,别的字体我没有测试,可自行尝试。点击file ---》 Building Settings ---》 Player Settings ---》 Publishing Settings 勾选点击Build之后进行打包,最终在指定目录下生成三个文件,打包完成直接点击index.html是无法直接运行的,会报错这是因为它需要通过一个本地或远程服务器(例如通过 http:// 协议访问)并占用一个端口来运行。这里我们除了。

m0_56308072的博客 2637

华南理工大学-大学物理实验-不良导体热导率测量

不良导体热导率测量 引言 导热系数(又叫热导率)是反映材料热性能的重要物理量。热传导是热交换的三种(热传导、对流和辐射)基本形式之一,是工程热物理、材料科学、固体物理及能源、环保等各个研究领域的课题。材料的导热机理在很大程度上取决于它的微观结构,热量的传递依靠原子、分子围绕平衡位置的振动以及自由电子的迁移。在金属中电子流起支配作用,在绝缘体和大部分半导体中则以晶格振动起主导作用。因此,某种材料的导热系数不仅与构成材料的物质种类密切相关,而且还与材料的微观结构、温度、压力及杂质含量相联系。在科学实验和工程设计

mohen_777的博客 873

MIKE水动力笔记13_数字化海图2之克里金插值

在进行MIKE水动力建模之初,需要准备好水深数据,本专题系列博文主要讲解如何将扫描版JPG格式海图数据在ArcGIS中进行数字化并制作成xyz水深地形数据,用的克里金插值方法,仅供参考。

晏长街的博客 2881

实战篇:(三)项目实战Vue 3 + WebGL 创建一个简单的 3D 渲染应用

我们将使用 Vue 3 和 WebGL 创建一个简单的 3D 渲染应用。项目将展示如何在 Vue 组件中集成 WebGL,并渲染一个旋转的立方体。

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

3D扩散模型的构建与优化:多模态融合在三维物体生成中的作用【附核心代码实例】

随着技术的发展,基于扩散模型的3D内容生成已经成为一个激动人心的领域。通过不断优化扩散模型的结构和算法,结合多模态信息、视角控制和高效网络架构,未来的3D生成技术将不仅能够生成逼真的物体,还能满足虚拟现实、游戏设计、电影制作等行业对高质量、实时生成的需求。

一键难忘的博客 2863

WebGL与Vue结合连续绘制彩色点

本文在上篇文章的基础上,将连续绘制的点改为随机的彩色点。直接上代码。 <template> <div> <canvas ref="myglCanvas" @mousedown="clickCanvas($event)" width="400" height="400"></canvas> </div> </tem...

XTTX110的博客 382

IDEA的使用指南

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

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

WebGL——给画布换颜色、绘制一个点、三维坐标系

本文介绍了WebGL的基本概念,并通过WebGL给画布换背景颜色、绘制一个点、绘制三维坐标系理解归一化设备坐标等内容...

HuoZhiyan 的博客 3205

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Vue与WebGL结合--绘制不同大小的点

本文将点的尺寸变量传入顶点着色器,并将顶点坐标和尺寸数据存放在同一个缓冲区中进行渲染,达到绘制不同大小的点的目的,本文部分代码源自《WebGL编程指南》。 代码如下: <template> <div> <canvas ref="myglCanvas" width="400" height="400"></canvas> <...

XTTX110的博客 526

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Vue与WebGL结合--绘制彩色点和三角形

上篇文章中的点的颜色都为红色,其中的颜色变量直接在片元着色器中设置完成。本文介绍将颜色数据与点的坐标数据一起传入着色器中进行点的颜色设置,需要用到varying类型变量。本文部分代码源自《WebGL编程指南》。 代码如下: <template> <div> <canvas ref="myglCanvas" width="400" height="40...

XTTX110的博客 570

Vue与WebGL结合绘制三角形

本文主要介绍Vue与WebGL结合绘制三角形,这里用到新的知识点--缓冲区。本文部分代码源自《WebGL编程指南》。 这里创建了一个initBuffer的函数,用于操作缓冲区。代码如下 <template> <div> <canvas ref="myglCanvas" @mousedown="clickCanvas($event)" width="4...

XTTX110的博客 819

Vue与WebGL结合--纹理

本文介绍vue与WebGL结合给四边形添加纹理,文中部分代码及图片源自《WebGL编程指南》。 代码如下: <template> <div> <canvas ref="myglCanvas" width="400" height="400"></canvas> </div> </template> &l...

XTTX110的博客 1322

探索跨平台开发新境界:Unity WebGL 与 Vue 的完美结合

探索跨平台开发新境界:Unity WebGL 与 Vue 的完美结合 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在现代Web开发中,跨平台和多技术栈的结合已成为趋势。本项目提供了一个创新的示例,展示了如何将Unity WebGL与Vue框架无缝结合。通过这个项目,开发者可以学习到如何在Vue项目中嵌入Unity WebGL内容,并实现两者之间的交互。无论你是前端开...

gitblog_09813的博客 828

vue与SuperMap iClient for WebGL 10i 结合

作者:赵爽 之前SuperMap官方的博客也发布过一篇vue+webpack+webgl的文章,但是有些初学的小伙伴不是很清楚,这篇文章主要是详细讲一下vue和webgl10i的结合。 注:webgl10i和以前的webgl有些许不同 以前的webgl是有两个核心js文件(zlib.min.js和Cesium.js),10i版本的已将两个js合二为一,只需要一个Cesium.js 文章目录1....

weixin_43565052的博客 1995

【亲测免费】 Unity WebGL 结合 Vue 示例项目

Unity WebGL 结合 Vue 示例项目 去发现同类优质开源项目:https://gitcode.com/ 项目简介 本仓库提供了一个示例项目,展示了如何将 Unity WebGL 与 Vue 框架结合使用。通过这个示例,你可以学习如何在 Vue 项目中嵌入 Unity WebGL 内容,并实现两者之间的交互。 项目内容 Unity WebGL 构建文件:包含 Unity 项目生成的 We...

gitblog_09762的博客 1002

Unity 打包成WebGL与Vue交互Demo

--- ## 项目简介 本示例仓库演示了如何将Unity开发的游戏或应用打包成WebGL格式,并在基于Vue.js的前端应用中进行集成与交互。通过这个项目,开发者可以学习到Unity与现代Web技术结合的方法,实现在Web页面上运行Unity内容并实现JavaScript与Unity之间的数据交换,非常适合需要混合现实、3D互动功能的Web应用开发。 ## 技术栈 - **Unity**:

gitblog_09720的博客 1287

Vue与WebGL结合--逐片元光照

本文主要讲述Vue与WebGL结合并实现逐片元光照。文中部分代码源自《WebGL编程指南》 代码如下 <template> <div> <canvas ref="myglCanvas" width="400" height="400"></canvas> </div> </template> <s...

XTTX110的博客 569

Vue与WebGL结合--多重纹理

本文在上篇文章的基础上利用Vue与WebGL结合添加多重纹理。文中部分代码和资源源自《WebGL编程指南》。 代码如下: <template> <div> <canvas ref="myglCanvas" width="400" height="400"></canvas> </div> </template...

XTTX110的博客 557

SuperMap iClient3D for WebGL教程-Vue开发环境配置入门

作者:为梦齐舞 最近使用vue的客户愈发的增多,Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。 本节教程带大家在Vis...

SuperMap技术控 4万+
上一篇: Vue与WebGL结合
下一篇: WebGL与Vue结合连续绘制彩色点
XTTX110
博客等级 码龄15年 35粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值