Skip to content

Commit ab0c317

Browse files
Olli Etuahogreggman
authored andcommitted
Aquarium: Separate world and viewProjection matrices in GLSL
This way the viewProjection matrix can be put into an array for multiview stereo rendering.
1 parent d4e9fbb commit ab0c317

File tree

4 files changed

+61
-61
lines changed

4 files changed

+61
-61
lines changed

aquarium-vr/aquarium-vr.html

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -145,10 +145,11 @@
145145
attribute vec4 position;
146146
attribute vec2 texCoord;
147147
varying vec2 v_texCoord;
148-
uniform mat4 worldViewProjection;
148+
uniform mat4 world;
149+
uniform mat4 viewProjection;
149150
void main() {
150151
v_texCoord = texCoord;
151-
gl_Position = (worldViewProjection * position);
152+
gl_Position = (viewProjection * world * position);
152153
}
153154
</script>
154155
<script id="texFragmentShader" type="text/something-not-javascript">
@@ -166,10 +167,11 @@
166167
attribute vec4 position;
167168
attribute vec2 texCoord;
168169
varying vec2 v_texCoord;
169-
uniform mat4 worldViewProjection;
170+
uniform mat4 world;
171+
uniform mat4 viewProjection;
170172
void main() {
171173
v_texCoord = texCoord;
172-
gl_Position = (worldViewProjection * position);
174+
gl_Position = (viewProjection * world * position);
173175
}
174176
</script>
175177
<script id="laserFragmentShader" type="text/something-not-javascript">
@@ -221,7 +223,6 @@
221223
vec4(0, 0, scale, 0),
222224
vec4(0, 0, 0, 1));
223225
mat4 world = orientMat * scaleMat;
224-
mat4 worldViewProjection = viewProjection * world;
225226
mat4 worldInverseTranspose = world;
226227

