From a9dd33d47923f049e3ccd82f3dd2e8b623a21e66 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Sun, 3 Sep 2017 19:24:28 -0700 Subject: [PATCH] Stub a shader for objects in the 3D demo --- demo/client/src/3d-demo.ts | 2 +- demo/client/src/camera.ts | 11 ++++++++--- demo/client/src/shader-loader.ts | 6 ++++++ shaders/gles2/blit.vs.glsl | 8 +++++++- shaders/gles2/demo-3d-monument.fs.glsl | 18 ++++++++++++++++++ shaders/gles2/demo-3d-monument.vs.glsl | 19 +++++++++++++++++++ 6 files changed, 59 insertions(+), 5 deletions(-) create mode 100644 shaders/gles2/demo-3d-monument.fs.glsl create mode 100644 shaders/gles2/demo-3d-monument.vs.glsl diff --git a/demo/client/src/3d-demo.ts b/demo/client/src/3d-demo.ts index 324f3d8c..24d7617e 100644 --- a/demo/client/src/3d-demo.ts +++ b/demo/client/src/3d-demo.ts @@ -148,8 +148,8 @@ class ThreeDView extends PathfinderDemoView { this.canvas.width / this.canvas.height, NEAR_CLIP_PLANE, FAR_CLIP_PLANE); - glmatrix.mat4.translate(transform, transform, this.camera.translation); glmatrix.mat4.mul(transform, transform, this.camera.rotationMatrix); + glmatrix.mat4.translate(transform, transform, this.camera.translation); return transform; } diff --git a/demo/client/src/camera.ts b/demo/client/src/camera.ts index db82a1b3..20086c90 100644 --- a/demo/client/src/camera.ts +++ b/demo/client/src/camera.ts @@ -101,23 +101,28 @@ export class PerspectiveCamera extends Camera { return; } - this.movementDelta = glmatrix.vec3.fromValues(PERSPECTIVE_MOVEMENT_SPEED, 0.0, 0.0); + this.movementDelta = glmatrix.vec3.fromValues(0.0, 0.0, PERSPECTIVE_MOVEMENT_SPEED); if (event.button !== 1) this.movementDelta[0] = -this.movementDelta[0]; - this.movementInterval = window.setInterval(() => this.move(), MOVEMENT_INTERVAL_DELAY); + if (this.movementInterval == null) + this.movementInterval = window.setInterval(() => this.move(), MOVEMENT_INTERVAL_DELAY); } private onMouseUp(event: MouseEvent): void { if (this.movementInterval != null) { window.clearInterval(this.movementInterval); + this.movementInterval = null; this.movementDelta = glmatrix.vec3.create(); } } private move() { + const invRotationMatrix = glmatrix.mat4.create(); + glmatrix.mat4.invert(invRotationMatrix, this.rotationMatrix); + const delta = glmatrix.vec3.clone(this.movementDelta); - glmatrix.vec3.transformMat4(delta, delta, this.rotationMatrix); + glmatrix.vec3.transformMat4(delta, delta, invRotationMatrix); glmatrix.vec3.add(this.translation, this.translation, delta); if (this.onChange != null) diff --git a/demo/client/src/shader-loader.ts b/demo/client/src/shader-loader.ts index 444ad861..5a53d5e2 100644 --- a/demo/client/src/shader-loader.ts +++ b/demo/client/src/shader-loader.ts @@ -28,6 +28,7 @@ export const SHADER_NAMES: Array> = [ 'ecaaCurve', 'ecaaMonoResolve', 'ecaaMultiResolve', + 'demo3DMonument', ]; const SHADER_URLS: ShaderMap = { @@ -67,6 +68,10 @@ const SHADER_URLS: ShaderMap = { vertex: "/glsl/gles2/ecaa-multi-resolve.vs.glsl", fragment: "/glsl/gles2/ecaa-multi-resolve.fs.glsl", }, + demo3DMonument: { + vertex: "/glsl/gles2/demo-3d-monument.vs.glsl", + fragment: "/glsl/gles2/demo-3d-monument.fs.glsl", + }, }; export interface ShaderMap { @@ -79,6 +84,7 @@ export interface ShaderMap { ecaaCurve: T; ecaaMonoResolve: T; ecaaMultiResolve: T; + demo3DMonument: T; } export interface ShaderProgramSource { diff --git a/shaders/gles2/blit.vs.glsl b/shaders/gles2/blit.vs.glsl index 94d79fee..9f952bc9 100644 --- a/shaders/gles2/blit.vs.glsl +++ b/shaders/gles2/blit.vs.glsl @@ -1,6 +1,12 @@ // pathfinder/shaders/gles2/blit.vs.glsl // -// Copyright (c) 2017 Mozilla Foundation +// Copyright (c) 2017 The Pathfinder Project Developers. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. precision mediump float; diff --git a/shaders/gles2/demo-3d-monument.fs.glsl b/shaders/gles2/demo-3d-monument.fs.glsl new file mode 100644 index 00000000..66697d1e --- /dev/null +++ b/shaders/gles2/demo-3d-monument.fs.glsl @@ -0,0 +1,18 @@ +// pathfinder/shaders/gles2/demo-3d-monument.fs.glsl +// +// Copyright (c) 2017 The Pathfinder Project Developers. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +precision mediump float; + +uniform vec4 uColor; + +void main() { + // TODO(pcwalton): Lighting. + gl_FragColor = uColor; +} diff --git a/shaders/gles2/demo-3d-monument.vs.glsl b/shaders/gles2/demo-3d-monument.vs.glsl new file mode 100644 index 00000000..729a702b --- /dev/null +++ b/shaders/gles2/demo-3d-monument.vs.glsl @@ -0,0 +1,19 @@ +// pathfinder/shaders/gles2/demo-3d-monument.vs.glsl +// +// Copyright (c) 2017 The Pathfinder Project Developers. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +precision mediump float; + +uniform mat4 uTransform; + +attribute vec3 aPosition; + +void main() { + gl_Position = uTransform * vec4(aPosition, 1.0); +}