@@ -69,6 +69,68 @@ void GetBoxNodeData(const in float i, inout vec4 boxNodeData0, inout vec4 boxNod
6969 boxNodeData1 = texelFetch(tAABB_DataTexture, uv1, 0 );
7070}
7171
72+ mat4 makeRotateX(float rot)
73+ {
74+ float s = sin (rot);
75+ float c = cos (rot);
76+ return mat4 (
77+ 1 , 0 , 0 , 0 ,
78+ 0 , c, - s, 0 ,
79+ 0 , s, c, 0 ,
80+ 0 , 0 , 0 , 1
81+ );
82+ }
83+ mat4 makeRotateY(float rot)
84+ {
85+ float s = sin (rot);
86+ float c = cos (rot);
87+ return mat4 (
88+ c, 0 , s, 0 ,
89+ 0 , 1 , 0 , 0 ,
90+ - s, 0 , c, 0 ,
91+ 0 , 0 , 0 , 1
92+ );
93+ }
94+ mat4 makeRotateZ(float rot)
95+ {
96+ float s = sin (rot);
97+ float c = cos (rot);
98+ return mat4 (
99+ c, - s, 0 , 0 ,
100+ s, c, 0 , 0 ,
101+ 0 , 0 , 1 , 0 ,
102+ 0 , 0 , 0 , 1
103+ );
104+ }
105+
106+ mat4 makeScaleX(float s)
107+ {
108+ return mat4 (
109+ s, 0 , 0 , 0 ,
110+ 0 , 1 , 0 , 0 ,
111+ 0 , 0 , 1 , 0 ,
112+ 0 , 0 , 0 , 1
113+ );
114+ }
115+ mat4 makeScaleY(float s)
116+ {
117+ return mat4 (
118+ 1 , 0 , 0 , 0 ,
119+ 0 , s, 0 , 0 ,
120+ 0 , 0 , 1 , 0 ,
121+ 0 , 0 , 0 , 1
122+ );
123+ }
124+ mat4 makeScaleZ(float s)
125+ {
126+ return mat4 (
127+ 1 , 0 , 0 , 0 ,
128+ 0 , 1 , 0 , 0 ,
129+ 0 , 0 , s, 0 ,
130+ 0 , 0 , 0 , 1
131+ );
132+ }
133+
72134
73135// ---------------------------------------------------------------------------------------
74136float SceneIntersect( )
@@ -196,7 +258,34 @@ float SceneIntersect( )
196258
197259 sd4 = texelFetch(tShape_DataTexture, uv4, 0 );
198260 if (uSceneIsDynamic)
199- invTransformMatrix[3 ][1 ] -= sin (uTime + currentBoxNodeData1.w) * 2.0 ;
261+ {
262+ // animate Translation
263+ invTransformMatrix[3 ][1 ] = - 1.0 + (sin (uTime + currentBoxNodeData1.w) * 1.5 );
264+
265+ // animate Rotation
266+ /* mat4 mx = makeRotateX(uTime + currentBoxNodeData1.w);
267+ mat4 my = makeRotateY(uTime + currentBoxNodeData1.w);
268+ invTransformMatrix = mx * my * invTransformMatrix; */
269+
270+ // animate Scaling
271+ /* mat4 m;
272+ float mod3 = floor(mod(currentBoxNodeData1.w, 3.0));
273+ if (mod3 == 0.0)
274+ {
275+ m = makeScaleX(10.0 - abs(sin(uTime + currentBoxNodeData1.w) * 9.5));
276+ }
277+ else if (mod3 == 1.0)
278+ {
279+ m = makeScaleY(10.0 - abs(sin(uTime + currentBoxNodeData1.w) * 9.5));
280+ }
281+ else //mod3 == 2.0
282+ {
283+ m = makeScaleZ(10.0 - abs(sin(uTime + currentBoxNodeData1.w) * 9.5));
284+ }
285+ invTransformMatrix = m * invTransformMatrix; */
286+
287+ }
288+
200289
201290 // transform ray into shape's object space
202291 rObjOrigin = vec3 ( invTransformMatrix * vec4 (rayOrigin, 1.0 ) );
0 commit comments