Просмотр исходного кода

prepare for supporting camera movement via mouse & keyboard

Lucas Stadler лет назад: 10
Родитель
Сommit
161dc64a1a
1 измененных файлов с 50 добавлено и 0 удалено
  1. 50 0
      glsl/raymarching.js

+ 50 - 0
glsl/raymarching.js

155
    gl.uniform2f(iResolution, canvas.width, canvas.height);
155
    gl.uniform2f(iResolution, canvas.width, canvas.height);
156
    gl.uniform1f(iGlobalTime, 0.0);
156
    gl.uniform1f(iGlobalTime, 0.0);
157
    gl.uniform3f(iMouse, 0.0, 0.0, 0.0);
157
    gl.uniform3f(iMouse, 0.0, 0.0, 0.0);
158
    
159
    tt.origin = gl.getUniformLocation(program, 'origin');
158
160
159
    // two triangles
161
    // two triangles
160
    var positions = new Float32Array([
162
    var positions = new Float32Array([
206
      }
208
      }
207
    });
209
    });
208
    
210
    
211
    tt.direction = [0, 0, 1];
212
    tt.angle = {horizontal: 0.0, vertical: 0.0};
213
    
214
    var iDirection = gl.getUniformLocation(program, 'iDirection');
215
    gl.uniform3f(iDirection, tt.direction[0], tt.direction[1], tt.direction[2]);
216
    
217
    var mousePressed = false;
218
    tt.canvas.addEventListener("mousedown", function(ev) { if (ev.button == 0) { mousePressed = true; }});
219
    tt.canvas.addEventListener("mouseup", function(ev) { mousePressed = false; });
220
    
209
    tt.canvas.addEventListener("mousemove", function(ev) {
221
    tt.canvas.addEventListener("mousemove", function(ev) {
210
      gl.uniform3f(iMouse, ev.clientX, canvas.clientHeight - ev.clientY, 0.0);
222
      gl.uniform3f(iMouse, ev.clientX, canvas.clientHeight - ev.clientY, 0.0);
223
      
224
      if (!mousePressed || !iDirection) {
225
        return;
226
      }
227
      
228
      tt.angle.horizontal += 0.0001 * (tt.w/2 - ev.clientX);
229
      tt.angle.vertical += 0.0001 * (tt.h/2 - ev.clientY);
230
      tt.direction = [Math.cos(tt.angle.vertical) * Math.sin(tt.angle.horizontal),
231
                      Math.sin(tt.angle.vertical),
232
                      Math.cos(tt.angle.vertical) * Math.cos(tt.angle.horizontal)];
233
      
234
      gl.uniform3f(iDirection, tt.direction[0], tt.direction[1], tt.direction[2]);
235
211
      requestAnimationFrame(tt.render);
236
      requestAnimationFrame(tt.render);
212
    });
237
    });
213
    
238
    
239
    window.addEventListener('keydown', function(ev) {
240
      if (document.activeElement != document.body) {
241
        return;
242
      }
243
      
244
      var origin = tt.gl.getUniform(tt.program, tt.origin);
245
      
246
      switch (ev.keyCode) {
247
        case 87: // W
248
          origin = [origin[0]+tt.direction[0], origin[1]+tt.direction[1], origin[2]+tt.direction[2]];
249
          break;
250
        case 65: // A
251
          break;
252
        case 83: // S
253
          origin = [origin[0]-tt.direction[0], origin[1]-tt.direction[1], origin[2]-tt.direction[2]];
254
          break;
255
        case 68: // D
256
          break;
257
        default:
258
          return
259
      }
214
      
260
      
261
      gl.uniform3f(tt.origin, origin[0], origin[1], origin[2]);
262
      requestAnimationFrame(tt.render);
263
    });
264
    
215
    window.onresize = function(ev) {
265
    window.onresize = function(ev) {
216
      tt.w = tt.canvas.width = window.innerWidth;
266
      tt.w = tt.canvas.width = window.innerWidth;
217
      tt.h = tt.canvas.height = window.innerHeight;
267
      tt.h = tt.canvas.height = window.innerHeight;