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

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

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

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

Q&A

解決済

1回答

608閲覧

Three.jsのテクスチャ読み込み

MrDAUSX

総合スコア13

Three.js

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

0グッド

0クリップ

投稿2020/10/27 09:02

編集2020/10/27 09:27

Three.jsでテクスチャを貼りつけた物体を表示させようと思っています。
多数のテクスチャを読み込みたいので「loadqueue」を用いて一気に読み込んでから表示させようと思ったのですが、実際に実行したところ
texleft_center is not defined
というエラーが出て画面が黒いままになってしまいました。
変数が定義されていないため発生しているらしいのですが、最初のloadQueue.on内の変数を使っているはずという認識で、どのように直せばいいのか見当がついていない状態です。

javascript

1let loadQueue = new createjs.LoadQueue(); 2 3function init() { 4 let manifest = [ 5 {id: 'left_center', src: './texture_petro/center_left.jpg'}, 6 //{id: 'left_center', src: 'http://localhost/center_left.jpg'}, 7 {id: 'center_center', src: './texture_petro/center_center.jpg'}, 8 {id: 'right_center', src: './texture_petro/center_right.jpg'}, 9 ]; 10 11 function getTexture(name) { 12 let image = loadQueue.getResult(name); 13 let texture = new THREE.Texture(image); 14 texture.needsUpdate = true; 15 return texture; 16 } 17 18 loadQueue.on('complete', function(){ 19 var image = loadQueue.getResult('left_center'); 20 var texleft_center = new THREE.Texture(image); 21 texleft_center.needsUpdate = true; 22 }); 23 24 25 loadQueue.loadManifest(manifest); 26 27 //(略) 28 //オブジェクト群 29 var obj = new THREE.Group(); 30 31 const GSquare = new THREE.BoxGeometry(1000,1000,1000); 32 33 const MSquare = new THREE.MeshPhongMaterial({ // 材質 34 map: texleft_center,//ここでエラーが発生 35 //map:getTexture('left_center'), 36 side: THREE.DoubleSide // 裏からも見えるようにする 37 }) 38 const Square = new THREE.Mesh(GSquare, MSquare); 39 40 obj.add(Square);

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

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

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

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

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

gentaro

2020/10/27 09:05

[緊急]とかつけると嫌がられるよ。急いでるならお金払って仕事としてやってくれる人を探したほうが良い。
MrDAUSX

2020/10/27 09:28

すみませんでした。卒論に関わることなので焦っていました。
guest

回答1

0

ベストアンサー

エラーの起こっているコードの時点で、loadQueueのcompleteイベントがまだ発火していないからだと考えられます。

javascript

1 var obj = new THREE.Group(); 2 3 const GSquare = new THREE.BoxGeometry(1000,1000,1000); 4 5 const MSquare = new THREE.MeshPhongMaterial({ // 材質 6 map: texleft_center,//ここでエラーが発生 7 //map:getTexture('left_center'), 8 side: THREE.DoubleSide // 裏からも見えるようにする 9 }) 10 const Square = new THREE.Mesh(GSquare, MSquare); 11 12 obj.add(Square);

loadQueue.on('complete', function(){ var image = loadQueue.getResult('left_center'); var texleft_center = new THREE.Texture(image); texleft_center.needsUpdate = true; });

の中に入れれば解決すると思います。

投稿2020/10/31 10:41

Itta

総合スコア105

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

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

MrDAUSX

2020/11/01 23:55

//オブジェクト群 の上にloadqueueの下りを記述したら成功しました! サイズの問題なのか立方体のうち3つの面が黒いままですが、おそらくサイズの問題かと思われます。 (BoxGeometry(1000,1000,1000)に182×557のテクスチャ) ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問