227228
v_texCoord = texCoord;
@@ -233,7 +234,7 @@
233234
float a = sign(s);
234235
float offset = pow(mult, 2.0) * s * fishBendAmount;
235236
v_position = (
236-
worldViewProjection *
237+
viewProjection * world *
237238
(position +
238239
vec4(offset, 0, 0, 0)));
239240
v_normal = (worldInverseTranspose * vec4(normal, 0)).xyz;
@@ -439,7 +440,7 @@
439440
</script>
440441
<!-- ===[ Diffuse Map Shader ]============================================== -->
441442
<script id="diffuseVertexShader" type="text/something-not-javascript">
442-
uniform mat4 worldViewProjection;
443+
uniform mat4 viewProjection;
443444
uniform vec3 lightWorldPos;
444445
uniform mat4 world;
445446
uniform mat4 viewInverse;
@@ -454,7 +455,7 @@
454455
varying vec3 v_surfaceToView;
455456
void main() {
456457
v_texCoord = texCoord;
457-
v_position = (worldViewProjection * position);
458+
v_position = (viewProjection * world * position);
458459
v_normal = (worldInverseTranspose * vec4(normal, 0)).xyz;
459460
v_surfaceToLight = lightWorldPos - (world * position).xyz;
460461
v_surfaceToView = (viewInverse[3] - (world * position)).xyz;
@@ -502,7 +503,7 @@
502503
</script>
503504
<!-- ===[ Normal Map Shader ]============================================== -->
504505
<script id="normalMapVertexShader" type="text/something-not-javascript">
505-
uniform mat4 worldViewProjection;
506+
uniform mat4 viewProjection;
506507
uniform vec3 lightWorldPos;
507508
uniform mat4 world;
508509
uniform mat4 viewInverse;
@@ -521,7 +522,7 @@
521522
varying vec3 v_surfaceToView;
522523
void main() {
523524
v_texCoord = texCoord;
524-
v_position = (worldViewProjection * position);
525+
v_position = (viewProjection * world * position);
525526
v_normal = (worldInverseTranspose * vec4(normal, 0)).xyz;
526527
v_surfaceToLight = lightWorldPos - (world * position).xyz;
527528
v_surfaceToView = (viewInverse[3] - (world * position)).xyz;
@@ -583,7 +584,7 @@
583584
</script>
584585
<!-- ===[ Reflection Map Shader ]============================================== -->
585586
<script id="reflectionMapVertexShader" type="text/something-not-javascript">
586-
uniform mat4 worldViewProjection;
587+
uniform mat4 viewProjection;
587588
uniform vec3 lightWorldPos;
588589
uniform mat4 world;
589590
uniform mat4 viewInverse;
@@ -602,7 +603,7 @@
602603
varying vec3 v_surfaceToView;
603604
void main() {
604605
v_texCoord = texCoord;
605-
v_position = (worldViewProjection * position);
606+
v_position = (viewProjection * world * position);
606607
v_normal = (worldInverseTranspose * vec4(normal, 0)).xyz;
607608
v_surfaceToLight = lightWorldPos - (world * position).xyz;
608609
v_surfaceToView = (viewInverse[3] - (world * position)).xyz;
@@ -667,7 +668,7 @@
667668
</script>
668669
<!-- ===[ Inner Refraction Map Shader ]==================================== -->
669670
<script id="innerRefractionMapVertexShader" type="text/something-not-javascript">
670-
uniform mat4 worldViewProjection;
671+
uniform mat4 viewProjection;
671672
uniform vec3 lightWorldPos;
672673
uniform mat4 world;
673674
uniform mat4 viewInverse;
@@ -686,7 +687,7 @@
686687
varying vec3 v_surfaceToView;
687688
void main() {
688689
v_texCoord = texCoord;
689-
v_position = (worldViewProjection * position);
690+
v_position = (viewProjection * world * position);
690691
v_normal = (worldInverseTranspose * vec4(normal, 0)).xyz;
691692
v_surfaceToLight = lightWorldPos - (world * position).xyz;
692693
v_surfaceToView = (viewInverse[3] - (world * position)).xyz;
@@ -761,7 +762,7 @@
761762
</script>
762763
<!-- ===[ Outer Refraction Map Shader ]==================================== -->
763764
<script id="outerRefractionMapVertexShader" type="text/something-not-javascript">
764-
uniform mat4 worldViewProjection;
765+
uniform mat4 viewProjection;
765766
uniform vec3 lightWorldPos;
766767
uniform mat4 world;
767768
uniform mat4 viewInverse;
@@ -780,7 +781,7 @@
780781
varying vec3 v_surfaceToView;
781782
void main() {
782783
v_texCoord = texCoord;
783-
v_position = (worldViewProjection * position);
784+
v_position = (viewProjection * world * position);
784785
v_normal = (worldInverseTranspose * vec4(normal, 0)).xyz;
785786
v_surfaceToLight = lightWorldPos - (world * position).xyz;
786787
v_surfaceToView = (viewInverse[3] - (world * position)).xyz;

aquarium/aquarium.html

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -142,10 +142,11 @@
142142
attribute vec4 position;
143143
attribute vec2 texCoord;
144144
varying vec2 v_texCoord;
145-
uniform mat4 worldViewProjection;
145+
uniform mat4 world;
146+
uniform mat4 viewProjection;
146147
void main() {
147148
v_texCoord = texCoord;
148-
gl_Position = (worldViewProjection * position);
149+
gl_Position = (viewProjection * world * position);
149150
}
150151
</script>
151152
<script id="texFragmentShader" type="text/something-not-javascript">
@@ -163,10 +164,11 @@
163164
attribute vec4 position;
164165
attribute vec2 texCoord;
165166
varying vec2 v_texCoord;
166-
uniform mat4 worldViewProjection;
167+
uniform mat4 world;
168+
uniform mat4 viewProjection;
167169
void main() {
168170
v_texCoord = texCoord;
169-
gl_Position = (worldViewProjection * position);
171+
gl_Position = (viewProjection * world * position);
170172
}
171173
</script>
172174
<script id="laserFragmentShader" type="text/something-not-javascript">
@@ -218,7 +220,6 @@
218220
vec4(0, 0, scale, 0),
219221
vec4(0, 0, 0, 1));
220222
mat4 world = orientMat * scaleMat;
221-
mat4 worldViewProjection = viewProjection * world;
222223
mat4 worldInverseTranspose = world;
223224

224225
v_texCoord = texCoord;
@@ -230,7 +231,7 @@
230231
float a = sign(s);
231232
float offset = pow(mult, 2.0) * s * fishBendAmount;
232233
v_position = (
233-
worldViewProjection *
234+
viewProjection * world *
234235
(position +
235236
vec4(offset, 0, 0, 0)));
236237
v_normal = (worldInverseTranspose * vec4(normal, 0)).xyz;
@@ -436,7 +437,7 @@
436437
</script>
437438
<!-- ===[ Diffuse Map Shader ]============================================== -->
438439
<script id="diffuseVertexShader" type="text/something-not-javascript">
439-
uniform mat4 worldViewProjection;
440+
uniform mat4 viewProjection;
440441
uniform vec3 lightWorldPos;
441442
uniform mat4 world;
442443
uniform mat4 viewInverse;
@@ -451,7 +452,7 @@
451452
varying vec3 v_surfaceToView;
452453
void main() {
453454
v_texCoord = texCoord;
454-
v_position = (worldViewProjection * position);
455+
v_position = (viewProjection * world * position);
455456
v_normal = (worldInverseTranspose * vec4(normal, 0)).xyz;
456457
v_surfaceToLight = lightWorldPos - (world * position).xyz;
457458
v_surfaceToView = (viewInverse[3] - (world * position)).xyz;
@@ -499,7 +500,7 @@
499500
</script>
500501
<!-- ===[ Normal Map Shader ]============================================== -->
501502
<script id="normalMapVertexShader" type="text/something-not-javascript">
502-
uniform mat4 worldViewProjection;
503+
uniform mat4 viewProjection;
503504
uniform vec3 lightWorldPos;
504505
uniform mat4 world;
505506
uniform mat4 viewInverse;
@@ -518,7 +519,7 @@
518519
varying vec3 v_surfaceToView;
519520
void main() {
520521
v_texCoord = texCoord;
521-
v_position = (worldViewProjection * position);
522+
v_position = (viewProjection * world * position);
522523
v_normal = (worldInverseTranspose * vec4(normal, 0)).xyz;
523524
v_surfaceToLight = lightWorldPos - (world * position).xyz;
524525
v_surfaceToView = (viewInverse[3] - (world * position)).xyz;
@@ -580,7 +581,7 @@
580581
</script>
581582
<!-- ===[ Reflection Map Shader ]============================================== -->
582583
<script id="reflectionMapVertexShader" type="text/something-not-javascript">
583-
uniform mat4 worldViewProjection;
584+
uniform mat4 viewProjection;
584585
uniform vec3 lightWorldPos;
585586
uniform mat4 world;
586587
uniform mat4 viewInverse;
@@ -599,7 +600,7 @@
599600
varying vec3 v_surfaceToView;
600601
void main() {
601602
v_texCoord = texCoord;
602-
v_position = (worldViewProjection * position);
603+
v_position = (viewProjection * world * position);
603604
v_normal = (worldInverseTranspose * vec4(normal, 0)).xyz;
604605
v_surfaceToLight = lightWorldPos - (world * position).xyz;
605606
v_surfaceToView = (viewInverse[3] - (world * position)).xyz;
@@ -664,7 +665,7 @@
664665
</script>
665666
<!-- ===[ Inner Refraction Map Shader ]==================================== -->
666667
<script id="innerRefractionMapVertexShader" type="text/something-not-javascript">
667-
uniform mat4 worldViewProjection;
668+
uniform mat4 viewProjection;
668669
uniform vec3 lightWorldPos;
669670
uniform mat4 world;
670671
uniform mat4 viewInverse;
@@ -683,7 +684,7 @@
683684
varying vec3 v_surfaceToView;
684685
void main() {
685686
v_texCoord = texCoord;
686-
v_position = (worldViewProjection * position);
687+
v_position = (viewProjection * world * position);
687688
v_normal = (worldInverseTranspose * vec4(normal, 0)).xyz;
688689
v_surfaceToLight = lightWorldPos - (world * position).xyz;
689690
v_surfaceToView = (viewInverse[3] - (world * position)).xyz;
@@ -758,7 +759,7 @@
758759
</script>
759760
<!-- ===[ Outer Refraction Map Shader ]==================================== -->
760761
<script id="outerRefractionMapVertexShader" type="text/something-not-javascript">
761-
uniform mat4 worldViewProjection;
762+
uniform mat4 viewProjection;
762763
uniform vec3 lightWorldPos;
763764
uniform mat4 world;
764765
uniform mat4 viewInverse;
@@ -777,7 +778,7 @@
777778
varying vec3 v_surfaceToView;
778779
void main() {
779780
v_texCoord = texCoord;
780-
v_position = (worldViewProjection * position);
781+
v_position = (viewProjection * world * position);
781782
v_normal = (worldInverseTranspose * vec4(normal, 0)).xyz;
782783
v_surfaceToLight = lightWorldPos - (world * position).xyz;
783784
v_surfaceToView = (viewInverse[3] - (world * position)).xyz;

0 commit comments

Comments
 (0)