微信小程序xr-frame图层与显示(五种方法)

这篇具有很好参考价值的文章主要介绍了微信小程序xr-frame图层与显示(五种方法)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:控制小程序隐藏与显示有五种方法,感兴趣的可以参考这个 文档,但是本文只赘述两种方法。

1.通过visible属性(详见:Three.js模型隐藏或显示)

visible:作用就是控制绑定该材质的模型对象是否可见,默认值是true,LineBasicMaterial、SpriteMaterial、MeshBasicMaterial等材质都会继承基类Material的可见性;

 <xr-node visible="{{visibleIndex}}">
 <xr-gltf model="miku" position="-0.15 0.75 0"  scale="0.21 0.21 0.21" rotation="0 180 0" anim-autoplay />
</xr-node>

注意:(链接)
1).visible=false时node内的子节点也会被隐藏,即使其visible=true
2).此属性可以在xr-node、xr-mesh、xr-light上使用,light隐藏效果为不发光

2.layer属性(详见:Layers 图层的简单介绍和简单实用)
xrframe中可以设置32个layer,每个node都可以关联到一个layer上,通过控制camera的cull-mask属性,来决定某个layer显不显示。 cull-mask可以接受32位无符号整数,其中每一位表示一个layer是否展示。 某个node是否展示,要看他和他所有父组件的layer是否在cull-mask中的对应位是1。 如代码中的圆柱(cylinder)要展示,需要cullMask & 2 === 1 && cullMask & 1 === 1,即cullMask的第1位和第2位都是1。

<xr-node layer="1">
    <xr-mesh node-id="mesh-sphere" position="0 1.25 -5" scale="1.25 1.25 1.25" geometry="sphere" material="standard-mat" uniforms="u_baseColorFactor:0.937 0.176 0.368 1"></xr-mesh>
    <xr-node layer="2">
      <xr-mesh node-id="mesh-cylinder" position="1 0.7 -3.5" scale="1 0.7 1" geometry="cylinder" material="standard-mat" uniforms="u_baseColorFactor:1 0.776 0.364 1"></xr-mesh>
    </xr-node>
  </xr-node>
    <!--layer属性 -->
  <xr-camera
    id="camera" node-id="camera" position="0 1.6 0" clear-color="0.925 0.925 0.925 1"
    target="camera-target" cull-mask="{{cullMask}}"
    camera-orbit-control=""
  ></xr-camera>

3.整体代码以及效果(来源:微信开放文档)

  • 父组件wxml部分:

  <xr-basic-visible-layer
    disable-scroll
    id="main-frame"
    width="{{renderWidth}}"
    height="{{renderHeight}}"
    style="width:{{width}}px;height:{{height}}px;top:{{top}}px;left:{{left}}px;display:block;"
    visibleIndex="{{visibleIndex}}"
    cullMask="{{cullMask}}"
  />

  <view class="btn-strap">
    <button class="btn" bind:tap="handleChangeVisible" style="background-color: rgb(237, 211, 231)">通过visible属性控制</button>
    <button class="btn" bind:tap="handleChangeCullMask" style="background-color: rgb(214, 226, 243)">通过layer和cullmask控制</button>
  </view>
  • 父组件js部分
Page({
  data: {
    xmlCode: '',
    visibleIndex: 1,
    cullMask: 0b011
  },
  handleChangeVisible() {
    this.setData({
      visibleIndex: 3 - this.data.visibleIndex
    });
  },
  handleChangeCullMask() {
    this.setData({
      cullMask: ((this.data.cullMask ^ (((this.data.cullMask & 0b100) >> 2) * 0b111)) << 1) | 0b1
    });
  }
});
  • 父组件json部分
{
  "usingComponents": {
    "xr-basic-visible-layer": "../../../components/xr-basic-visible-layer/index"
  },
  "disableScroll": true
}
  •  子组件wxml部分
