soiz commited on
Commit
36722fa
·
verified ·
1 Parent(s): 05f2fc1

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +21 -51
index.html CHANGED
@@ -36,9 +36,8 @@
36
 
37
  <!-- Three.js ライブラリ -->
38
  <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
39
- <!-- OrbitControls.js ライブラリ -->
40
  <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/controls/OrbitControls.js"></script>
41
-
42
  <script>
43
  const canvas = document.getElementById('canvas');
44
  const ctx = canvas.getContext('2d');
@@ -46,9 +45,7 @@
46
  const cubeSize = 5; // 立方体のサイズ
47
  let cubes = []; // 立方体を格納する配列
48
 
49
- // カメラ移動の速度
50
- const moveSpeed = 0.5;
51
- const rotateSpeed = 0.05;
52
 
53
  function processImage() {
54
  const fileInput = document.getElementById('imageInput');
@@ -71,16 +68,18 @@
71
  // Three.jsの基本設定
72
  scene = new THREE.Scene();
73
  camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
74
- camera.position.set(0, 0, 300);
75
-
76
- renderer = new THREE.WebGLRenderer();
77
- renderer.setSize(window.innerWidth, window.innerHeight);
78
- document.getElementById('scene-container').appendChild(renderer.domElement);
79
 
80
- controls = new THREE.OrbitControls(camera, renderer.domElement);
 
81
  controls.enableDamping = true;
82
  controls.dampingFactor = 0.25;
83
  controls.screenSpacePanning = false;
 
 
 
 
 
84
 
85
  createCubesFromImage();
86
 
@@ -117,12 +116,10 @@
117
  function animate() {
118
  requestAnimationFrame(animate);
119
 
120
- // カメラ移動
121
- handleKeyboardInput();
122
-
123
- controls.update(); // OrbitControlsの更新
124
 
125
- // 立方体のアニメーション
126
  cubes.forEach((cube, index) => {
127
  const targetX = ((index % canvas.width) - canvas.width / 2) * cubeSize * 1.2;
128
  const targetY = ((canvas.height / 2) - Math.floor(index / canvas.width)) * cubeSize * 1.2;
@@ -136,43 +133,16 @@
136
  renderer.render(scene, camera);
137
  }
138
 
139
- function handleKeyboardInput() {
140
- const cameraDirection = new THREE.Vector3();
141
- camera.getWorldDirection(cameraDirection);
142
-
143
- if (keyboard.w) {
144
- camera.position.add(cameraDirection.multiplyScalar(moveSpeed));
145
- }
146
- if (keyboard.s) {
147
- camera.position.sub(cameraDirection.multiplyScalar(moveSpeed));
148
- }
149
- if (keyboard.a) {
150
- const left = new THREE.Vector3();
151
- left.crossVectors(cameraDirection, camera.up).normalize();
152
- camera.position.add(left.multiplyScalar(moveSpeed));
153
- }
154
- if (keyboard.d) {
155
- const right = new THREE.Vector3();
156
- right.crossVectors(cameraDirection, camera.up).normalize();
157
- camera.position.sub(right.multiplyScalar(moveSpeed));
158
- }
159
  }
160
 
161
- const keyboard = { w: false, a: false, s: false, d: false };
162
-
163
- window.addEventListener('keydown', (event) => {
164
- if (event.key === 'w') keyboard.w = true;
165
- if (event.key === 'a') keyboard.a = true;
166
- if (event.key === 's') keyboard.s = true;
167
- if (event.key === 'd') keyboard.d = true;
168
- });
169
-
170
- window.addEventListener('keyup', (event) => {
171
- if (event.key === 'w') keyboard.w = false;
172
- if (event.key === 'a') keyboard.a = false;
173
- if (event.key === 's') keyboard.s = false;
174
- if (event.key === 'd') keyboard.d = false;
175
- });
176
  </script>
177
  </body>
178
  </html>
 
36
 
37
  <!-- Three.js ライブラリ -->
38
  <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
39
+ <!-- OrbitControls ライブラリ -->
40
  <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/controls/OrbitControls.js"></script>
 
41
  <script>
42
  const canvas = document.getElementById('canvas');
43
  const ctx = canvas.getContext('2d');
 
45
  const cubeSize = 5; // 立方体のサイズ
46
  let cubes = []; // 立方体を格納する配列
47
 
48
+ let cameraSpeed = 5; // カメラ移動速度
 
 
49
 
50
  function processImage() {
51
  const fileInput = document.getElementById('imageInput');
 
68
  // Three.jsの基本設定
69
  scene = new THREE.Scene();
70
  camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
71
+ camera.position.set(0, 0, 300); // 最初のカメラ位置を設定
 
 
 
 
72
 
73
+ // OrbitControlsを使ってマウス操作で視点を回転できるようにする
74
+ controls = new THREE.OrbitControls(camera);
75
  controls.enableDamping = true;
76
  controls.dampingFactor = 0.25;
77
  controls.screenSpacePanning = false;
78
+ controls.maxPolarAngle = Math.PI / 2;
79
+
80
+ renderer = new THREE.WebGLRenderer();
81
+ renderer.setSize(window.innerWidth, window.innerHeight);
82
+ document.getElementById('scene-container').appendChild(renderer.domElement);
83
 
84
  createCubesFromImage();
85
 
 
116
  function animate() {
117
  requestAnimationFrame(animate);
118
 
119
+ // OrbitControlsの更新
120
+ controls.update();
 
 
121
 
122
+ // 各立方体をターゲット位置へ移動させる
123
  cubes.forEach((cube, index) => {
124
  const targetX = ((index % canvas.width) - canvas.width / 2) * cubeSize * 1.2;
125
  const targetY = ((canvas.height / 2) - Math.floor(index / canvas.width)) * cubeSize * 1.2;
 
133
  renderer.render(scene, camera);
134
  }
135
 
136
+ // カメラの移動(WASDキー)
137
+ function moveCamera(event) {
138
+ const key = event.key.toLowerCase();
139
+ if (key === 'w') camera.position.z -= cameraSpeed;
140
+ if (key === 's') camera.position.z += cameraSpeed;
141
+ if (key === 'a') camera.position.x -= cameraSpeed;
142
+ if (key === 'd') camera.position.x += cameraSpeed;
 
 
 
 
 
 
 
 
 
 
 
 
 
143
  }
144
 
145
+ window.addEventListener('keydown', moveCamera);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
146
  </script>
147
  </body>
148
  </html>