Kaynağa Gözat

Use ThreeSerialization for serializing/deserializing userData in GLTFLoader2, GLTFWriter2

master
Palash Bansal 2 yıl önce
ebeveyn
işleme
4b264c8fcd
No account linked to committer's email address

+ 8
- 2
src/assetmanager/export/GLTFWriter2.ts Dosyayı Görüntüle

import {BufferGeometry, Material, MeshStandardMaterial, Object3D, PixelFormat, Texture} from 'three' import {BufferGeometry, Material, MeshStandardMaterial, Object3D, PixelFormat, Texture} from 'three'
import {blobToDataURL} from 'ts-browser-helpers' import {blobToDataURL} from 'ts-browser-helpers'
import type {GLTFExporter2Options} from './GLTFExporter2' import type {GLTFExporter2Options} from './GLTFExporter2'
import {ThreeSerialization} from '../../utils'


export class GLTFWriter2 extends GLTFExporter.Utils.GLTFWriter { export class GLTFWriter2 extends GLTFExporter.Utils.GLTFWriter {


} }
}) })


super.serializeUserData(object, objectDef)

const ud2 = ThreeSerialization.Serialize(userData)
Object.entries(temp).forEach(([key, value]) => { Object.entries(temp).forEach(([key, value]) => {
userData[key] = value userData[key] = value
delete temp[key] delete temp[key]
}) })
object.userData = ud2
super.serializeUserData(object, objectDef)
object.userData = userData

super.serializeUserData(object, objectDef)

} }


processObjects(objects: Object3D[]) { processObjects(objects: Object3D[]) {

+ 12
- 0
src/assetmanager/import/GLTFLoader2.ts Dosyayı Görüntüle

} from '../gltf' } from '../gltf'
import {RootSceneImportResult} from '../IAssetImporter' import {RootSceneImportResult} from '../IAssetImporter'
import {ILoader} from '../IImporter' import {ILoader} from '../IImporter'
import {ThreeSerialization} from '../../utils'


export class GLTFLoader2 extends GLTFLoader implements ILoader<GLTF, Object3D|undefined> { export class GLTFLoader2 extends GLTFLoader implements ILoader<GLTF, Object3D|undefined> {
isGLTFLoader2 = true isGLTFLoader2 = true
// loads the viewer config and handles loading the draco loader for extension // loads the viewer config and handles loading the draco loader for extension
gltfViewerParser = (viewer: ThreeViewer): (p: GLTFParser)=>GLTFLoaderPlugin => { gltfViewerParser = (viewer: ThreeViewer): (p: GLTFParser)=>GLTFLoaderPlugin => {
return (parser: GLTFParser) => { return (parser: GLTFParser) => {
const getDependency = parser.getDependency
parser.getDependency = async(type: string, index: number) => {
const res = await getDependency.call(parser, type, index)
if (res.userData) {
const gltfExtensions = res.userData.gltfExtensions
delete res.userData.gltfExtensions
res.userData = ThreeSerialization.Deserialize(res.userData, {})
res.userData.gltfExtensions = gltfExtensions
}
return res
}
const tempPathDrc = generateUUID() + '.drc' const tempPathDrc = generateUUID() + '.drc'
const tempPathKtx2 = generateUUID() + '.ktx2' const tempPathKtx2 = generateUUID() + '.ktx2'
const needsDrc = parser.json?.extensionsRequired?.includes?.('KHR_draco_mesh_compression') const needsDrc = parser.json?.extensionsRequired?.includes?.('KHR_draco_mesh_compression')

Loading…
İptal
Kaydet