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
+
1
10
if ( Detector . webgl ) {
2
11
init ( ) ;
3
12
animate ( ) ;
@@ -6,8 +15,6 @@ if (Detector.webgl) {
6
15
document . getElementById ( 'container' ) . appendChild ( warning ) ;
7
16
}
8
17
9
- var scene , camera , renderer , controls ;
10
-
11
18
function init ( ) {
12
19
scene = new THREE . Scene ( ) ;
13
20
@@ -73,7 +80,7 @@ function init() {
73
80
} ) ;
74
81
} ) ;
75
82
76
- // Create Sphere
83
+ // Create Car Sphere
77
84
var sphereGeometry = new THREE . SphereGeometry ( 3 , 32 , 32 ) ;
78
85
loader = new THREE . TextureLoader ( ) ;
79
86
loader . load ( './Car-Module/src/texture_rock.jpg' , function ( texture ) {
@@ -83,21 +90,108 @@ function init() {
83
90
material = new THREE . MeshBasicMaterial ( {
84
91
map : texture
85
92
} ) ;
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 ) ;
89
97
} ) ;
90
98
99
+ setInterval ( updateMotion , 300 ) ;
100
+
91
101
// Create an event listener that resizes the renderer with the browser window.
92
102
window . addEventListener ( 'resize' , function ( ) {
93
103
renderer . setSize ( window . innerWidth , window . innerHeight ) ;
94
104
camera . aspect = window . innerWidth / window . innerHeight ;
95
105
camera . updateProjectionMatrix ( ) ;
96
106
} ) ;
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 ;
97
189
}
98
190
99
191
function animate ( ) {
100
192
requestAnimationFrame ( animate ) ;
193
+ car . position . set ( posX , posY , 3 ) ;
194
+ car . rotation . set ( rotX , rotY , 0 ) ;
101
195
renderer . render ( scene , camera ) ;
102
196
controls . update ( ) ;
103
197
}
0 commit comments