blenderで観覧車の乗り物一つずつを作り、glbファイルにして読み込み、乗り物が逆さまにならないように位置のみ回転させたいと思っています。
しかし、回転はするのですが、位置だけでなく乗り物自体も回転し、これでは中に乗っている人が頭を打ってしまいます。
どうすれば位置のみ回転させることができるでしょうか。
公転のクオータニオンも使ってみましたが、乗り物自体も回転してしまいました。
const loader = new GLTFLoader(); //blenderで作ったglbファイルを配列に const urls = [ 'blender/foundation.glb', 'blender/skelton.glb', 'blender/wagon_1.glb', 'blender/wagon_2.glb', 'blender/wagon_3.glb', 'blender/wagon_4.glb', 'blender/wagon_5.glb', 'blender/wagon_6.glb', 'blender/wagon_7.glb', 'blender/wagon_8.glb' ]; 、、、、、 let obj = null; for(let i = 0; i < urls.length; i++){//blenderで作ったglbファイルを順番に読み込む loader.load( urls[i], function (gltf) { const obj = gltf.scene; const animations = gltf.animations; else if(i > 1 ){ //obj.rotation.z = Math.PI / 2;//軸と乗り物を回転(90度回転する) //ポイント光源を球の周りを周りを巡回させる//座標を変数にして動的に変える //リロードしないと場所が変わらないので、常にぐるぐる回らせるために、アニメート関数に入れて、アニメート関数をフレーム単位で変えていく let rot = 0;//カメラを回転させるときにフレームごとに角度をプラスしていくので、プラスするための変数を用意※animate関数の中で宣言すると効かないので外に書く console.log(rot); const rotationStart = document.getElementById("rotationStart"); const rotationStop = document.getElementById("rotationStop"); function animate() { rot += 1;//1度ずつ足す let radian = rot * (Math.PI / 180);//度数をラジアンに変換する obj.rotation.z = radian; /*200 * Math.cos(Date.now() / 500),*///カメラを回すときに使ったz軸のローテーション //レンダリング renderer.render(scene, camera);//これもフレームタイムでレンダリングしないと、画面がフレーム単位でレンダリングされないので、アニメート関数に組み込む //アニメーション関数をフレーム単位で更新するためには、requestAnimationFrameという関数を使う requestAnimationFrame(animate);//これだけではアニメート関数を呼んでいない scene.add(obj); }; }; }
読み込んだファイルの2つ目以降を位置のみ回転させたいので、i > 1 として、その部分のみコードを載せさせていただきます。
お手数をおかけしますが、よろしくお願いします!

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/08/28 12:24
2022/08/28 12:33