Skip to content

Commit 49d32f4

Browse files
jtydhr88github-actions
andauthored
[3d] support mtl for obj file (#3933)
Co-authored-by: github-actions <[email protected]>
1 parent 07f0b88 commit 49d32f4

File tree

11 files changed

+552
-9
lines changed

11 files changed

+552
-9
lines changed

src/components/load3d/Load3DScene.vue

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ const eventConfig = {
7676
emit('recordingStatusChange', value)
7777
} as const
7878
79-
watchEffect(async () => {
79+
watchEffect(() => {
8080
if (load3d.value) {
8181
const rawLoad3d = toRaw(load3d.value) as Load3d
8282
@@ -86,10 +86,20 @@ watchEffect(async () => {
8686
rawLoad3d.setFOV(props.fov)
8787
rawLoad3d.toggleCamera(props.cameraType)
8888
rawLoad3d.togglePreview(props.showPreview)
89-
await rawLoad3d.setBackgroundImage(props.backgroundImage)
9089
}
9190
})
9291
92+
watch(
93+
() => props.backgroundImage,
94+
async (newValue) => {
95+
if (load3d.value) {
96+
const rawLoad3d = toRaw(load3d.value) as Load3d
97+
98+
await rawLoad3d.setBackgroundImage(newValue)
99+
}
100+
}
101+
)
102+
93103
watch(
94104
() => props.upDirection,
95105
(newValue) => {

src/extensions/core/load3d/Load3d.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,11 @@ class Load3d {
118118
options
119119
)
120120

121-
this.loaderManager = new LoaderManager(this.modelManager, this.eventManager)
121+
this.loaderManager = new LoaderManager(
122+
this.modelManager,
123+
this.eventManager,
124+
options
125+
)
122126

123127
this.recordingManager = new RecordingManager(
124128
this.sceneManager.scene,

src/extensions/core/load3d/LoaderManager.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,24 @@
11
import * as THREE from 'three'
22
import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader'
33
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'
4-
import { MTLLoader } from 'three/examples/jsm/loaders/MTLLoader'
54
import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader'
65
import { STLLoader } from 'three/examples/jsm/loaders/STLLoader'
76

7+
import { OverrideMTLLoader } from '@/extensions/core/load3d/threejsOverride/OverrideMTLLoader'
88
import { t } from '@/i18n'
99
import { useToastStore } from '@/stores/toastStore'
1010

1111
import {
1212
EventManagerInterface,
13+
Load3DOptions,
1314
LoaderManagerInterface,
1415
ModelManagerInterface
1516
} from './interfaces'
1617

1718
export class LoaderManager implements LoaderManagerInterface {
1819
gltfLoader: GLTFLoader
1920
objLoader: OBJLoader
20-
mtlLoader: MTLLoader
21+
mtlLoader: OverrideMTLLoader
2122
fbxLoader: FBXLoader
2223
stlLoader: STLLoader
2324

@@ -26,14 +27,21 @@ export class LoaderManager implements LoaderManagerInterface {
2627

2728
constructor(
2829
modelManager: ModelManagerInterface,
29-
eventManager: EventManagerInterface
30+
eventManager: EventManagerInterface,
31+
options: Load3DOptions
3032
) {
33+
let loadRootFolder = 'input'
34+
35+
if (options && options.inputSpec?.isPreview) {
36+
loadRootFolder = 'output'
37+
}
38+
3139
this.modelManager = modelManager
3240
this.eventManager = eventManager
3341

3442
this.gltfLoader = new GLTFLoader()
3543
this.objLoader = new OBJLoader()
36-
this.mtlLoader = new MTLLoader()
44+
this.mtlLoader = new OverrideMTLLoader(loadRootFolder)
3745
this.fbxLoader = new FBXLoader()
3846
this.stlLoader = new STLLoader()
3947
}
@@ -122,7 +130,8 @@ export class LoaderManager implements LoaderManagerInterface {
122130

123131
case 'obj':
124132
if (this.modelManager.materialMode === 'original') {
125-
const mtlUrl = url.replace(/\.obj([^.]*$)/, '.mtl$1')
133+
const mtlUrl = url.replace(/(filename=.*?)\.obj/, '$1.mtl')
134+
126135
try {
127136
const materials = await this.mtlLoader.loadAsync(mtlUrl)
128137
materials.preload()

0 commit comments

Comments
 (0)