前提
React上でblenderのファイル(.glb)をローディングできているのですがブラウザ上で表示されません。
実現したいこと
・ブラウザにblenderのファイル(.glb)を表示させたい。
該当のソースコード
以下のコードをそのまま読み込んでいます。
Three.js
1import { useEffect } from 'react'; 2import { 3 WebGLRenderer, 4 Scene, 5 PerspectiveCamera, 6} from 'three'; 7import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'; 8 9const Three: React.FC = () => { 10 const onCanvasLoaded = (canvas: HTMLCanvasElement) => { 11 if (!canvas) { 12 return; 13 } 14 15 const width = window.innerWidth; 16 const height = window.innerHeight; 17 18 // init scene 19 const scene = new Scene(); 20 const camera = new PerspectiveCamera( 21 75, 22 canvas.clientWidth / canvas.clientHeight, 23 0.1, 24 1000 25 ); 26 27 const renderer = new WebGLRenderer({ canvas: canvas, antialias: true }); 28 renderer.setClearColor('#d2d0d0'); 29 renderer.setSize(width, height); 30 31 // ここでglbファイルを読み込んで設定します。 32 let model = null; 33 loader.load( 34 url, 35 function (gltf) { 36 model = gltf.scene; 37 model.name = 'model_with_cloth'; 38 model.scale.set(400.0, 400.0, 400.0); 39 model.position.set(0, -400, 0); 40 scene.add(model); 41 console.log(model); // ここでmodelのオブジェクトデータの中身があることを確認できました。 42 }, 43 function (error) { 44 console.log('An error happened'); // glbがローディング完了するまではエラーになる 45 console.log(error); 46 } 47 ); 48 49 window.addEventListener('resize', () => handleResize({ camera, renderer })); 50 51 renderer.render(scene, camera); 52 }; 53 54 // handle resize 55 const handleResize = ({ camera, renderer }: any) => { 56 const width = window.innerWidth; 57 const height = window.innerHeight; 58 camera.aspect = width / width; 59 camera.updateProjectionMatrix(); 60 renderer.setSize(width, width); 61 }; 62 useEffect(() => { 63 return () => window.removeEventListener('resize', () => handleResize); 64 }); 65 66 return <canvas ref={onCanvasLoaded} />; 67}; 68 69export default Three; 70
App.tsx
1略 2const App = () => { 3 return ( 4 <Suspense fallback={null}> 5 <Three /> 6 </Suspense> 7 ); 8};
結果としては、canvas(グレーの色にしている)のみが表示されてblenderの画像は表示されません。
試したこと
let model = null; loader.load( url, function (gltf) { model = gltf.scene; model.name = 'model_with_cloth'; model.scale.set(400.0, 400.0, 400.0); model.position.set(0, -400, 0); scene.add(gltf.scene); console.log(model); }, function (error) { console.log('An error happened'); // glbがローディング完了するまではエラーになる console.log(error); } );
ここの中身は色々と変えたりいじってみたのですが変わりませんでした。また3種類ほどのblenderファイルを入れ替えてみたのですが変わらずでした。
補足情報(FW/ツールのバージョンなど)
"three": "^0.139.2" を使用

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/04/14 02:16
2022/04/14 14:03