Code Monkey home page Code Monkey logo

threejs-miniprogram's Introduction

threejs-miniprogram

Three.js 小程序 WebGL 的适配版本。

使用

可参考 example 目录下的示例项目或参照以下流程:

  1. 通过 npm 安装

    npm install --save threejs-miniprogram
    

安装完成之后在微信开发者工具中点击构建 npm。

  1. 导入小程序适配版本的 Three.js
import {createScopedThreejs} from 'threejs-miniprogram'

Page({
  onReady() {
    wx.createSelectorQuery()
      .select('#webgl')
      .node()
      .exec((res) => {
        const canvas = res[0].node
        // 创建一个与 canvas 绑定的 three.js
        const THREE = createScopedThreejs(canvas)
        // 传递并使用 THREE 变量
      })
  }
})

说明

  • 本项目当前使用的 Three.js 版本号为 0.108.0,如要更新 threejs 版本可发 PR 修改或 fork 后自行修改。
  • 该适配版本的 THREE 不在全局环境中,如使用 Three.js 的其他配套类库,需要自行传入 THREE 到类库中。
  • 如在使用过程中发现有适配问题,可通过 issue 反馈或发 PR 修复。

threejs-miniprogram's People

Contributors

ele828 avatar tidyzq avatar ttzztztz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

threejs-miniprogram's Issues

threejs-miniprogram真机调试报错

开发者工具: Stable 1.05.2103190(默认设置)
代码: threejs-miniprogram/example
问题: 无法真机调试,开发者工具内正常
开发者工具警告: threejs-miniprogram/index.js 文件体积超过500KB,已跳过压缩以及ES6转ES5得处理
真机调试报错:Cannot set property 'ontouchstart' of undefined

于是新建个项目,直接复制 threejs-miniprogram/index.js,只渲染一个球,没有触摸事件,还是同样的报错

后来尝试新建项目用npm安装threejs-miniprogram,npm构建时报错未找到npm包入口文件,构建失败,全删重装了几次也一样

真机调试无法渲染报错

手机预览正常,使用真机调试模式无法渲染,会报一个错误

remote-helper.js:1 eval script evaluate_id #11 failed TypeError: Cannot set property 'ontouchstart' of undefined
    at WAService.js:1:679251
    at Array.forEach (<anonymous>)
    at WAService.js:1:679222
    at WAService.js:1:679683
    at WAService.js:1:423621
    at Object.m (WAService.js:1:1905)
    at Object.value [as subscribeHandler] (C:\Users\ysh9818\AppData\Roaming\Tencent\微信开发者工具\package.nw\js\unpack\remote-helper.js:68:2165)
    at [VM 12]:1:17
    at Script.runInContext (vm.js:135:20)
    at Object.runInContext (vm.js:298:6)

image

Regist canvas & Unregist Canvas

目前我看到的接口是:
createScopedThreejs
来绑定一个canvas
能不能做一个动态的绑定,比如在某个页面绑定某个页面的canvas,换个页面就取消上个页面的canvas然后绑定新的canvas。
就是提供两个接口:RegistCanvas还有UnregistCanvas。
这样其实其他的three.js定义的对象不需要删除可以公用。只是最后显示刷新的canvas可以动态改变。

如果实现有问题的话,请问有没有卸载函数,目前只有createScopedThreejs创建。删除内存和卸载呢?

加载有贴图的gltf文件会报错

鼠标事件响应怎么实现?

  1. 插件有实现鼠标事件响应吗?还是需要自己手动添加?
  2. 我包装好OrbitControls引入到项目里,但没有反应,是不是由于没有引入事件导致的?
  3. 有没相应的使用示例?

example 在 iPhone 大屏手机上显示不了模型

你好,我在 iPhone 大屏手机上跑 example 工程一片空白,显示不了模型。同样的代码在 iPhone8 上面可以显示。能帮忙看下是什么问题吗?现在我定位到的导致出问题的地方是 canvas 的高度。下面是我测试的机型和测试步骤:

测试机型:iPhone6p/iPhone7p/iPhone X
测试步骤:
1,把 index.xml 第一个 canvas style 里面的 height 改成 456 px 就会显示不了(大于455的值都显示不了),模拟器可以显示。
2,把 index.xml 第一个 canvas style 里面的 height 改成 455 px 就可以显示。

如果你们那边也复现出同样的问题,麻烦告知一声,谢谢🙏

大模型在真机上报错

如题,使用threejs-miniprogram的过程中,展示比较小的模型时在开发者工具和真机上都能正常显示,展示大的模型时,在开发者工具上正常显示,在真机上报错,报错如图所示
miniprog-threejs

真机环境下报错

设备: iphoneX
系统: ios 13.3.1
报错提示:Cannot set property 'ontouchstart' of undefined

使用Threejs时,出现报错

报错信息:<ReferenceError:atob is not defined>
使用的exmaple的例子,将导入的模型修改后,在手机上测试,出现报错,模型也加载不出来
手机型号:Redmi K30

0.0.6版本构建后无法运行

下载最新代码(0.0.6版本),install和build都正常,成功生成dist/index.js,但是在小程序import后调用createScopedThreejs报错:
thirdScriptError
(void 0) is not a function

改成0.0.5版本可以正常运行,查看提交记录在index,js的createScopedThreejs添加了行HTMLCanvasElement = undefined,把该行注释掉0.0.6才可以正常运行

