Pixi.js的魅力

在这里插入图片描述

摘要:官网

Web开发的时代,图形和动画已经成为了吸引用户注意力的重要手段之一。而 Pixi.js 作为一款高效、易用的2D渲染引擎,已经成为了许多开发者的首选~~
项目中,有一些图像的处理操作(3D图,2D图都有),其中3D图也是通过获取后端服务的图像2D数据进行绘制展示,通过鼠标各种操作调用后端服务来进行重新获取新图数据。这里前端设计到图像的操作使用了PIXIJS

pixijs的最关键的三个对象:
Application:这个是用来创建Pixi应用的。PIXI.Application会自动选择使用Canvas或者是WebGL来渲染图形,这取决于您的浏览器支持情况。PIXI.Application有一个options对象,可以设置一些参数,比如显示的区域的宽,高,,透明度,分辨率等等等。具体官网有很详细说明。
stage:来自PixiJS中文网的解释,stage(舞台)是Pixi的Container(容器)对象。你可以把一个Container(容器)想象成一种空盒子,它会把你放进去的东西组合在一起并储存起来。stage(舞台)对象是场景中所有可见事物的根容器。你在stage(舞台)里放的任何东西都会在canvas画面上渲染出来,。
sprite:sprite(精灵)是一种的特殊图像对象。您可以控制它们的位置、大小和其他属性,

总体的理解和使用步骤就是:首先用Application创建Pixi应用,当创建了Pixi应用后,舞台容器也就自动创建了,可以理解为容器就是一个用来存放物体的东西,比如我们现实中的存钱罐,收纳箱,衣柜什么的。可以通过应用对象访问到舞台。光有舞台这个容器后,我们就是需要将物体放入进去,这里的物体一般就是我们需要操作的图像。我们通过sprite来加入进来。当然图像渲染中自然少不了图像纹理一说,可以使用YIPixi的loader加载图像纹理并创建精灵,然后将其加入到Pixi的容器stage中,这样就完成了Pixi的整个基本的过程。

在vue3中使用的PixiJS,第一步创建Pixi应用,关键代码如下:

import * as PIXI from 'pixi.js'; 
import '@pixi/unsafe-eval' 
let Pixi = new PIXI.Application({width:800,height:800});

将Pixi应用加入到页面元素中展示。将Pixi加入到页面的的元素中,这里“DivLeft3d”是我页面中的一个div元素。,即在onMounted的勾子函数中调用如下代码:

document.getElementById("DivLeft3d").appendChild(Pixi.view);

创建sprite并将其加入到Pixi的容器中进行展示:我这里的示例代码中是直接加载的图像的二进制byte[]数据,注意Pixi的图像数据格式是RGBA格式的。我之前这里的数据格式BGRA的,导致显示的图像一直是一个颜色,捣鼓了一天才找到原因。针对Pixi的鼠标事件,dataIndex是我的自定义参数,如果这里不需要参数,可以直接用js箭头函数。还有就是我这里事件是卸载精灵上的,也可以写在舞台stage上来触发,具体看各自使用。

