soiz commited on
Commit
05f2fc1
·
verified ·
1 Parent(s): 9b34615

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +51 -20
index.html CHANGED
@@ -36,7 +36,9 @@
36
 
37
  <!-- Three.js ライブラリ -->
38
  <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
 
39
  <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/controls/OrbitControls.js"></script>
 
40
  <script>
41
  const canvas = document.getElementById('canvas');
42
  const ctx = canvas.getContext('2d');
@@ -44,6 +46,10 @@
44
  const cubeSize = 5; // 立方体のサイズ
45
  let cubes = []; // 立方体を格納する配列
46
 
 
 
 
 
47
  function processImage() {
48
  const fileInput = document.getElementById('imageInput');
49
  const file = fileInput.files[0];
@@ -65,13 +71,16 @@
65
  // Three.jsの基本設定
66
  scene = new THREE.Scene();
67
  camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
68
- camera.position.z = 300;
69
 
70
  renderer = new THREE.WebGLRenderer();
71
  renderer.setSize(window.innerWidth, window.innerHeight);
72
  document.getElementById('scene-container').appendChild(renderer.domElement);
73
 
74
- controls = new THREE.OrbitControls(camera, renderer.domElement); // カメラの操作を追加
 
 
 
75
 
76
  createCubesFromImage();
77
 
@@ -108,7 +117,12 @@
108
  function animate() {
109
  requestAnimationFrame(animate);
110
 
111
- // 各立方体をターゲット位置へ移動させる
 
 
 
 
 
112
  cubes.forEach((cube, index) => {
113
  const targetX = ((index % canvas.width) - canvas.width / 2) * cubeSize * 1.2;
114
  const targetY = ((canvas.height / 2) - Math.floor(index / canvas.width)) * cubeSize * 1.2;
@@ -119,29 +133,46 @@
119
  cube.position.z += (targetZ - cube.position.z) * 0.05;
120
  });
121
 
122
- controls.update(); // OrbitControlsを更新
123
  renderer.render(scene, camera);
124
  }
125
 
126
- // WASDキーでカメラを移動する処理
127
- window.addEventListener('keydown', function (event) {
128
- const moveSpeed = 10;
129
- switch (event.key) {
130
- case 'w': // 上に移動
131
- camera.position.y += moveSpeed;
132
- break;
133
- case 's': // 下に移動
134
- camera.position.y -= moveSpeed;
135
- break;
136
- case 'a': // 左に移動
137
- camera.position.x -= moveSpeed;
138
- break;
139
- case 'd': // 右に移動
140
- camera.position.x += moveSpeed;
141
- break;
142
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
143
  });
144
 
 
 
 
 
 
 
145
  </script>
146
  </body>
147
  </html>
 
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
  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');
55
  const file = fileInput.files[0];
 
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
  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;
 
133
  cube.position.z += (targetZ - cube.position.z) * 0.05;
134
  });
135
 
 
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>