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

three-platformize 微信小程序 uniapp 使用截图功能

最近需要将3d场景进行截图,但是网上的各种各样,看的我一团乱麻,因此在解决完后就将这些简单的分享一下;

原理:将3维场景的那个canvas中的像素提取出来,找一个空的canvas二维画布放上去,然后用二维画布的那个进行截图

实际操作:

saveImage(){const [data, w, h] = screenshot(renderer, scene, camera, WebGLRenderTarget);const ctx = helperCanvas.getContext('2d')const imgData = helperCanvas.createImageData(data, w, h);helperCanvas.height = imgData.height;helperCanvas.width = imgData.width;ctx.putImageData(imgData, 0, 0);const imgDataFromCanvas = ctx.getImageData(0, 0, w, h)const hasPixel = imgDataFromCanvas.data.some(i => i !== 0)wx.canvasToTempFilePath({// @ts-ignorecanvas: helperCanvas,success(res) {wx.previewImage({urls: [res.tempFilePath],})}})},

说一下代码部分

import { screenshot } from 'three-platformize/tools/screenshot'

import { WebGLRenderTarget } from 'three';

是直接从three-platformize中导入进来的

然后放入场景、相机、渲染器、以及一个WebGLRenderTarget

然后当执行saveImage这个方法时就能够将当前相机看到的变成一个图片临时保存,也就是那个res.tempFilePath,

然后就是我通过this. 的方式一直获取不到data中的方法,因此呢就把渲染器什么的都放入到了全局变量中

注意:代码是在uniapp vue3中使用的,微信小程序原生的当然也是可以用的了

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux系统基础命令行指令——Ubuntu
  • 《C++20设计模式》命令模式思考
  • LabVIEW中自定义Ring控件的图标
  • 第十八节 LLaVA如何按需构建LORA训练(视觉、语言、映射多个组合训练)
  • 上海外贸建站公司wordpress模板推荐
  • 【Linux进阶】文件系统7——文件系统简单操作
  • FUSE(用户空间文件系统)命令参数
  • 学懂C#编程:C# 索引器(Indexer)的概念及用法
  • 通用个人客户关系管理系统设计
  • OpenSNN推文:盛夏智慧之光:七月高校新闻聚焦
  • Git命令常规操作
  • C++ //练习 14.45 编写类型转换运算符将一个Sales_data对象分别转换成string和double,你认为这些运算符的返回值应该是什么?
  • 电脑多开卡顿的所有原因汇总
  • IEC62056标准体系简介-2.IEC62056标准体系及对象标识系统(OBIS)
  • 嵌入式底层开发 入门学习路线
  • 〔开发系列〕一次关于小程序开发的深度总结
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • ES6系统学习----从Apollo Client看解构赋值
  • HTTP 简介
  • JavaScript-Array类型
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 设计模式走一遍---观察者模式
  • 手写双向链表LinkedList的几个常用功能
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 找一份好的前端工作,起点很重要
  • nb
  • python最赚钱的4个方向,你最心动的是哪个?
  • Spring Batch JSON 支持
  • 阿里云移动端播放器高级功能介绍
  • # include “ “ 和 # include < >两者的区别
  • # Redis 入门到精通(七)-- redis 删除策略
  • #在 README.md 中生成项目目录结构
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (pycharm)安装python库函数Matplotlib步骤
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (多级缓存)多级缓存
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (蓝桥杯每日一题)love
  • (七)glDrawArry绘制
  • (一)基于IDEA的JAVA基础12
  • (转)关于多人操作数据的处理策略
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • *p++,*(p++),*++p,(*p)++区别?
  • .Net Core缓存组件(MemoryCache)源码解析
  • .Net OpenCVSharp生成灰度图和二值图
  • .Net Redis的秒杀Dome和异步执行
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .NET微信公众号开发-2.0创建自定义菜单
  • ??myeclipse+tomcat
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思