You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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为例)

  1. 加载模型:
// 初始化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) }
  1. 实现触摸旋转:
    监听触摸事件,把滑动转换成模型旋转角度:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 09:26:02