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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

310閲覧

AABBを使った当たり判定を実装したい

falcon_function

総合スコア10

Three.js

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2024/09/16 14:05

実現したいこと

  • リストCANNON JSのBox3オブジェクトから、AABBを動的に判定したい。

発生している問題・分からないこと

一応やり方自体は知ってはいるのですが、なぜかcomputeAABBが関数ではないというエラーが出てきてしまい実装ができないでいます。
それさえ使えれば、動的に取得ができるのですが、それ以外の方法が思いつきません。

該当のソースコード

Javascript

1const playshape = new CANNON.Box(new CANNON.Vec3(8,21,3.5)); 2let min,max; 3class ModelLoad{ 4 constructor(scene,helper,scale,position){ 5 this.scene = scene; 6 this.helper = helper; 7 this.scale = scale; 8 this.position = position; 9 } 10 11 loadmodel(path){ 12 const Loader=new MMDLoader(); 13 const box = new THREE.Box3(); 14 Loader.load(path,(object)=>{ 15 mmdmesh = object; 16 mmdmesh.scale.set(this.scale,this.scale,this.scale); 17 mmdmesh.position.set(this.position.x,this.position.y,this.position.z); 18 mmdmesh.traverse((child) =>{ 19 if(child.isMesh && child.geometry){ 20 if(!child.name.includes("剛体")){ 21 child.geometry.computeBoundingBox(); 22 const childbox = child.geometry.boundingBox.clone(); 23 childbox.applyMatrix4(child.matrixWorld); 24 box.union(childbox) 25 } 26 } 27 }); 28 this.scene.add(mmdmesh); 29 playbody = new CANNON.Body({ 30 mass:1, 31 position:new CANNON.Vec3(0,0,0), 32 shape:playshape 33 }); 34 world.addBody(playbody); 35 }); 36 37 38 } 39 updatePositionAndRotation(camera, camdirect, camposition, distance=-1.3,bodys) { 40 if (!mmdmesh){ 41 return; 42 } else { 43 min = playbody.aabb.lowerBound; 44 max = playbody.aabb.upperBound;//これは取得できるが、値が変化しない。プレイヤー側は常に動いているのでこれでは困る。 45 console.log(min,max) 46 } 47} 48 49window.addEventListener("DOMContentLoaded",(e)=>{ 50Mmdload.loadmodel(`../fpsもどき/(準標準ボーン)水内式由乃Ver1.00.pmx`); 51 52function animate(){ 53requestanimationFrame(animate); 54Mmdload.updatePositionAndRotation(camera,camdirect,camposition,1.3,wallGeometry); //wallGeometryは当たり判定対象の壁オブジェクト 55} 56animate(); 57 58});

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果
  • console.dirでCANNONとplaybodyのプロパティや関数を検索して、computeAABBがあるかどうか調べた。
  • こちらのサイトを見てどういう仕組みなのかを学んだ。

https://developer.mozilla.org/ja/docs/Games/Techniques/3D_collision_detection

  • CHATGPTでAABBをどう実装すればよいかを聞いた

補足

cannon-esは0.2.0を利用しています。
https://cdn.jsdelivr.net/npm/cannon-es@0.20.0/+esm

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

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

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

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

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

guest

回答1

0

自己解決

すみません、これまた自己解決できました。なぜcomputeAABB()が関数じゃないというエラーが出ていたのかは全く不明でしたが、一応直ったということで締めさせていただきます。

投稿2024/09/22 06:22

falcon_function

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問