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

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

新規登録して質問してみよう
ただいま回答率
85.50%
A-Frame

A-Frameは、カスタムHTMLを用いてWebブラウザ上で動く3DとVRを作成できるオープンソースのフレームワーク。WebGLに関する知識がなくても簡単にVRのWebサイトを作成できます。

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

0回答

1524閲覧

A-Frameでクリックした位置にオブジェクトを配置したい

salmon_love

総合スコア4

A-Frame

A-Frameは、カスタムHTMLを用いてWebブラウザ上で動く3DとVRを作成できるオープンソースのフレームワーク。WebGLに関する知識がなくても簡単にVRのWebサイトを作成できます。

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/09/27 09:05

編集2022/01/12 10:55

前提・実現したいこと

A-Frameを使用して、VRゲームを作っています。

画面上で、PCならマウスクリック、タッチデバイスならタッチした時、
そのスクリーン座標と対応するAR空間内の座標にオブジェクトを配置する機能を実装したいのですが、
思うように動作しません。

3Dレンダリング等の知識に乏しく、
解決策が分かりません。
よろしくお願いいたします。

発生している問題

実際にクリックした位置とはズレた場所にオブジェクトが配置されてしまいます。

該当のソースコード

html

1<!DOCTYPE html> 2<html> 3 4<head> 5 <script src="https://aframe.io/releases/0.9.2/aframe.min.js"></script> 6</head> 7 8<body> 9 10 <script> 11 // {底辺の長さ(a)}=2×{二等辺三角形の高さ(h)}/tan{底辺の角度(α)} 12 // 2等辺三角形の高さ(z座標) 13 const z = 10; 14 // 底辺の角度 15 const t = (180 - 80) / 2 * Math.PI / 180; 16 // カメラに写る範囲の横幅 17 const a = 2 * z / Math.tan(t); 18 19 /* オブジェクトを移動する */ 20 AFRAME.registerComponent('move-object', { 21 init: function () { 22 document.addEventListener('click', (e) => { 23 let rect = document.querySelector('body').getBoundingClientRect(); 24 25 // カメラに写る幅とスクリーン幅の比 26 const d = a / rect.width; 27 const x = (e.clientX - rect.width / 2) * d; 28 const y = -(e.clientY - rect.height / 2) * d; 29 30 // オブジェクトを配置 31 const obj = document.querySelector("a-sphere"); 32 obj.object3D.position.set(x, y, -z); 33 }) 34 } 35 }); 36 </script> 37 38 <a-scene vr-mode-ui="enabled: false;" move-object> 39 <a-sphere radius="0.5" id="obj" color="red" position="0 0 -10"></a-sphere> 40 <a-camera position="0 0 0"></a-camera> 41 </a-scene> 42</body> 43 44</html> 45

試したこと

上記コードのスクリプトの内容です。
A-Frameのカメラコンポートは、画角がデフォルトで80度なので、
カメラとz=-10の位置でのスクリーン面を横から見て二等辺三角形として、
スクリーンの幅を求めて、実際のスクリーン幅との比を求めています。
この比をクリックされた座標に適用してオブジェクトの移動先を求めようとしたのですが、
クリック位置とオブジェクトの位置に差があります。

補足情報(FW/ツールのバージョンなど)

A-Frame ver.0.9.2
最新版です。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問