如何在Android应用中展示可交互3D模型(.psd/.obj格式)
Android 3D模型展示+旋转交互实现方案
一、先搞定模型格式
- PSD是纯2D图层文件,没法直接当3D模型用,得先转格式:用Blender、Photoshop这类工具,把PSD里的元素做成简单3D模型,再导出成OBJ、GLB/GLTF格式;或者直接把PSD元素导出为纹理,贴到简单3D模型上再导出。
- OBJ格式虽然能被多数库支持,但更推荐转成GLB/GLTF——体积小、加载快,用Blender就能一键转换。
二、靠谱的Android开发库推荐
1. Google Filament
- 轻量高性能的实时渲染引擎,支持OBJ、GLB/GLTF,原生就能搞定触摸旋转这类交互,文档也全。
- 依赖引入(
build.gradle):
implementation 'com.google.android.filament:filament-android:1.32.0' implementation 'com.google.android.filament:filament-utils-android:1.32.0' implementation 'com.google.android.filament:gltfio-android:1.32.0'
2. Sceneform(虽归档但仍好用)
- 基于ARCore的简化3D框架,对Android开发者友好,自带触摸旋转、缩放等基础交互,导入OBJ、GLTF都没问题。
- 依赖引入(适配AndroidX):
implementation 'com.google.ar.sceneform.ux:sceneform-ux:1.17.1' implementation 'com.google.ar.sceneform:core:1.17.1'
3. libGDX
- 跨平台游戏框架,自带3D渲染模块,支持OBJ加载,能自己监听触摸事件写旋转逻辑,灵活性高。
- 依赖引入:
implementation 'com.badlogicgames.gdx:gdx:1.12.1' implementation 'com.badlogicgames.gdx:gdx-backend-android:1.12.1' implementation 'com.badlogicgames.gdx:gdx-freetype:1.12.1'
三、核心交互实现(以Filament为例)
- 加载模型:
// 初始化Filament引擎 val engine = Engine.create() val scene = engine.createScene() // 加载GLB模型(OBJ加载逻辑类似,用对应的加载器即可) val assetLoader = Gltfio.createAssetLoader(engine, FileResourceLoader(context.filesDir)) val asset = assetLoader.loadAsset("model.glb") asset.root?.let { scene.addEntity(it) }
- 实现触摸旋转:
监听触摸事件,把滑动转换成模型旋转角度:
var lastTouchX = 0f var lastTouchY = 0f surfaceView.setOnTouchListener { _, event -> when (event.action) { MotionEvent.ACTION_DOWN -> { lastTouchX = event.x lastTouchY = event.y true } MotionEvent.ACTION_MOVE -> { val deltaX = event.x - lastTouchX val deltaY = event.y - lastTouchY // 获取模型实体的变换组件 val transformManager = engine.getTransformManager() val modelTransform = transformManager.getInstance(asset.root!!) // 绕Y轴左右转,绕X轴上下转,0.1f是旋转灵敏度,可按需调整 val newRotation = Quaternion.fromEulerAngles(deltaY * 0.1f, deltaX * 0.1f, 0f) * modelTransform.rotation modelTransform.setRotation(newRotation) lastTouchX = event.x lastTouchY = event.y surfaceView.invalidate() true } else -> false } }
四、踩坑提醒
- 模型文件要放在
assets目录或者APP内部存储,加载时路径别写错。 - 为了避免卡顿,根据设备性能调整模型的面数、纹理分辨率,别搞太复杂的模型。
- Sceneform最低支持Android 7.0,要是兼容低版本,优先选Filament或者libGDX。
内容的提问来源于stack exchange,提问作者Yash
相关产品推荐
相关产品推荐

