【xrframe】优化ar相机中加载模型效果

方法一:定义渲染width和height

javascript 复制代码
//组件生命周期:在视图层布局完成后执行
 ready() {
    const info = wx.getSystemInfoSync();//在小程序中同步获取系统信息
    const width = info.windowWidth;//获取屏幕的宽度(单位为物理像素)
    const height = info.windowHeight;//获取屏幕的高度(单位为物理像素)
    const dpi = info.pixelRatio;//设备像素比,即物理像素与逻辑像素之间的比率
    this.setData({
      width,
      height,
      renderWidth: width * dpi * this.data.dpiScale,//与dpi,this.data.dpiScale相乘将逻辑像素转换为物理像素,同时考虑了 dpiScale影响因子
      renderHeight: height * dpi * this.data.dpiScale,
    });
  },

width(宽度): 用于设置 AR 相机的水平分辨率,即摄像头画面的宽度。较高的值会导致更高的水平分辨率,使画面更清晰,但也会增加性能负担。
height(高度): 用于设置 AR 相机的垂直分辨率,即摄像头画面的高度。与宽度类似,较高的值会导致更高的垂直分辨率,画面更清晰,但也会增加性能负担。

默认情况下,小程序 AR 相机的 width 和 height 的渲染宽度和高度与屏幕的宽度和高度相同,即等于设备的物理像素分辨率。

此外,自定义组件内置的属性包括:

id: 组件的唯一标识符

disable-scroll: 控制是否禁止滚动。

style: 用于设置组件的样式,可以包含各种 CSS 样式属性,如width、height、top、left等。

markerImg: 设置 AR 标记的图像。

bind:arTrackerState: 用于绑定 AR 跟踪器状态的事件处理函数。

复制代码
<!-- 1. 使用xrframe自定义组件 渲染ar和模型 - -->
<xr-ar-2dmarker 
	disable-scroll 
	id="main-frame" 
	width="{{renderWidth}}"
	height="{{renderHeight}}" 
	style="width:{{width}}px;height:{{height}}px;top:{{top}}px;left:{{left}}px;display:block;" 
	markerImg="{{markerImg}}" 
	bind:arTrackerState="handleARTrackerState" />

<!-- 2. 使用threejs+VKSession在canvas 渲染ar和模型 -->
<canvas 
	type="webgl" 
	id="webgl" 
	style="width: {{width}}px; height: {{height}}px" 
	bindtouchstart="onTouchstart" 
	bindtouchend="onTouchEnd" 
	bindtouchmove="onTouchmove" />

方法二:后处理(PostProcess)使用快速抗锯齿 fxaa

复制代码
<xr-camera clear-color="0.925 0.925 0.925 1" background="ar" is-ar-camera post-process="fxaa"/>

避坑:

  1. 官方最新xrframe限制提醒(主要是设备,开发基本库,xr-frame语法限制等)
  2. vision kit 版本限制
  3. 获取渲染上下文对象
    老版本wx.createCanvasContext(string canvasId, Object this)
    新版本wx.createSelectorQuery().select('#webgl').node().exec(res => { console.log('id为webgl的dom', res);
    注意:在自定义组件或包含自定义组件的页面中,应使用 this.createSelectorQuery() 来代替wx.createSelectorQuery()否则无法获取到上下文
  4. 兼容小程序的threejs库:threejs.miniprogramthree-platformize

原生init npm 生成package.json

uniapp 使用 npm init -y

npm i threejs-miniprogram

小程序工具栏,【工具】→ "构建npm",即可完成npm构建

总结: xrframe组件渲染ar轻量好上手,threejs对模型操作和自定义手势更灵活

学习参考:
小程序官方xr-frame-demo

相关推荐
Creeper.exe2 小时前
冥想呼吸助手:在 AR 眼镜上实现沉浸式呼吸引导
ar
qq_124987075313 小时前
基于SpringBoot微信小程序的智能在线预约挂号系统(源码+论文+部署+安装)
spring boot·后端·微信小程序·毕业设计·计算机毕设·毕业设计源码
程序媛徐师姐14 小时前
Java基于SSM的即时空教室查询小程序,附源码+文档说明
java·微信小程序·小程序·ssm·即时空教室查询小程序·java即时空教室查询小程序·即时空教室查询微信小程序
虚拟仿真教学研究员15 小时前
基于数字孪生与 VR/AR 技术的新能源汽车实训系统架构与实践
汽车·ar·vr
普密斯科技18 小时前
精准把控每一处细节——FPGA焊点高度精准检测实施方案
人工智能·深度学习·数码相机·计算机视觉·fpga开发·测量
ar012318 小时前
AR远程协助增效:新一代工业与服务升级的关键核心
人工智能·ar
qq_124987075318 小时前
基于springboot的微信小程序的博物馆文创系统的设计与实现(源码+论文+部署+安装)
java·spring boot·后端·spring·微信小程序·毕业设计·计算机毕设
计算机徐师兄19 小时前
Java基于微信小程序的社区垃圾回收管理系统【附源码、文档说明】
java·微信小程序·社区垃圾回收管理系统·社区垃圾回收管理系统小程序·社区垃圾回收管理微信小程序·社区垃圾回收管理小程序·jav社区垃圾回收管理小程序
ffreask20 小时前
2 硬件选型指南:如何为openclaw选择最佳小龙虾处理设备
数码相机·ai·编程·技术
Bnews21 小时前
动作捕捉技术:机器人科研的精准“眼睛”与NOKOV度量动捕的创新实践
数码相机·机器人