Skip to content

Commit c91f11f

Browse files
Olli Etuahophemavax
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 69dd84e commit c91f11f

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
@@ -275,10 +275,11 @@
275275
attribute vec4 position;
276276
attribute vec2 texCoord;
277277
varying vec2 v_texCoord;
278-
uniform mat4 worldViewProjection;
278+
uniform mat4 world;
279+
uniform mat4 viewProjection;
279280
void main() {
280281
v_texCoord = texCoord;
281-
gl_Position = (worldViewProjection * position);
282+
gl_Position = (viewProjection * world * position);
282283
}
283284
</script>
284285
<script id="texFragmentShader" type="text/something-not-javascript">
@@ -296,10 +297,11 @@
296297
attribute vec4 position;
297298
attribute vec2 texCoord;
298299
varying vec2 v_texCoord;
299-
uniform mat4 worldViewProjection;
300+
uniform mat4 world;
301+
uniform mat4 viewProjection;
300302
void main() {
301303
v_texCoord = texCoord;
302-
gl_Position = (worldViewProjection * position);
304+
gl_Position = (viewProjection * world * position);
303305
}
304306
</script>
305307
<script id="laserFragmentShader" type="text/something-not-javascript">
@@ -351,7 +353,6 @@
351353
vec4(0, 0, scale, 0),
352354
vec4(0, 0, 0, 1));
353355
mat4 world = orientMat * scaleMat;
354-
mat4 worldViewProjection = viewProjection * world;
355356
mat4 worldInverseTranspose = world;
356357

357358
v_texCoord = texCoord;
@@ -363,7 +364,7 @@
363364
float a = sign(s);
364365
float offset = pow(mult, 2.0) * s * fishBendAmount;
365366
v_position = (
366-
worldViewProjection *
367+
viewProjection * world *
367368
(position +
368369
vec4(offset, 0, 0, 0)));
369370
v_normal = (worldInverseTranspose * vec4(normal, 0)).xyz;
@@ -569,7 +570,7 @@
569570
</script>
570571
<!-- ===[ Diffuse Map Shader ]============================================== -->
571572
<script id="diffuseVertexShader" type="text/something-not-javascript">
572-
uniform mat4 worldViewProjection;
573+
uniform mat4 viewProjection;
573574
uniform vec3 lightWorldPos;
574575
uniform mat4 world;
575576
uniform mat4 viewInverse;
@@ -584,7 +585,7 @@
584585
varying vec3 v_surfaceToView;
585586
void main() {
586587
v_texCoord = texCoord;
587-
v_position = (worldViewProjection * position);
588+
v_position = (viewProjection * world * position);
588589
v_normal = (worldInverseTranspose * vec4(normal, 0)).xyz;
589590
v_surfaceToLight = lightWorldPos - (world * position).xyz;
590591
v_surfaceToView = (viewInverse[3] - (world * position)).xyz;
@@ -632,7 +633,7 @@
632633
</script>
633634
<!-- ===[ Normal Map Shader ]============================================== -->
634635
<script id="normalMapVertexShader" type="text/something-not-javascript">
635-
uniform mat4 worldViewProjection;
636+
uniform mat4 viewProjection;
636637
uniform vec3 lightWorldPos;
637638
uniform mat4 world;
638639
uniform mat4 viewInverse;
@@ -651,7 +652,7 @@
651652
varying vec3 v_surfaceToView;
652653
void main() {
653654
v_texCoord = texCoord;
654-
v_position = (worldViewProjection * position);
655+
v_position = (viewProjection * world * position);
655656
v_normal = (worldInverseTranspose * vec4(normal, 0)).xyz;
656657
v_surfaceToLight = lightWorldPos - (world * position).xyz;
657658
v_surfaceToView = (viewInverse[3] - (world * position)).xyz;
@@ -713,7 +714,7 @@
713714
</script>
714715
<!-- ===[ Reflection Map Shader ]============================================== -->
715716
<script id="reflectionMapVertexShader" type="text/something-not-javascript">
716-
uniform mat4 worldViewProjection;
717+
uniform mat4 viewProjection;
717718
uniform vec3 lightWorldPos;
718719
uniform mat4 world;
719720
uniform mat4 viewInverse;
@@ -732,7 +733,7 @@
732733
varying vec3 v_surfaceToView;
733734
void main() {
734735
v_texCoord = texCoord;
735-
v_position = (worldViewProjection * position);
736+
v_position = (viewProjection * world * position);
736737
v_normal = (worldInverseTranspose * vec4(normal, 0)).xyz;
737738
v_surfaceToLight = lightWorldPos - (world * position).xyz;
738739
v_surfaceToView = (viewInverse[3] - (world * position)).xyz;
@@ -797,7 +798,7 @@
797798
</script>
798799
<!-- ===[ Inner Refraction Map Shader ]==================================== -->
799800
<script id="innerRefractionMapVertexShader" type="text/something-not-javascript">
800-
uniform mat4 worldViewProjection;
801+
uniform mat4 viewProjection;
801802
uniform vec3 lightWorldPos;
802803
uniform mat4 world;
803804
uniform mat4 viewInverse;
@@ -816,7 +817,7 @@
816817
varying vec3 v_surfaceToView;
817818
void main() {
818819
v_texCoord = texCoord;
819-
v_position = (worldViewProjection * position);
820+
v_position = (viewProjection * world * position);
820821
v_normal = (worldInverseTranspose * vec4(normal, 0)).xyz;
821822
v_surfaceToLight = lightWorldPos - (world * position).xyz;
822823
v_surfaceToView = (viewInverse[3] - (world * position)).xyz;
@@ -891,7 +892,7 @@
891892
</script>
892893
<!-- ===[ Outer Refraction Map Shader ]==================================== -->
893894
<script id="outerRefractionMapVertexShader" type="text/something-not-javascript">
894-
uniform mat4 worldViewProjection;
895+
uniform mat4 viewProjection;
895896
uniform vec3 lightWorldPos;
896897
uniform mat4 world;
897898
uniform mat4 viewInverse;
@@ -910,7 +911,7 @@
910911
varying vec3 v_surfaceToView;
911912
void main() {
912913
v_texCoord = texCoord;
913-
v_position = (worldViewProjection * position);
914+
v_position = (viewProjection * world * position);
914915
v_normal = (worldInverseTranspose * vec4(normal, 0)).xyz;
915916
v_surfaceToLight = lightWorldPos - (world * position).xyz;
916917
v_surfaceToView = (viewInverse[3] - (world * position)).xyz;

0 commit comments

Comments
 (0)