添加获取鼠标位置

/example/test-cases/cubes.js 文件 第8行开始

  animate();
  function getmouse(event){
    mouse.x=(event.touches[0].clientX/canvas._width) * 2 - 1;
    mouse.y=-(event.touches[0].clientY/canvas._height) * 2 + 1;
  }
  function init() {
    canvas.addEventListener('touchstart',getmouse);
    canvas.addEventListener('touchmove',getmouse);
    camera = new THREE.PerspectiveCamera(70, canvas.width / canvas.height, 1, 10000);
.....

这样可以获取鼠标位置

<canvas>type无法指定为'2d'

  1. 需要在原声组件上, 覆盖
  2. 如果type指定为'webgl'的话, <cover-view>组件无法显示
  3. 如果type指定为'2d', threejs无法正常渲染.

没有RGBELoader

如题,有没有小程序可以用的RGBELoader,加载hdr

是否支持VideoTexture

实际运行没有报错,但是效果不对:并没有播放视频,而是使物体消失或透明了。

带贴图的模型加载出问题

TypeError: Cannot read property 'URL' of undefined
at GLTFParser.loadTexture (gltf-loader.js:1973)
at GLTFParser.getDependency (gltf-loader.js:1713)
at GLTFParser.assignTexture (gltf-loader.js:2075)
at GLTFParser.loadMaterial (gltf-loader.js:2283)
at GLTFParser.getDependency (gltf-loader.js:1709)
at GLTFParser.loadMesh (gltf-loader.js:2539)
at GLTFParser.getDependency (gltf-loader.js:1693)
at gltf-loader.js:2931
at GLTFParser.loadNode (gltf-loader.js:2925)
at GLTFParser.getDependency (gltf-loader.js:1689)

重新构建 npm 后的版本 canvas.dispatchTouchEvent 等方法丢失

image

如上图:

  • 左边的为重新构建 npm 后报的错, 0.0.3 - 0.0.5 都一样, 0.0.6 直接构建 npm 失败(同 #38 ).
  • 右边为当前仓库版本 0.0.3 且未执行 npm install 与 构建 npm 动作的.

期待结果:

  • 0.0.6 等任意版本可构建 npm 成功, 且应加上 canvas.dispatchTouchEvent 等方法.

关于gltf模型加载贴图的问题

如果gltf模型有带贴图的话,那么会显示gltf里面加载模型贴图问题
url未定义,blob无法使用,本人小白,初来小程序,希望大神帮忙解决

GLTFLoader无法加载外部glb模型

request和download域名也加了。无法加载模型,居然报错也没有,try catch也加上也没有任何信息输出。
换用qq域名的一个demo模型,一切顺利。

感觉是域名的问题?但是为什么什么反馈都不给,报错也没有,什么都没有

Error: THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported. Use LegacyGLTFLoader instead.

克隆示例代码后运行报错,看似是glTF版本问题,有人碰到过吗?

Error: THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported. Use LegacyGLTFLoader instead.
    at GLTFLoader.parse (VM34 gltf-loader.js:163)
    at Object.onLoad (VM34 gltf-loader.js:86)
    at a.<anonymous> (VM40 index.js:2)
    at a.e.<computed> [as onload] (VM40 index.js:1)
    at a._ (VM40 index.js:1)
    at l (VM40 index.js:1)
    at Function.o.<computed> (VM27 WAService.js:1)
    at VM27 WAService.js:1
    at E (VM27 WAService.js:1)
    at i.<anonymous> (VM27 WAService.js:1)

image

多级页面,在安卓机型上,多次来回进入退出会导致崩溃

代码说明

代码片段共2个页面,有首页(index/index)和测试页(three/index).

问题安卓机型

mate 20 pro, oppo r11, pixel 3, 等

复现路径

从首页进入测试页,再从测试页返回首页,如此反复多次(有些3次,有些7,8次,还有10多次),会出现小程序闪退.

目前代码片段里已经加入内存释放功能,但是依然每次进入都会内存增加多,释放少,导致越来越多.即使加入内存警告,大部分情况下,没有警告,就直接闪退.

代码片段
https://developers.weixin.qq.com/s/Ps7EDJm87ygO

频繁进入模型页面微信会闪退

您好,我频繁进入模型页面微信会闪退,模型就是 demo 提供的模型,代码也是类似的比较简单,这个库使用有什么需要注意的地方吗?例如页面退出要调用什么释放内存的 api ?还是说内存问题无法解决?
我已经上传了微信日志,微信号:liangxiaowei18,时间点:2019-12-21 上午,您这边可以帮忙查下什么原因吗?

TextureLoader真机加载图片失败

试用了一下午先用的GLTFLoader开发者工具上使用成功在真机上加载出错,因为GLTF里有很多其他加载器看源码才发现是TextureLoader加载失败,然后同样的直接用TextureLoader在开发者工具中可以在但是在真机上会加载失败。
` THREE = createScopedThreejs(canvas)

var texture = new THREE.TextureLoader().load(
  'https://zugou.vip/aa.jpg',
  function(texture) {
    console.log('加载成功')
  },
  undefined,
  function(err) {
    console.log('加载失败')
  }
);`

企业微信截图_15680210257369

因为通过npm下载过来的是build后的代码所以不好查看原因。但是感觉问题出在textureloader中使用的imageloader出现了问题。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.