uniapp中使用threejs加载几何体

我的建议是使用这个库

https://github.com/deepkolos/three-platformize

为什么?我试了uniapp推荐的和threejs-miniprogram这个小程序官方库,都加载不出来我的obj模型。所有我推荐不要用obj模型最好,挺多都支持GLTF模型的,但是我不能改。

安装,使用pnpm比较快

复制代码
pnpm install three-platformize

以下是完整代码

复制代码
<template>
	<view class="content">
		<canvas type="webgl" id="webgl" style="width: 100vw; height: 100vh;" @touchstart="touchStart"
			@touchmove="touchMove" @touchend="touchEnd" />
	</view>
</template>

<script>
	import {
		WechatPlatform
	} from 'three-platformize/src/WechatPlatform';
	import * as THREE from 'three-platformize';
	//轨道控制器
	import {
		OrbitControls
	} from 'three-platformize/examples/jsm/controls/OrbitControls'
	export default {
		data() {
			return {
				platform: ''
			};
		},
		mounted() {
			uni.createSelectorQuery()
				.in(this)
				.select('#webgl')
				.fields({
					node: true
				})
				.exec(res => {
					console.log('res', res[0].node);
					const canvas = res[0].node;
					console.log('canvas', canvas);
					const platform = new WechatPlatform(canvas); // webgl canvas
					console.log('1111', platform);
					platform.enableDeviceOrientation('game'); // 开启DeviceOrientation
					THREE.PLATFORM.set(platform);
					this.platform = platform;
					var scene = new THREE.Scene();
					var camera = new THREE.PerspectiveCamera(75, canvas.width / canvas.height, 0.1, 1000);
					camera.position.set(0, 0, 10);
					scene.add(camera);
					const geometry = new THREE.BoxGeometry(1, 1, 1);
					const materials = new THREE.MeshBasicMaterial();
					const cube = new THREE.Mesh(geometry, materials);
					scene.add(cube);
					const light = new THREE.AmbientLight(0xffffff);
					scene.add(light);
					//注意,这里必须要添加一个{ canvas: canvas },不然会报createElementNS错误
					const renderer = new THREE.WebGLRenderer({
						canvas: canvas
					});
					renderer.setSize(canvas.width, canvas.height);
					const controls = new OrbitControls(camera, renderer.domElement);

					function animate() {
						//这里不再是requestAnimationFrame而是canvas.requestAnimationFrame
						canvas.requestAnimationFrame(animate);
						renderer.render(scene, camera);
					}
					animate();
				});


		},
		methods: {
			touchStart(e) {
				this.platform.dispatchTouchEvent(e);
			},
			touchMove(e) {
				this.platform.dispatchTouchEvent(e);
			},
			touchEnd(e) {
				this.platform.dispatchTouchEvent(e);
			}
		}
	}
</script>


<style>

</style>
相关推荐
码间留白1 天前
六轮真机实验后,我把鸿蒙直播推流的 UI 全逼成了原生——uni-app 适配 HarmonyOS NEXT 完整复盘
uni-app·鸿蒙·harmonyos next·直播推流·arkts/arkui
wuxianda10302 天前
2026 苹果审核 4.3 (a) 被拒全解析|Guideline 4.3a spam 马甲包拒审原因 + 避坑方案
flutter·uni-app·苹果上架
头发还在的女程序员4 天前
基于 Spring Boot + Vue 3 + uni-app 的灵活用工系统:四端架构与业务流程设计
vue.js·spring boot·uni-app·灵活用工·灵工系统
Dumbness6 天前
订阅消息弹窗必须在用户点击里调:联调实验室里 timing 和 Mock 支付通知踩的坑
javascript·uni-app
码间留白7 天前
uni-app 鸿蒙离线打包:一个改动从源码到真机要穿过几条链
uni-app·鸿蒙·deveco·离线打包·uts插件
多客:duokelijie8 天前
代练订单系统选型思路:跨品类游戏接入、订单分层管理、自动结算逻辑拆解!
数据库·mysql·微信小程序·前端框架·uni-app·php·持续部署
码间留白8 天前
鸿蒙端对接 BLE 血压计:从一次握手到读数入库(二)设备篇
物联网·uni-app·鸿蒙·蓝牙ble·血压计
华玥作者9 天前
Vue 3 + TypeScript + uni-app 组件库推荐:hy-app(华玥组件库)
vue.js·typescript·uni-app
FinelyYang9 天前
uniapp使用kkfileview在线预览ppt,excel,word,pdf类型文件
pdf·uni-app·powerpoint
2501_916008899 天前
iPhone 设备信息查看,用 KeyMob 看型号、序列号、电池健康和 UDID
android·ios·小程序·https·uni-app·iphone·webview