技术栈:Three.js 

插件:ThreeX

要求:模型格式GLB   需要挂载在服务器或者是个链接都可以

文件目录:

jsm是本地依赖包

代码:

wxml

  <canvas id="canvas_webgl" type="webgl" disable-scroll="true" bindtouchstart="webgl_touch" bindtouchmove="webgl_touch" bindtouchend="webgl_touch" bindtouchcancel="webgl_touch" style="width: 100%; height: 500rpx;"></canvas>

js

// webgl_nodes/webgl_nodes_loader_gltf_sheen.js
import {document,window,requestAnimationFrame,cancelAnimationFrame,Event,core
} from 'dhtml-weixin';
import * as THREE from '../../three/Three.js';import {NodeMaterial,color,uv,mix,mul,checker,float
} from '../jsm/nodes/Nodes.js';import {nodeFrame
} from '../jsm/renderers/webgl/nodes/WebGLNodes.js';import {OrbitControls
} from '../jsm/controls/OrbitControls.js';
import {GLTFLoader
} from '../jsm/loaders/GLTFLoader.js';
import {RoomEnvironment
} from '../jsm/environments/RoomEnvironment.js';
import {GUI
} from '../jsm/libs/lil-gui.module.min.js';
// TODO: 找对应的位置
// var result = "";
var requestId
Page({/*** 页面的初始数据*/data: {},// Three.jsonUnload() {cancelAnimationFrame(requestId, this.canvas)this.worker && this.worker.terminate()setTimeout(() => {if (this.renderer instanceof THREE.WebGLRenderer) {this.renderer.dispose()this.renderer.forceContextLoss()this.renderer.context = nullthis.renderer.domElement = nullthis.renderer = null}}, 0)},webgl_touch(e) {const web_e = Event.fix(e)//window.dispatchEvent(web_e)//document.dispatchEvent(web_e)this.canvas.dispatchEvent(web_e)},async onLoad() {const canvas3d = this.canvas = await document.createElementAsync("canvas", "webgl")var that = thislet camera, scene, renderer, controls;init();animate();function init() {const container = document.createElement('div');document.body.appendChild(container);camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 20);camera.position.set(1, 0.4, 0);scene = new THREE.Scene();// 添加坐标轴const axesHelper = new THREE.AxesHelper(5);scene.add(axesHelper);// modelnew GLTFLoader().load('https://obs.51jianmo.com/jmyd/user/20230421/1b70dea5-52ec-42f0-bb9d-276cdb609227.glb', function (gltf) {gltf.scene.scale.set(0.5, 1, 0.5);gltf.scene.position.set(0, 0, 0);scene.add(gltf.scene);const object = gltf.scene.getObjectByName('SheenChair_fabric');// Convert to NodeMaterialconst material = NodeMaterial.fromMaterial(object.material);const checkerNode = checker(mul(uv(), 5));material.sheenNode = mix(color(0x00ffff), color(0xffff00), checkerNode);material.sheenRoughnessNode = checkerNode;object.material = material;});renderer = that.renderer = new THREE.WebGLRenderer({canvas: canvas3d,antialias: true});renderer.setPixelRatio(window.devicePixelRatio);renderer.setSize(window.innerWidth, window.innerHeight);renderer.toneMapping = THREE.ACESFilmicToneMapping;renderer.toneMappingExposure = 1;renderer.outputEncoding = THREE.sRGBEncoding;container.appendChild(renderer.domElement);const environment = new RoomEnvironment();const pmremGenerator = new THREE.PMREMGenerator(renderer);scene.background = new THREE.Color("#a9988c");scene.environment = pmremGenerator.fromScene(environment).texture;controls = new OrbitControls(camera, renderer.domElement);controls.enableDamping = true;controls.minDistance = 1;controls.maxDistance = 10;controls.target.set(0, 0.35, 0);controls.update();window.addEventListener('resize', onWindowResize);}function onWindowResize() {camera.aspect = window.innerWidth / window.innerHeight;camera.updateProjectionMatrix();renderer.setSize(window.innerWidth, window.innerHeight);}//function animate() {requestId = requestAnimationFrame(animate);nodeFrame.update();controls.update(); // required if damping enabledrender();}function render() {renderer.render(scene, camera);}}
})

演示效果:

微信小程序 加载3D模型相关推荐

  1. php点击查看更多,微信小程序加载更多和点击查看更多功能介绍

    这篇文章主要为大家详细介绍了微信小程序加载更多,点击查看更多功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了微信小程序加载更多功能实现的具体代码,供大家参考,具体内容如下 ...

  2. HTML 点击查看更多,微信小程序加载更多和点击查看更多的实现方法

    微信小程序加载更多和点击查看更多的实现方法 发布时间:2020-12-31 11:01:19 来源:亿速云 阅读:126 作者:小新 这篇文章给大家分享的是有关微信小程序加载更多和点击查看更多的实现方 ...

  3. 微信小程序加载 FengMap地图

    实现微信小程序加载FengMap地图,主要通过小程序<web-view>组件的src属性的外链方式加载,如<web-view src="https://fengmap.co ...

  4. 【Threejs 微信小程序】小程序加载外部模型后对模型进行平移旋转操作

    一.效果展示 需要实现的功能,对已经加载进小程序里的模型进行沿着xyz轴方向去旋转和平移. 如下图的效果: 点击底部的按钮,对模型进行平移和旋转操作. 二.方法描述 关于平移和旋转的方法 比如沿着 Y ...

  5. 微信小程序加载并且编译显示富文本编辑器内容

    微信小程序如何加载并且显示百度编辑器中的内容 一. 下载wxParse文件夹放在根目录下(可以随意更改位置,只要后续能引入成功即可) 二. 在js文件中引入wxParse.js var WxParse ...

  6. 微信小程序加载百度地图

    1:申请百度地图服务的ak,(个人感觉浏览器和小程序类型没区别,甚至浏览器比小程序更好) 2:配置地图服务,微信小程序开发平台,设置开发设置 3:小程序里添加地图服务的js文件bmap-wx.min. ...

  7. 有效解决微信小程序加载视频[渲染层网络层错误] Failed to load media

    问题1,小程序的视频一般都是放在网络上的,没谁能把视频放本地把,所以在小程序视频插件在加载视频的时候,就会出现如下错误:[渲染层网络层错误] Failed to load media wxml加载视频 ...

  8. 微信小程序 加载中 动画效果

    微信小程序开发交流qq群   173683895    承接微信小程序开发.扫码加微信. 效果图: 代码: <view class="line"><image s ...

  9. 微信小程序 加载 HTML 标签

    肯定有小伙伴遇到过这个问题:加载的数据是一堆HTML 标签这就尴尬了,因为小程序没有提供 webview 来加载这些 HTML.但是不用慌,小程序不提供我们可以自己造个新轮子,自己造不出新轮子咱们找到 ...

最新文章

  1. C#读写文本文件小结
  2. cookie放在请求头_Web安全:你必须知道的“Cookie安全”
  3. Prefix HDU - 5790 字典树 + 主席树
  4. Cmd Markdown 编辑阅读器
  5. Stream学习过程中遇到的一个问题记录
  6. TFLite基础知识
  7. 拳王寻你项目公社:普通人怎么创业,普通人的创业法宝,容易上手的兼职副业项目
  8. idea package自动生成_IDEA自动生成pojo实体类模板
  9. ghost还原提示an internal
  10. JAVA 正则表达式(大全)
  11. 360浏览器极速模式pdf文件不能预览问题
  12. 前缀学习第二课(下)
  13. tplink怎么进去_用手机或电脑进入TP-Link路由器设置界面的方法 怎么进入TP-Link路由器设置界面?...
  14. UE4 让材质的UV动起来
  15. 基于flex/bison工具生成sysY2022文法的词法/语法分析器
  16. android ndk arm,Android NDK ARM构建设置可在大多数设备上运行?
  17. 木马情报报告:内部抓捕botnet-Dridex
  18. Gitbook离线电子书打包方案
  19. 修复:poi生成Excel后wps和office excel兼容性问题
  20. 森林中的兔子,有感而抒

热门文章

  1. 中国医科大学《卫生法(本科)》在线作业
  2. python图像特征提取与匹配_[OpenCV-Python] OpenCV 中图像特征提取与描述 部分 V (二)...
  3. 爬取三千条数据需要多久_只需几十行代码,Python就能轻松爬取 3000+ 上市公司的信息...
  4. python 16进制字符串转二进制字符串
  5. 基于动态路由的胶囊网络在文本分类上的探索
  6. jeesite,xxDate_lte和xxDate_gte的使用
  7. 基于物联网技术的能源管理系统设计
  8. 【SAP Hana】SAP S/4 HANA 数据库底表查询及运维管理
  9. n个小孩围成一圈,顺序报号,从第一个人开始报数(从1报到5),凡是报到5的人退出圈子,问最后留下的小孩原来是几号
  10. iOS原生二维码扫码实现(含蒙版和扫码动画)