function pixiLoadImg(dataIndex, imagedata) {let pixelData = new Uint8Array(imagedata);let sprite = PIXI.Sprite.from(PIXI.Texture.fromBuffer(pixelData, 800, 800, {resourceOptions: {width: 800, height: 800, format: 6408}}));//对于有事件的精灵,通常需要设置sprite.interactive = true , 对于作按钮用的精灵,需要设置sprite.buttonMode = true;sprite.buttonMode = true;sprite.interactive = true;//sprite.anchor.set(0.5) //设置锚点在中间//这里是针对精灵的一些鼠标事件。sprite.on('pointerdown', (event) => { PIXImousedown(dataIndex, event) }).on('pointerup', (event) => { PIXImouseup(dataIndex, event) }).on('pointermove', (event) => { PIXImousemove(dataIndex, event) }).on('pointerover', (event) => { PIXImouseover(dataIndex, event) }).on('pointerout', (event) => { PIXImouseout(dataIndex, event) })console.log("添加Pixi数据")Pixi.stage.removeChildren();Pixi.stage.addChild(sprite);}

另外需要注意的是在Pixi上是没有mousewheel事件的。这个我们可以在更外层的元素上触发这个事件,或者在整个window上监听这个事件,然后判断是否是Pixi上的操作即可,这里是中键进行缩放操作。参考代码类似:

window.addEventListener("mousewheel", (event) => {console.log("mousewheel");const step = event.wheelDelta > 0 ? 0.1 : -0.1//event.preventDefault(); //阻止事件冒泡if (selectDataIndex > 0) {proxy.$axios.post(proxy.GLOBAL.baseUrl + 'Hear/MouseWheel',{ "dataIndex": selectDataIndex, "delta": event.deltaY }).then((res) => {let byteBuffer = _base64ToArrayBuffer(res.data.base64Image);//缩放图像pixiLoadImg(selectDataIndex, byteBuffer);}).catch((res) => {alert("MouseMove异常");console.log(res);});}})

最后,附带获取鼠标在Pixi上的坐标位置的方法:
如果我们是用Pixi的精灵来触发的,通过事件参数来获取到位置信息:event.data.getLocalPosition(event.currentTarget.parent);,类似let currentPosition=event.data.getLocalPosition(event.currentTarget.parent);其中currentPosition.x和currentPosition.y就是对应的鼠标坐标:
如果是用Pixi的舞台上触发的,通过舞台上的事件参数来获取位置信息:event.data.globalX和event.data.globalY就是对应的鼠标位置。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DataGrip 数据库备份

一、备份 1、找到需要被备份的数据库demo,右键>Import/Export>Export with mysqldump 2、配置路径 点击run,等待完成 导出成功 二、还原 选择 需要导入的数据库>右键>Import/Export>Restore with ‘mysql’ 点击run,刷…

如何本地搭建DolphinScheduler并无公网ip远程访问管理界面

文章目录 前言1. 安装部署DolphinScheduler1.1 启动服务 2. 登录DolphinScheduler界面3. 安装内网穿透工具4. 配置Dolphin Scheduler公网地址5. 固定DolphinScheduler公网地址 前言 本篇教程和大家分享一下DolphinScheduler的安装部署及如何实现公网远程访问,结合内…

医疗设备产生谐波对配电系统危害有哪些

1.对电网的影响 电网中的谐波会增加系统损耗,使设备发热,影响设备使用寿命。此外当并联的无功补偿电容器容抗与系统感抗匹配时,将发生n次并联谐振,造成电容器组的过电压和过电流。当基波频率为时,谐振频率&#xff0c…

36V到80V降5V1A电源芯片WT6039

36V到80V降5V1A电源芯片WT6039 宽电压12V到90V的降压DC-DC转换器WT6039,功能强大,使用广泛。 WT6039是一款功能非常强大的降压DC-DC转换器芯片,它在12V到90V的宽电压范围内都能正常工作。WT6039不仅具有使能开关控制、参考电源、误差放大器等…

Apache Doris 2.0.2 安装步骤 Centos8

Linux 操作系统版本需求 Linux 系统版本当前系统版本CentOS7.1 及以上CentOS8Ubuntu16.04 及以上- 软件需求 软件版本当前版本Java1.81.8.0_391GCC4.8.2 及以上gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-4) 1、查看操作系统版本 方法 1:使用命令行 打开终端或…

Linux Ubuntu环境部署SVN服务并结合内网穿透实现公网访问内网资料库

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…

软文写作三大原则与技巧,媒介盒子分享

网络技术的快速发展带来传播环境的巨变,软文已经成为各大企业宣传的主要形式之一。而软文广告的核心就是其文案,一个好的软文不仅能够传达品牌理念,还能吸引用户了解品牌,提高转化率,今天媒介盒子就来和大家聊聊软文写…

NVIDIA 正式发布中国特供 RTX 4090D,减量不减价刀法再进化

随着中国特供 RTX 4090D 显卡发布,老美禁售导致的 NVIDIA 旗舰游戏显卡断供、涨价风波注定要结束了。 就在上周四,NVIDIA 正式发布了应对老美禁令的中国特供版 RTX 4090D 显卡。 别的不说,前段时间疯狂炒作、高价囤货 RTX 4090 的商贩们首先…

实现文件拖拽上传的功能

1 先来看一下效果 2 我们来看一下代码执行的结果: 我们创建目标的容器盒子 和可以展示数据的ul 监听进入目前盒子的事件 3 文件进入目标容器中解析文件

图像分割实战-系列教程10:U2NET显著性检测实战2

🍁🍁🍁图像分割实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 U2NET显著性检测实战1 U2NET显著性检测实战2 5、残差Unet模块 class RSU7(nn.Module):#UNet07DRES…

LLM之RAG实战(十二)| 在RAG管道中实现上下文压缩和过滤

在RAG中可能面临的最大问题之一是检索器应该检索什么内容? ​ 实际使用中,检索到的上下文并不完全有用,可能检索处理较大的块中只有非常小的一部分与答案相关,还可能对于一个特定的问题需要来自多个块合并来得到答案。 一…

第一届能源电子产业创新大赛太阳能光伏赛道决赛及颁奖仪式在宜宾成功举办

在工业和信息化部电子信息司指导下,由工业和信息化部产业发展促进中心和宜宾市人民政府主办,宜宾市经济和信息化局、宜宾高新技术产业园区管理委员会承办的第一届能源电子产业创新大赛太阳能光伏赛道决赛及颁奖仪式于2024年1月3日-5日在宜宾市成功举办。…