<xr-scene id="xr-scene" bind:ready="handleReady">
  <xr-assets bind:progress="handleAssetsProgress" bind:loaded="handleAssetsLoaded">
    <xr-asset-material asset-id="standard-mat" effect="standard" />
  </xr-assets>
  <xr-node node-id="camera-target" position="0 1.25 -5"></xr-node>
  <xr-node visible="{{visibleIndex === 1}}">
    <xr-mesh node-id="mesh-plane" position="0 -0.05 -4" rotation="0 0 0" scale="5 1 5" geometry="plane" material="standard-mat" uniforms="u_baseColorFactor:0.48 0.78 0.64 1"></xr-mesh>
  </xr-node>
  <!--visible属性  -->
  <xr-node visible="{{visibleIndex === 2}}">
    <xr-mesh id="cube" node-id="mesh-cube" position="-1 0.5 -3.5" scale="1 1 1" rotation="0 45 0" geometry="cube" material="standard-mat" uniforms="u_baseColorFactor:0.298 0.764 0.85 1"></xr-mesh>
  </xr-node>
  <!--layer属性 -->
  <xr-node layer="1">
    <xr-mesh node-id="mesh-sphere" position="0 1.25 -5" scale="1.25 1.25 1.25" geometry="sphere" material="standard-mat" uniforms="u_baseColorFactor:0.937 0.176 0.368 1"></xr-mesh>
    <xr-node layer="2">
      <xr-mesh node-id="mesh-cylinder" position="1 0.7 -3.5" scale="1 0.7 1" geometry="cylinder" material="standard-mat" uniforms="u_baseColorFactor:1 0.776 0.364 1"></xr-mesh>
    </xr-node>
  </xr-node>
    <!--layer属性 -->
  <xr-camera
    id="camera" node-id="camera" position="0 1.6 0" clear-color="0.925 0.925 0.925 1"
    target="camera-target" cull-mask="{{cullMask}}"
    camera-orbit-control=""
  ></xr-camera>
  <xr-node node-id="lights">
    <xr-light type="ambient" color="1 1 1" intensity="1" />
    <xr-light type="directional" rotation="40 170 0" color="1 1 1" intensity="3" />
  </xr-node>
</xr-scene>
  •  子组件js部分 
Component({
  properties: {
    visibleIndex: {
      type: Number,
      value: 1,
      observer: function (newVal, oldVal) {
        
      }
    },
    cullMask: {
      type: Number,
      value: 0b001,
      observer: function (newVal, oldVal) {
        
      }
    }
  },
  data: {
    loaded: false
  },
  lifetimes: {},
  methods: {
    handleReady({detail}) {
      const xrScene = this.scene = detail.value;
      console.log('xr-scene', xrScene);
    },
    handleAssetsProgress: function({detail}) {
      console.log('assets progress', detail.value);
    },
    handleAssetsLoaded: function({detail}) {
      console.log('assets loaded', detail.value);
      this.setData({loaded: true});
    }
  }
})
  • 子组件json部分
{
  "component": true,
  "usingComponents": {},
  "renderer": "xr-frame"
}
  • 效果

xr-frame图层与显示文章来源地址https://www.toymoban.com/news/detail-484915.html

