\n```\n\nmain.js\n```ここに言語を入力\nimport * as THREE from './build/three.module.js'; //全ての要素に対してインポートするので*\nimport {OrbitControls} from \"./jsm/controls/OrbitControls.js\";\n\n//webブラウザで表示するときには、シーン(scene),カメラ(camera),レンダラー(renderer)が必ず必要\n\nlet scene, camera, renderer, pointLight, controls;//ここで書くと、グローバル変数として宣言することになる\n//シーンを追加\nscene = new THREE.Scene();//Sceneの頭は大文字でかく\n\n//カメラを追加\ncamera = new THREE.PerspectiveCamera(//PerspectiveCamera(視野角(映す角度),アスペクト比(画面の横と縦の比率。表示する画面サイズを決定),開始距離,終了距離)\n 50,//視野角\n window.innerWidth / window.innerHeight,//アスペクト比\n 0.1,//開始距離\n 1000//終了距離\n);\ncamera.position.set(0, 0, +500);//cameraをz軸のプラスの方向に動かしていく(そうしないとcameraが物体より前に出て映らない)\n\n//レンダラー(カメラで写した要素を変換して、ブラウザに3dとして表示するもの)を追加\nrenderer = new THREE.WebGLRenderer({alpha: true});//alpha・・透明度を表す。デフォルトではfalse。trueにして透明度を上げると、背景画像が見える\nrenderer.setSize(window.innerWidth, window.innerHeight);\ndocument.body.appendChild(renderer.domElement);//レンダラーをhtmlのbodyタグに表示する\nrenderer.render(scene, camera);//画面にレンダラーが表示される\n\n\n//ジオメトリを作成\n//SphereGeometry・・・球体のジオメトリ\n//three.jsの公式サイトで、documentから検索すると、引数に何を書くか分かる\nlet ballGeometry = new THREE.SphereGeometry(100, 64, 32);//(radius(半径),widthSegment(ポリゴンの数を増やす。値を大きくすればするほど、より球体に近づく。),heightSegment(ポリゴンの分割数を上げる。より綺麗な球体に近づく。))\n//マテリアルを作成\nlet ballMaterial = new THREE.MeshPhysicalMaterial();//粗さ、金属性、反射率等を設定できる。引数には、{color: 色}や、{map: テクスチャ}など。テクスチャでは、地球の画像を持ってきて球体に貼り付けることができる。\n//ジオメトリ(骨格)とマテリアル(色)をここまでで作成しました。それをメッシュ化していきます\n//メッシュ化\nlet ballMesh = new THREE.Mesh(ballGeometry, ballMaterial);//引数としてジオメトリとマテリアルを宣言\nscene.add(ballMesh);//sceneにポリゴンを乗せて、cameraで撮影する準備ができる\n\n//平行光源を追加してみよう//上から光が降り注ぐ\nlet directionalLight = new THREE.DirectionalLight(0xffffff, 2)//引数は色(0xは、16進数を描きますという意味)と、強さをとる\ndirectionalLight.position.set(1, 1, 1);//(1,1,1)の位置から光が降り注ぐようになる\nscene.add(directionalLight);\n\n//ポイント光源を追加してみよう//地球の周りを動かすためにグローバルで宣言したいので、5行目のとこで宣言している(なんでここはグローバルじゃない?)\npointLight = new THREE.PointLight(0xffffff, 1);//平行光源と同じく、引数は色と強さ\n//今の状態だとポイント光源が地球の中に入ってしまっているので、位置を変える\npointLight.position.set(-200, -200, -200);\nscene.add(pointLight);//作ったものはsceneにaddする\n\n//ポイント光源がどこにあるのかを特定する//平行光源のヘルパーとかもあるらしい\nlet pointLightHelper = new THREE.PointLightHelper(pointLight, 30);//第二引数はヘルパー(菱形みたいなやつ)の大きさを表す\nscene.add(pointLightHelper);\n\n//マウス操作ができるようにしよう(グルーバル変数で変数を宣言する)\ncontrols = new OrbitControls(camera, renderer.domElement);\n\n//ポイント光源を球の周りを周りを巡回させる//座標を変数にして動的に変える\n//リロードしないと場所が変わらないので、常にぐるぐる回らせるために、アニメート関数に入れて、アニメート関数をフレーム単位で変えていく\nfunction animate(){\n pointLight.position.set(\n 200 * Math.sin(Date.now() / 500),\n 200 * Math.sin(Date.now() / 1000),\n 200 * Math.cos(Date.now() / 500),\n);\n//レンダリングしてみよう\nrenderer.render(scene, camera);//これもフレームタイムでレンダリングしないと、画面がフレーム単位でレンダリングされないので、アニメート関数に組み込む\n\n//アニメーション関数をフレーム単位で更新するためには、requestAnimationFrameという関数を使う\nrequestAnimationFrame(animate);//これだけではアニメート関数を呼んでいない\n}\n//アニメート関数を呼ぶ\n//レンダリングもフレーム単位で更新しないと、画面がレンダリングされないので、アニメート関数に組み込む\nanimate();\n\n\n\n```","answerCount":1,"upvoteCount":0,"datePublished":"2022-08-04T23:07:54.636Z","dateModified":"2022-08-28T21:16:45.000Z","acceptedAnswer":{"@type":"Answer","text":"`index.html` 側に下記を追加してみてください。\n\n```html\n\n```\n\n<参考>\n■ 公式サンプル\nhttps://github.com/mrdoob/three.js/blob/master/examples/webgl_animation_keyframes.html\n\n■ three.jsのGLTFLoader.jsのimportに失敗したときの解決備忘録\nhttps://qiita.com/iwaken71/items/c3c8656d78c33ad92c39\n","dateModified":"2022-08-28T21:15:34.000Z","datePublished":"2022-08-28T05:02:29.840Z","upvoteCount":0,"url":"https://teratail.com/questions/nljocoetuf0uxx#reply-4hbe0evp8uhm8q"},"suggestedAnswer":[],"breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https://teratail.com","name":"トップ"}},{"@type":"ListItem","position":2,"item":{"@id":"https://teratail.com/tags/import","name":"importに関する質問"}},{"@type":"ListItem","position":3,"item":{"@id":"https://teratail.com/questions/nljocoetuf0uxx","name":"three.jsのimportについて"}}]}}}
質問するログイン新規登録

