質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Three.js

Three.jsはWebGLをサポートしているJavaScriptの3D描画用ライブラリです。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

1回答

1539閲覧

ThreeJSでblenderのファイル(.glb)をReact上で読み込めない

moimoi_sushi

総合スコア26

Three.js

Three.jsはWebGLをサポートしているJavaScriptの3D描画用ライブラリです。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2022/04/13 06:04

編集2022/04/13 06:10

前提

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

12const 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" を使用

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

念のため、モデルにエラーが無いかご確認下さい。
下記サイトに glTF ファイルをドラッグ&ドロップすると表示確認が行えます。エラーがある場合、左下にエラーがある旨のメッセージが表示されます。
■ glTF Viewer
https://gltf-viewer.donmccurdy.com/

Three.js での glTF ファイルの表示については、ライトの設定が無い場合は、ライトを設定してみて下さい。

投稿2022/04/13 10:58

cx20

総合スコア4633

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moimoi_sushi

2022/04/14 02:16

このサイトとても良いですね!ちゃんと表示できるか不安だったので今度から活用します ちなみに元のデータは表示できました...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問