Skip to content

Commit 0c44c72

Browse files
committedJun 5, 2017
Add motion
1 parent c90de0e commit 0c44c72

File tree

2 files changed

+101
-6
lines changed

2 files changed

+101
-6
lines changed
 

‎.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
node_modules/
33
package.json
44
.eslintrc.json
5+
webpack.config.js

‎Car-Module/js/scene.js

+100-6
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
var scene, camera, renderer, controls, car;
2+
var posX = 0.0,
3+
posY = 0.0,
4+
rotX = 0.0,
5+
rotY = 0.0,
6+
angleWheel = 0.0,
7+
angleCar = 90.0,
8+
time = 0;
9+
110
if (Detector.webgl) {
211
init();
312
animate();
@@ -6,8 +15,6 @@ if (Detector.webgl) {
615
document.getElementById('container').appendChild(warning);
716
}
817

9-
var scene, camera, renderer, controls;
10-
1118
function init() {
1219
scene = new THREE.Scene();
1320

@@ -73,7 +80,7 @@ function init() {
7380
});
7481
});
7582

76-
// Create Sphere
83+
// Create Car Sphere
7784
var sphereGeometry = new THREE.SphereGeometry(3, 32, 32);
7885
loader = new THREE.TextureLoader();
7986
loader.load('./Car-Module/src/texture_rock.jpg', function (texture) {
@@ -83,21 +90,108 @@ function init() {
8390
material = new THREE.MeshBasicMaterial({
8491
map: texture
8592
});
86-
var sphere = new THREE.Mesh(sphereGeometry, material);
87-
sphere.position.set(0, 0, 3);
88-
scene.add(sphere);
93+
car = new THREE.Mesh(sphereGeometry, material);
94+
car.position.set(posX, posY, 3);
95+
//car.geometry.attributes.position.needsUpdate = true;
96+
scene.add(car);
8997
});
9098

99+
setInterval(updateMotion, 300);
100+
91101
// Create an event listener that resizes the renderer with the browser window.
92102
window.addEventListener('resize', function () {
93103
renderer.setSize(window.innerWidth, window.innerHeight);
94104
camera.aspect = window.innerWidth / window.innerHeight;
95105
camera.updateProjectionMatrix();
96106
});
107+
108+
document.onkeydown = function (e) {
109+
switch (e.keyCode) {
110+
case 37:
111+
// Left
112+
--posX;
113+
rotY += 0.1;
114+
break;
115+
case 65:
116+
case 97:
117+
if (angleWheel > -40)
118+
--angleWheel;
119+
break;
120+
121+
case 38:
122+
case 87:
123+
case 119:
124+
// Up
125+
++posY;
126+
rotX += 0.1;
127+
break;
128+
129+
case 39:
130+
// Right
131+
++posX;
132+
rotY += 0.1;
133+
break;
134+
case 68:
135+
case 100:
136+
if (angleWheel < 40)
137+
++angleWheel;
138+
break;
139+
140+
case 40:
141+
case 83:
142+
case 115:
143+
// Down
144+
--posY;
145+
rotX += 0.1;
146+
break;
147+
148+
case 32:
149+
// Space
150+
run = !run;
151+
break;
152+
}
153+
};
154+
}
155+
156+
var run = false;
157+
158+
function timer() {
159+
time += 10;
160+
}
161+
162+
function updateMotion() {
163+
if (run) {
164+
posX = posX + cos(angleCar + angleWheel) + sin(angleWheel) * sin(angleCar);
165+
posY = posY + sin(angleCar + angleWheel) - sin(angleWheel) * cos(angleCar);
166+
angleCar = angleCar - asin((2.0 * sin(angleWheel)) / 6.0);
167+
if (angleCar > 270)
168+
angleCar -= 360;
169+
else if (angleCar < -90)
170+
angleCar += 360;
171+
console.log(angleCar);
172+
}
173+
}
174+
175+
function cos(degree) {
176+
return Math.cos(degreeToRadian(degree));
177+
}
178+
179+
function sin(degree) {
180+
return Math.sin(degreeToRadian(degree));
181+
}
182+
183+
function asin(degree) {
184+
return Math.asin(degreeToRadian(degree));
185+
}
186+
187+
function degreeToRadian(degree) {
188+
return degree * Math.PI / 180.0;
97189
}
98190

99191
function animate() {
100192
requestAnimationFrame(animate);
193+
car.position.set(posX, posY, 3);
194+
car.rotation.set(rotX, rotY, 0);
101195
renderer.render(scene, camera);
102196
controls.update();
103197
}

0 commit comments

Comments
 (0)
Please sign in to comment.