uniapp微信小程序渲染threejs模型

335 阅读2分钟

项目中需要根据数据用threejs渲染模型,这个模型并不是已经存在的模型,而是实时画出来的。

之前是uniapp做的app都是OK的,也不卡顿很流畅(用的是renderjs),这次考虑到硬件升级,软件部分就考虑换成微信小程序。但是没有想到遇到蛮多问题。

1.uniapp微信小程序中使用threejs,渲染的模型转动的时候会很卡。

使用了three-platformize 和 threejs-miniprogram 都还是无效,大模型依然卡顿 放弃这个方案

2.在微信小程序中使用webview,内嵌外网。在外网的页面中使用threejs渲染模型,最终大模型渲染成功,一点都不卡顿。 但是项目中还碰到如下一些问题,记录一下: 1)传参问题 使用了src带参数。但是src的地址后面得跟上/#/ 外网那边使用vue项目,在onLoad(option)的option中获得参数

2)外网配置: manifest.json->web 配置的路由模式写hash, 运行的基础路径写 ./

3.微信小程序与webview 网页在项目中想实现实时交互,但是感觉行不通,因为似乎只有如下几种,并不能像在一个app中那样实时交互。

webview h5页面->小程序

方式一: webview的h5网页向微信小程序传值,需先引入JSSDK: https://res.wx.qq.com/open/js/jweixin-1.6.0.js 通过wx.miniProgram.postMessage api 向小程序传值wx.miniProgram.postMessage({ data: {foo: 'bar'} }) 小程序端通过 绑定message 接受H5页面传过来的值 e.detail = { data },data是多次 postMessage 的参数组成的数组

<web-view src="" @message="receiveMessage"></web-view>
receiveMessage(e){
  console.log(e.detail)//接收H5传过来的数据
}

问题:但是得注意得在特定时机(小程序后退、组件销毁、分享)触发组件的 message 事件,只能这些特定时机,基本宣布postMessage没用!

方式二:利用页面跳转带参 navigateTo 、navigationBack、switchTab、reLaunch、redirectTo H5端:

function handleClick(e){
	let id = e.target.dataset.id
	let url = `/pages/detail/detail?id=${id}`;
	wx.miniProgram.navigateTo({
    url,
  });
}

小程序端:

onLoad: function (options) {
	console.log(options.id)//接收H5传过来的数据
}

问题:url 数据量有限,且需要打开界面

小程序->webview h5页面 传值: 如果是简单得传参那么可以通过 src?arg=参数 的方式给h5页面传参, h5页面在onLoad的option中获取对应的参数 但是如果是交互只看到这种方式: 修改web-view的src属性 h5页面监听hash值变化:

window.onhashchange=function(){
  alert('hash值改变')
  console.log(window.location.hash)//获取当前hash值
}

看来微信小程序和webview h5页面的实时交互是不可能的了,尴尬~~~