到了这里,关于微信小程序xr-frame图层与显示(五种方法)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • XR-FRAME 开始

    xr-frame 是一套小程序官方提供的XR/3D应用解决方案,基于混合方案实现,性能逼近原生、效果好、易用、强扩展、渐进式、遵循小程序开发标准。 在这一章中,我们将会带大家从头开始,用它构建一个XR小程序。 首先创建项目,让我们选择小程序工程: 之后先在 app.json 加上

    2024年02月12日
    浏览(62)
  • 微信小程序--逻辑层与界面层(1)

    11 12 }, 13 14 /** 15 * 生命周期函数–监听页面加载 16 / 17 onLoad: function (options) { 18 app.foo(); 19 20 }, 21 22 / * 23 * 生命周期函数–监听页面初次渲染完成 24 / 25 onReady: function () { 26 27 }, 28 29 / * 30 * 生命周期函数–监听页面显示 31 / 32 onShow: function () { 33 //在每次该界面唤醒时,获取当前页

    2024年04月25日
    浏览(34)
  • 微信小程序框架 —— 视图层、逻辑层与页面的生命周期

    14天阅读挑战赛 内心丰盈者,独行也如众。 目录 一、小程序框架 1.1 响应的数据绑定 1.2 页面管理 1.3 基础组件 1.4 丰富的 API 二、视图层 2.1 WXML 数据绑定 列表渲染 条件渲染 模板 2.2 WXSS 尺寸单位 样式导入 内联样式 选择器 全局样式与局部样式 2.3 WXS 三、逻辑层 3.1 注册页面

    2024年02月07日
    浏览(57)
  • 微信小程序内实现图层的移动、缩放、旋转等其他编辑操作

    图层有3种 1、 背景图层 : 不可操作,只能替换,不可改变层级(最底层) 2、 图片图层 : 可移动,缩放(支持双指缩放),旋转,可改变层级 3、 文字图层 : 可移动,缩放(会改变文字大小,支持双指缩放),旋转,文字编辑区域拉伸长度和宽度(不会改变文字大小),

    2024年02月09日
    浏览(40)
  • 微信小程序适配iphoneX,XR,12及以上,获取底部安全区域

    iphone x及以上的异形屏top高度为44px(或以上),非异形屏为20px。 先判断是否为异形屏,如果是,获取到底部小黑条区域的高度。在页面设置底边距padding-bottom/margin-bottom,把内容区域隔开。 小黑条区域高度=屏幕高度-安全区域的bottom值,安全区域指的是内容可见区域 注意小

    2024年03月11日
    浏览(73)
  • 【微信小程序】微信小程序tabBar使用中不显示问题

    目录 微信小程序中tabBar配置 tabBar配置好以后不显示的解决方法 微信小程序中下方的tabBar如何配置很多刚刚接触小程序的同学,有些懵。这里给你一个详细的配置文档: 小程序配置 | 微信开放文档 具体配置代码如下: tabBar:是我们指定了内部配置为小程序的tabBar, list:则

    2024年02月09日
    浏览(48)
  • 微信小程序显示loading效果,微信小程序节流效果,微信小程序生命周期,微信小程序组件的创建与使用

            文档地址:wx.showLoading(Object object) | 微信开放文档         请求前 显示loading 效果 ,请求结束后隐藏loading         下拉触底需要时间比较长,但是可能会一直进行请求,我们可以 设置一个 加载状态 ,用来控制什么时候 才可以加载         当我们loading 效果为tr

    2024年02月10日
    浏览(73)
  • 微信小程序(二)微信小程序选择本地图片显示并预览(实现左右滑动)

    在微信小程序里面实现选择图片然后预览是一个非常普遍的功能,在我们上传图片文件的时候,都会选择本地的图片进行上传,在上传之前会查看一下自己上传的图片是否准确。所以要做到预览图片。 下面就实现一个简单的本地图片显示预览的功能~~ 1、创建页面 这里我直接

    2024年02月03日
    浏览(76)
  • 微信小程序,仿微信,下拉显示小程序效果,非常丝滑

    1. 视图层 使用到了微信小程序的movable-view(可移动的视图容器)和movable-view的可移动区域。 微信小程序文档 3. css 注意:移动区域一定要大于可移动视图容器,否则将无法移动 我这里 .area-style设置200vh .view-style设置100vh 这里有个细节: 当移动区域到最下方时,继续往下滑动

    2024年02月15日
    浏览(53)
  • 微信小程序控制元素显示隐藏

    微信小程序是一种轻量级的应用程序,它可以在微信中运行,具有快速、便捷、易用等特点。在微信小程序中,我们可以通过控制元素的显示和隐藏来实现特定的功能。本文将介绍如何使用微信小程序控制元素的显示和隐藏,以及如何应用这些技巧来开发更好的小程序。 1.

    2024年02月04日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包