Skip to content

Commit 0e02e36

Browse files
author
Avaer Kazmer
committed
Add model drop support to vrarmik.html
1 parent d9a7688 commit 0e02e36

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

vrarmik.html

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,80 @@
123123
console.warn(err);
124124
});
125125

126+
window.document.addEventListener('dragover', e => {
127+
e.preventDefault();
128+
});
129+
window.document.addEventListener('drop', async e => {
130+
e.preventDefault();
131+
132+
if (e.dataTransfer.items.length !== 1) {
133+
return;
134+
}
135+
136+
for (var i = 0; i < e.dataTransfer.items.length; i++) {
137+
if (e.dataTransfer.items[i].kind === 'file') {
138+
const file = e.dataTransfer.items[i].getAsFile();
139+
const arraybuffer = await file.arrayBuffer();
140+
const inflatedArrayBuffer = new Zlib.Gunzip(new Uint8Array(arraybuffer)).decompress().buffer;
141+
const files = await untar(inflatedArrayBuffer);
142+
// console.log('got files', files);
143+
// window.files = files;
144+
145+
const filesystem = [];
146+
for (let j = 0; j < files.length; j++) {
147+
const file = files[j];
148+
const {name} = file;
149+
const match = name.match(/^([a-zA-Z0-9]+)\/pathname$/);
150+
if (match) {
151+
const pathname = new TextDecoder().decode(await file.blob.arrayBuffer());
152+
const id = match[1];
153+
const assetFileName = `${id}/asset`;
154+
const assetFile = files.find(file => file.name === assetFileName);
155+
if (assetFile) {
156+
const match = pathname.match(/([^\/]+)$/);
157+
const filename = match[1];
158+
const url = assetFile.getBlobUrl();
159+
filesystem.push({
160+
id,
161+
pathname,
162+
filename,
163+
url,
164+
});
165+
}
166+
}
167+
}
168+
// window.filesystem = filesystem;
169+
170+
const manager = new THREE.LoadingManager();
171+
manager.setURLModifier(url => {
172+
// console.log('load url', url);
173+
const match = url.match(/([^\/]+)$/);
174+
if (match) {
175+
const filename = match[1];
176+
const file = filesystem.find(file => file.filename === filename);
177+
if (file) {
178+
// console.log('replace url', url, file.url);
179+
url = file.url;
180+
}
181+
}
182+
return url;
183+
});
184+
185+
const modelFileUrl = filesystem.find(file => file.pathname === 'Assets/1Avatars/rachel gardner 1/rachel gardner NEW.fbx').url;
186+
const loader = new THREE.FBXLoader(manager);
187+
loader.load(modelFileUrl, object => {
188+
_rigModel(object);
189+
}, function onprogress() {
190+
191+
}, function onerror(err) {
192+
console.warn(err);
193+
});
194+
window.loader = loader;
195+
console.log('got filesystem', modelFileUrl, loader);
196+
}
197+
}
198+
});
199+
126200
const renderer = new THREE.WebGLRenderer({
127201
// canvas: document.getElementById('canvas'),
128202
// alpha: true,

0 commit comments

Comments
 (0)