I am creating my r3f editor.
To show Assets, I made the ContentsBrowser.
But, a part of gltf model is not working with my GLTFLoader.
this code functions getting imagedata in canvas after gltf loaded.
ErrorMessage: “ReferenceError: _i13 is not defined”
Problem 3DModel: man.glb - Google Drive
However, The 3DModel is good working on gltfViewer: https://gltf-viewer.donmccurdy.com/
versions
- “three”: “^0.149.0”
- “three-stdlib”: “^2.21.8”,
- “meshoptimizer”: “^0.18.1”
I put code in under.
import { DirectionalLight, LoadingManager, PerspectiveCamera, Scene, SpotLight, WebGLRenderer } from "three";
import { DRACOLoader, GLTFLoader, KTX2Loader } from "three-stdlib";
import Swal from "sweetalert2";
import { MeshoptDecoder } from "meshoptimizer";
const CreateGLTFImage = (gltfUrl): Promise<string> => {
const canvas = document.createElement("canvas");
canvas.width = 100;
canvas.height = 100;
// Making Scene
const scene = new Scene();
// Making Camera
const camera = new PerspectiveCamera(
45,
1,
0.1,
1000
);
camera.position.set(0, 0, 2);
// Making Renderer
const cleanup = () => {
if (renderer) {
renderer.dispose();
}
if (scene) {
scene.clear();
}
if (camera) {
camera.clear();
}
};
const renderer = new WebGLRenderer({
canvas: canvas,
alpha: true,
});
renderer.setClearColor(0x888888, 1);
renderer.setSize(35, 35);
// Making Light
const directionalLight = new DirectionalLight(0xffffff, 0.5);
directionalLight.position.set(10, 10, 10);
const spotLight = new SpotLight(0xffffff);
spotLight.position.set(-3, 3, -3);
scene.add(spotLight);
scene.add(directionalLight);
// Create GLTF Loader
const MANAGER = new LoadingManager();
const THREE_PATH = `https://unpkg.com/three@0.150.x`;
const DRACO_LOADER = new DRACOLoader(MANAGER).setDecoderPath( `${THREE_PATH}/examples/jsm/libs/draco/gltf/` );
const KTX2_LOADER = new KTX2Loader(MANAGER).setTranscoderPath( `${THREE_PATH}/examples/jsm/libs/basis/`);
const gltfLoader = new GLTFLoader( MANAGER )
.setCrossOrigin('anonymous')
.setDRACOLoader( DRACO_LOADER )
.setKTX2Loader( KTX2_LOADER.detectSupport( renderer ) )
.setMeshoptDecoder( MeshoptDecoder );
// Load GLTF and Making Image
return new Promise((resolve) => {
gltfLoader.load(
gltfUrl,
(gltf) => {
const model = gltf.scene || gltf.scenes[0];
scene.add(model);
renderer.render(scene, camera);
const dataUrl = canvas.toDataURL();
cleanup();
return resolve(dataUrl);
},
(progress) => {},
(error) => {
console.error(error);
cleanup();
Swal.fire({
title: "Error",
text: `Loading GLTF Error。\nFileName: ${gltfUrl}\n\n${error}`,
icon: "error"
});
resolve(null);
}
);
});
};
What is wrong?
PS: I trying const "THREE_PATH = https://unpkg.com/three@0.149.0
; ", but not working…