Q&A

解決済

1回答

5525閲覧

three.jsのimportについて

gubi.m

総合スコア16

import

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

Three.js

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

WebGL

WebGL(ウェブジーエル)は、ウェブブラウザで 3次元コンピュータグラフィックスを表示させるための標準仕様です。

0グッド

0クリップ

投稿2022/08/04 23:07

0

0

three.jsでOrbitControlsをimportしたところからエラーが出てしまいます。
具体的には、2行目の
import {OrbitControls} from "./jsm/controls/OrbitControls.js";
と53行目の
controls = new OrbitControls(camera, renderer.domElement);を書くまでは球体が表示されているのですが、この2行を書くと下記のようなエラーが出ます。
Uncaught TypeError: Failed to resolve module specifier "three". Relative references must start with either "/", "./", or "../".

解決方法を教えていただけないでしょうか。
お手数をおかけしますが、よろしくお願いいたします!!

イメージ説明

index.html

<script src="main.js" type="module"></script>

main.js

import * as THREE from './build/three.module.js'; //全ての要素に対してインポートするので* import {OrbitControls} from "./jsm/controls/OrbitControls.js"; //webブラウザで表示するときには、シーン(scene),カメラ(camera),レンダラー(renderer)が必ず必要 let scene, camera, renderer, pointLight, controls;//ここで書くと、グローバル変数として宣言することになる //シーンを追加 scene = new THREE.Scene();//Sceneの頭は大文字でかく //カメラを追加 camera = new THREE.PerspectiveCamera(//PerspectiveCamera(視野角(映す角度),アスペクト比(画面の横と縦の比率。表示する画面サイズを決定),開始距離,終了距離) 50,//視野角 window.innerWidth / window.innerHeight,//アスペクト比 0.1,//開始距離 1000//終了距離 ); camera.position.set(0, 0, +500);//cameraをz軸のプラスの方向に動かしていく(そうしないとcameraが物体より前に出て映らない) //レンダラー(カメラで写した要素を変換して、ブラウザに3dとして表示するもの)を追加 renderer = new THREE.WebGLRenderer({alpha: true});//alpha・・透明度を表す。デフォルトではfalse。trueにして透明度を上げると、背景画像が見える renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement);//レンダラーをhtmlのbodyタグに表示する renderer.render(scene, camera);//画面にレンダラーが表示される //ジオメトリを作成 //SphereGeometry・・・球体のジオメトリ //three.jsの公式サイトで、documentから検索すると、引数に何を書くか分かる let ballGeometry = new THREE.SphereGeometry(100, 64, 32);//(radius(半径),widthSegment(ポリゴンの数を増やす。値を大きくすればするほど、より球体に近づく。),heightSegment(ポリゴンの分割数を上げる。より綺麗な球体に近づく。)) //マテリアルを作成 let ballMaterial = new THREE.MeshPhysicalMaterial();//粗さ、金属性、反射率等を設定できる。引数には、{color: 色}や、{map: テクスチャ}など。テクスチャでは、地球の画像を持ってきて球体に貼り付けることができる。 //ジオメトリ(骨格)とマテリアル(色)をここまでで作成しました。それをメッシュ化していきます //メッシュ化 let ballMesh = new THREE.Mesh(ballGeometry, ballMaterial);//引数としてジオメトリとマテリアルを宣言 scene.add(ballMesh);//sceneにポリゴンを乗せて、cameraで撮影する準備ができる //平行光源を追加してみよう//上から光が降り注ぐ let directionalLight = new THREE.DirectionalLight(0xffffff, 2)//引数は色(0xは、16進数を描きますという意味)と、強さをとる directionalLight.position.set(1, 1, 1);//(1,1,1)の位置から光が降り注ぐようになる scene.add(directionalLight); //ポイント光源を追加してみよう//地球の周りを動かすためにグローバルで宣言したいので、5行目のとこで宣言している(なんでここはグローバルじゃない?) pointLight = new THREE.PointLight(0xffffff, 1);//平行光源と同じく、引数は色と強さ //今の状態だとポイント光源が地球の中に入ってしまっているので、位置を変える pointLight.position.set(-200, -200, -200); scene.add(pointLight);//作ったものはsceneにaddする //ポイント光源がどこにあるのかを特定する//平行光源のヘルパーとかもあるらしい let pointLightHelper = new THREE.PointLightHelper(pointLight, 30);//第二引数はヘルパー(菱形みたいなやつ)の大きさを表す scene.add(pointLightHelper); //マウス操作ができるようにしよう(グルーバル変数で変数を宣言する) controls = new OrbitControls(camera, renderer.domElement); //ポイント光源を球の周りを周りを巡回させる//座標を変数にして動的に変える //リロードしないと場所が変わらないので、常にぐるぐる回らせるために、アニメート関数に入れて、アニメート関数をフレーム単位で変えていく function animate(){ pointLight.position.set( 200 * Math.sin(Date.now() / 500), 200 * Math.sin(Date.now() / 1000), 200 * Math.cos(Date.now() / 500), ); //レンダリングしてみよう renderer.render(scene, camera);//これもフレームタイムでレンダリングしないと、画面がフレーム単位でレンダリングされないので、アニメート関数に組み込む //アニメーション関数をフレーム単位で更新するためには、requestAnimationFrameという関数を使う requestAnimationFrame(animate);//これだけではアニメート関数を呼んでいない } //アニメート関数を呼ぶ //レンダリングもフレーム単位で更新しないと、画面がレンダリングされないので、アニメート関数に組み込む animate();

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

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

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

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

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

gubi.m

2022/08/05 15:09

https://github.com/mrdoob/three.js/releases ここから持ってきています! 私は最新のr143というものを使って書いたのですが、Udemyの教材はr134を使っていて、そちらをダウンロードすればうまくいったのですが、r143でなぜうまくいかないのか困っています( ; ; )
cx20

2022/08/28 05:05

three.js は常に新しい取り組みを行っている為、ライブラリのバージョンが上がると古いサンプルは動作しなくなることが多いです。 公式サンプルを参考に新しい使い方を学ぶか、教材で使用しているライブラリバージョンと同じバージョンを使うといった対応が必要かと思います。
gubi.m

2022/08/28 12:16

バージョンで変わってしまうのですね。バージョンを揃えてうまくいきました!ありがとうございました!
guest

回答1

0

ベストアンサー

index.html 側に下記を追加してみてください。

html

1<script type="importmap"> 2{ 3 "imports": { 4 "three": "./build/three.module.js", 5 "three/examples/jsm/": "./jsm/" 6 } 7} 8</script>

<参考>
■ 公式サンプル
https://github.com/mrdoob/three.js/blob/master/examples/webgl_animation_keyframes.html

■ three.jsのGLTFLoader.jsのimportに失敗したときの解決備忘録
https://qiita.com/iwaken71/items/c3c8656d78c33ad92c39

投稿2022/08/28 05:02

cx20

総合スコア4707

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

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

gubi.m

2022/08/28 12:15

ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.29%

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

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

質問する

関連した質問