1c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#
2c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet# Copyright (C) 2015 The Android Open Source Project
3c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#
4c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet# Licensed under the Apache License, Version 2.0 (the "License");
5c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet# you may not use this file except in compliance with the License.
6c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet# You may obtain a copy of the License at
7c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#
8c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#      http://www.apache.org/licenses/LICENSE-2.0
9c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#
10c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet# Unless required by applicable law or agreed to in writing, software
11c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet# distributed under the License is distributed on an "AS IS" BASIS,
12c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet# See the License for the specific language governing permissions and
14c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet# limitations under the License.
15c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#
16c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
17c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletheader:
1820b27d602a4778ed50a83df2147416a35b7c92beJean-Luc Brouilletsummary: Matrix Functions
19c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
20c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet These functions let you manipulate square matrices of rank 2x2, 3x3, and 4x4.
216386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet They are particularly useful for graphical transformations and are compatible
226386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet with OpenGL.
23c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
246386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet We use a zero-based index for rows and columns.  E.g. the last element of a
256386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet @rs_matrix4x4 is found at (3, 3).
26c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
276386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet RenderScript uses column-major matrices and column-based vectors.  Transforming
286386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet a vector is done by postmultiplying the vector, e.g. <code>(matrix * vector)</code>,
296386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet as provided by @rsMatrixMultiply().
30c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
316386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet To create a transformation matrix that performs two transformations at once,
326386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet multiply the two source matrices, with the first transformation as the right
336386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet argument.  E.g. to create a transformation matrix that applies the
346386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet transformation s1 followed by s2, call <code>rsMatrixLoadMultiply(&amp;combined, &amp;s2, &amp;s1)</code>.
35c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet This derives from <code>s2 * (s1 * v)</code>, which is <code>(s2 * s1) * v</code>.
36c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
37c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet We have two style of functions to create transformation matrices:
386386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet rsMatrixLoad<i>Transformation</i> and rsMatrix<i>Transformation</i>.  The former
396386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet style simply stores the transformation matrix in the first argument.  The latter
406386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet modifies a pre-existing transformation matrix so that the new transformation
416386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet happens first.  E.g. if you call @rsMatrixTranslate() on a matrix that already
426386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet does a scaling, the resulting matrix when applied to a vector will first do the
436386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet translation then the scaling.
44be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletinclude:
45be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet #include "rs_vector_math.rsh"
46be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletend:
47be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
48be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletfunction: rsExtractFrustumPlanes
496e13ee21796fd86802f2688c6220544c99b68c40Verena Beckhamversion: 9 23
50be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletret: void
516386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: const rs_matrix4x4* viewProj, "Matrix to extract planes from."
526386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float4* left, "Left plane."
536386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float4* right, "Right plane."
546386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float4* top, "Top plane."
556386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float4* bottom, "Bottom plane."
566386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float4* near, "Near plane."
576386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float4* far, "Far plane."
5820b27d602a4778ed50a83df2147416a35b7c92beJean-Luc Brouilletsummary: Compute frustum planes
59be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletdescription:
60be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet Computes 6 frustum planes from the view projection matrix
61be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletinline:
62be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet // x y z w = a b c d in the plane equation
63be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet left->x = viewProj->m[3] + viewProj->m[0];
64be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet left->y = viewProj->m[7] + viewProj->m[4];
65be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet left->z = viewProj->m[11] + viewProj->m[8];
66be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet left->w = viewProj->m[15] + viewProj->m[12];
67be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
68be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet right->x = viewProj->m[3] - viewProj->m[0];
69be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet right->y = viewProj->m[7] - viewProj->m[4];
70be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet right->z = viewProj->m[11] - viewProj->m[8];
71be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet right->w = viewProj->m[15] - viewProj->m[12];
72be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
73be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet top->x = viewProj->m[3] - viewProj->m[1];
74be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet top->y = viewProj->m[7] - viewProj->m[5];
75be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet top->z = viewProj->m[11] - viewProj->m[9];
76be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet top->w = viewProj->m[15] - viewProj->m[13];
77be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
78be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet bottom->x = viewProj->m[3] + viewProj->m[1];
79be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet bottom->y = viewProj->m[7] + viewProj->m[5];
80be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet bottom->z = viewProj->m[11] + viewProj->m[9];
81be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet bottom->w = viewProj->m[15] + viewProj->m[13];
82be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
83be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet near->x = viewProj->m[3] + viewProj->m[2];
84be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet near->y = viewProj->m[7] + viewProj->m[6];
85be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet near->z = viewProj->m[11] + viewProj->m[10];
86be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet near->w = viewProj->m[15] + viewProj->m[14];
87be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
88be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet far->x = viewProj->m[3] - viewProj->m[2];
89be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet far->y = viewProj->m[7] - viewProj->m[6];
90be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet far->z = viewProj->m[11] - viewProj->m[10];
91be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet far->w = viewProj->m[15] - viewProj->m[14];
92be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
93be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet float len = length(left->xyz);
94be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *left /= len;
95be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet len = length(right->xyz);
96be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *right /= len;
97be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet len = length(top->xyz);
98be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *top /= len;
99be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet len = length(bottom->xyz);
100be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *bottom /= len;
101be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet len = length(near->xyz);
102be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *near /= len;
103be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet len = length(far->xyz);
104be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *far /= len;
105be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillettest: none
106be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletend:
107be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
1086e13ee21796fd86802f2688c6220544c99b68c40Verena Beckham# New version. Same signature but doesn't contain a body.
1096e13ee21796fd86802f2688c6220544c99b68c40Verena Beckhamfunction: rsExtractFrustumPlanes
1106e13ee21796fd86802f2688c6220544c99b68c40Verena Beckhamversion: 24
1116e13ee21796fd86802f2688c6220544c99b68c40Verena Beckhamret: void
1126e13ee21796fd86802f2688c6220544c99b68c40Verena Beckhamarg: const rs_matrix4x4* viewProj
1136e13ee21796fd86802f2688c6220544c99b68c40Verena Beckhamarg: float4* left
1146e13ee21796fd86802f2688c6220544c99b68c40Verena Beckhamarg: float4* righ
1156e13ee21796fd86802f2688c6220544c99b68c40Verena Beckhamarg: float4* top
1166e13ee21796fd86802f2688c6220544c99b68c40Verena Beckhamarg: float4* bottom
1176e13ee21796fd86802f2688c6220544c99b68c40Verena Beckhamarg: float4* near
1186e13ee21796fd86802f2688c6220544c99b68c40Verena Beckhamarg: float4* far
1196e13ee21796fd86802f2688c6220544c99b68c40Verena Beckhamtest: none
1206e13ee21796fd86802f2688c6220544c99b68c40Verena Beckhamend:
1216e13ee21796fd86802f2688c6220544c99b68c40Verena Beckham
122be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletfunction: rsIsSphereInFrustum
1236e13ee21796fd86802f2688c6220544c99b68c40Verena Beckhamversion: 9 23
1246e13ee21796fd86802f2688c6220544c99b68c40Verena Beckhamattrib: always_inline
125be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletret: bool
1266386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float4* sphere, "float4 representing the sphere."
1276386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float4* left, "Left plane."
1286386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float4* right, "Right plane."
1296386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float4* top, "Top plane."
1306386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float4* bottom, "Bottom plane."
1316386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float4* near, "Near plane."
1326386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float4* far, "Far plane."
13320b27d602a4778ed50a83df2147416a35b7c92beJean-Luc Brouilletsummary: Checks if a sphere is within the frustum planes
134be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletdescription:
13520b27d602a4778ed50a83df2147416a35b7c92beJean-Luc Brouillet Returns true if the sphere is within the 6 frustum planes.
136be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletinline:
137be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet float distToCenter = dot(left->xyz, sphere->xyz) + left->w;
138be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet if (distToCenter < -sphere->w) {
139be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet     return false;
140be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet }
141be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet distToCenter = dot(right->xyz, sphere->xyz) + right->w;
142be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet if (distToCenter < -sphere->w) {
143be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet     return false;
144be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet }
145be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet distToCenter = dot(top->xyz, sphere->xyz) + top->w;
146be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet if (distToCenter < -sphere->w) {
147be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet     return false;
148be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet }
149be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet distToCenter = dot(bottom->xyz, sphere->xyz) + bottom->w;
150be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet if (distToCenter < -sphere->w) {
151be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet     return false;
152be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet }
153be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet distToCenter = dot(near->xyz, sphere->xyz) + near->w;
154be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet if (distToCenter < -sphere->w) {
155be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet     return false;
156be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet }
157be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet distToCenter = dot(far->xyz, sphere->xyz) + far->w;
158be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet if (distToCenter < -sphere->w) {
159be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet     return false;
160be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet }
161be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet return true;
162be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillettest: none
163c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
164c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
1656e13ee21796fd86802f2688c6220544c99b68c40Verena Beckham# New version. Same signature but doesn't contain a body.
1666e13ee21796fd86802f2688c6220544c99b68c40Verena Beckhamfunction: rsIsSphereInFrustum
1676e13ee21796fd86802f2688c6220544c99b68c40Verena Beckhamversion: 24
1686e13ee21796fd86802f2688c6220544c99b68c40Verena Beckhamret: bool
1696e13ee21796fd86802f2688c6220544c99b68c40Verena Beckhamarg: float4* sphere
1706e13ee21796fd86802f2688c6220544c99b68c40Verena Beckhamarg: float4* left
1716e13ee21796fd86802f2688c6220544c99b68c40Verena Beckhamarg: float4* right
1726e13ee21796fd86802f2688c6220544c99b68c40Verena Beckhamarg: float4* top
1736e13ee21796fd86802f2688c6220544c99b68c40Verena Beckhamarg: float4* bottom
1746e13ee21796fd86802f2688c6220544c99b68c40Verena Beckhamarg: float4* near
1756e13ee21796fd86802f2688c6220544c99b68c40Verena Beckhamarg: float4* far
1766e13ee21796fd86802f2688c6220544c99b68c40Verena Beckhamtest: none
1776e13ee21796fd86802f2688c6220544c99b68c40Verena Beckhamend:
1786e13ee21796fd86802f2688c6220544c99b68c40Verena Beckham
179c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixGet
180c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillett: rs_matrix4x4, rs_matrix3x3, rs_matrix2x2
181c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float
1826386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: const #1* m, "Matrix to extract the element from."
1836386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: uint32_t col, "Zero-based column of the element to be extracted."
1846386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: uint32_t row, "Zero-based row of the element to extracted."
185c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Get one element
186c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
187c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Returns one element of a matrix.
188c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
189c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet <b>Warning:</b> The order of the column and row parameters may be unexpected.
190c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
191c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
192c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
193c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixInverse
194c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: bool
1956386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: rs_matrix4x4* m, "Matrix to invert."
196c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Inverts a matrix in place
197c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
198c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Returns true if the matrix was successfully inverted.
199c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
200c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
201c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
202c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixInverseTranspose
203c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: bool
2046386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: rs_matrix4x4* m, "Matrix to modify."
205c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Inverts and transpose a matrix in place
206c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
2076386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet The matrix is first inverted then transposed. Returns true if the matrix was
2086386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet successfully inverted.
209c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
210c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
211c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
212c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixLoad
213c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillett: rs_matrix4x4, rs_matrix3x3, rs_matrix2x2
214c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
2156386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: #1* destination, "Matrix to set."
2166386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: const float* array, "Array of values to set the matrix to. These arrays should be 4, 9, or 16 floats long, depending on the matrix size."
217c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Load or copy a matrix
218c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
219c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Set the elements of a matrix from an array of floats or from another matrix.
220c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
221c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet If loading from an array, the floats should be in row-major order, i.e. the element a
222c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet <code>row 0, column 0</code> should be first, followed by the element at
223c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet <code>row 0, column 1</code>, etc.
224c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
2256386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet If loading from a matrix and the source is smaller than the destination, the rest
2266386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet of the destination is filled with elements of the identity matrix.  E.g.
227c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet loading a rs_matrix2x2 into a rs_matrix4x4 will give:
228c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet <table style="max-width:300px">
229c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet <tr><td>m00</td> <td>m01</td> <td>0.0</td> <td>0.0</td></tr>
230c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet <tr><td>m10</td> <td>m11</td> <td>0.0</td> <td>0.0</td></tr>
231c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet <tr><td>0.0</td> <td>0.0</td> <td>1.0</td> <td>0.0</td></tr>
232c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet <tr><td>0.0</td> <td>0.0</td> <td>0.0</td> <td>1.0</td></tr>
233c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet </table>
234c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
235c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
236c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
237c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixLoad
238c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillett: rs_matrix4x4, rs_matrix3x3, rs_matrix2x2
239c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
240c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: #1* destination
2416386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: const #1* source, "Source matrix."
242c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
243c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
244c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
245c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixLoad
246c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillett: rs_matrix3x3, rs_matrix2x2
247c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
248c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix4x4* destination
249c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: const #1* source
250c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
251c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
252c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
253c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixLoadFrustum
254c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
2556386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: rs_matrix4x4* m, "Matrix to set."
256c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float left
257c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float right
258c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float bottom
259c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float top
260c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float near
261c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float far
262c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Load a frustum projection matrix
263c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
2646386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet Constructs a frustum projection matrix, transforming the box identified by
2656386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet the six clipping planes <code>left, right, bottom, top, near, far</code>.
266c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
2676386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet To apply this projection to a vector, multiply the vector by the created
2686386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet matrix using @rsMatrixMultiply().
269c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
270c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
271c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
272c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixLoadIdentity
273c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillett: rs_matrix4x4, rs_matrix3x3, rs_matrix2x2
274c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
2756386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: #1* m, "Matrix to set."
276c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Load identity matrix
277c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
278c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Set the elements of a matrix to the identity matrix.
279c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
280c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
281c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
282c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixLoadMultiply
283c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillett: rs_matrix4x4, rs_matrix3x3, rs_matrix2x2
284c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
2856386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: #1* m, "Matrix to set."
2866386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: const #1* lhs, "Left matrix of the product."
2876386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: const #1* rhs, "Right matrix of the product."
288c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Multiply two matrices
289c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
290c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Sets m to the matrix product of <code>lhs * rhs</code>.
291c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
292c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet To combine two 4x4 transformaton matrices, multiply the second transformation matrix
293c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet by the first transformation matrix.  E.g. to create a transformation matrix that applies
2946386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet the transformation s1 followed by s2, call <code>rsMatrixLoadMultiply(&amp;combined, &amp;s2, &amp;s1)</code>.
295c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
296c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet <b>Warning:</b> Prior to version 21, storing the result back into right matrix is not supported and
297c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet will result in undefined behavior.  Use rsMatrixMulitply instead.   E.g. instead of doing
2986386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet rsMatrixLoadMultiply (&amp;m2r, &amp;m2r, &amp;m2l), use rsMatrixMultiply (&amp;m2r, &amp;m2l).
2996386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet rsMatrixLoadMultiply (&amp;m2l, &amp;m2r, &amp;m2l) works as expected.
300c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
301c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
302c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
303c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixLoadOrtho
304c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
3056386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: rs_matrix4x4* m, "Matrix to set."
306c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float left
307c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float right
308c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float bottom
309c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float top
310c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float near
311c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float far
312c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Load an orthographic projection matrix
313c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
3146386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet Constructs an orthographic projection matrix, transforming the box identified by the
3156386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet six clipping planes <code>left, right, bottom, top, near, far</code> into a unit cube
3166386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet with a corner at <code>(-1, -1, -1)</code> and the opposite at <code>(1, 1, 1)</code>.
317c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
3186386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet To apply this projection to a vector, multiply the vector by the created matrix
3196386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet using @rsMatrixMultiply().
320c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
321c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet See https://en.wikipedia.org/wiki/Orthographic_projection .
322c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
323c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
324c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
325c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixLoadPerspective
326c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
3276386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: rs_matrix4x4* m, "Matrix to set."
328c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float fovy, "Field of view, in degrees along the Y axis."
329c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float aspect, "Ratio of x / y."
3306386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float near, "Near clipping plane."
3316386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float far, "Far clipping plane."
332c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Load a perspective projection matrix
333c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
334c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Constructs a perspective projection matrix, assuming a symmetrical field of view.
335c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
3366386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet To apply this projection to a vector, multiply the vector by the created matrix
3376386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet using @rsMatrixMultiply().
338c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
339c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
340c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
341c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixLoadRotate
342c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
3436386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: rs_matrix4x4* m, "Matrix to set."
344c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float rot, "How much rotation to do, in degrees."
3456386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float x, "X component of the vector that is the axis of rotation."
3466386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float y, "Y component of the vector that is the axis of rotation."
3476386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float z, "Z component of the vector that is the axis of rotation."
348c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Load a rotation matrix
349c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
3506386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet This function creates a rotation matrix.  The axis of rotation is the <code>(x, y, z)</code> vector.
351c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
3526386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet To rotate a vector, multiply the vector by the created matrix using @rsMatrixMultiply().
353c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
354c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet See http://en.wikipedia.org/wiki/Rotation_matrix .
355c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
356c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
357c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
358c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixLoadScale
359c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
3606386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: rs_matrix4x4* m, "Matrix to set."
3616386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float x, "Multiple to scale the x components by."
3626386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float y, "Multiple to scale the y components by."
3636386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float z, "Multiple to scale the z components by."
364c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Load a scaling matrix
365c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
3666386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet This function creates a scaling matrix, where each component of a vector is multiplied
3676386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet by a number.  This number can be negative.
368c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
3696386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet To scale a vector, multiply the vector by the created matrix using @rsMatrixMultiply().
370c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
371c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
372c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
373c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixLoadTranslate
374c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
3756386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: rs_matrix4x4* m, "Matrix to set."
3766386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float x, "Number to add to each x component."
3776386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float y, "Number to add to each y component."
3786386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float z, "Number to add to each z component."
379c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Load a translation matrix
380c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
3816386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet This function creates a translation matrix, where a number is added to each element of
3826386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet a vector.
383c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
3846386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet To translate a vector, multiply the vector by the created matrix using
3856386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet @rsMatrixMultiply().
386c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
387c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
388c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
389c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
390c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillett: rs_matrix4x4, rs_matrix3x3, rs_matrix2x2
391c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
3926386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: #1* m, "Left matrix of the product and the matrix to be set."
3936386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: const #1* rhs, "Right matrix of the product."
394c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Multiply a matrix by a vector or another matrix
395c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
396c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet For the matrix by matrix variant, sets m to the matrix product <code>m * rhs</code>.
397c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
398c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet When combining two 4x4 transformation matrices using this function, the resulting
399c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet matrix will correspond to performing the rhs transformation first followed by
400c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet the original m transformation.
401c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
402c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet For the matrix by vector variant, returns the post-multiplication of the vector
403c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet by the matrix, ie. <code>m * in</code>.
404c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
405c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet When multiplying a float3 to a @rs_matrix4x4, the vector is expanded with (1).
406c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
407c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet When multiplying a float2 to a @rs_matrix4x4, the vector is expanded with (0, 1).
408c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
409c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet When multiplying a float2 to a @rs_matrix3x3, the vector is expanded with (0).
410c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
411c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Starting with API 14, this function takes a const matrix as the first argument.
412c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
413c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
414c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
415c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
416c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 9 13
417c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float4
418c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix4x4* m
419c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float4 in
420c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
421c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
422c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
423c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
424c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 9 13
425c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float4
426c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix4x4* m
427c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float3 in
428c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
429c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
430c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
431c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
432c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 9 13
433c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float4
434c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix4x4* m
435c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float2 in
436c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
437c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
438c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
439c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
440c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 9 13
441c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float3
442c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix3x3* m
443c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float3 in
444c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
445c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
446c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
447c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
448c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 9 13
449c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float3
450c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix3x3* m
451c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float2 in
452c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
453c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
454c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
455c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
456c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 9 13
457c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float2
458c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix2x2* m
459c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float2 in
460c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
461c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
462c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
463c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
464c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 14
465c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float4
466c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: const rs_matrix4x4* m
467c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float4 in
468c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
469c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
470c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
471c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
472c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 14
473c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float4
474c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: const rs_matrix4x4* m
475c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float3 in
476c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
477c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
478c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
479c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
480c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 14
481c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float4
482c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: const rs_matrix4x4* m
483c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float2 in
484c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
485c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
486c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
487c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
488c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 14
489c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float3
490c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: const rs_matrix3x3* m
491c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float3 in
492c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
493c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
494c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
495c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
496c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 14
497c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float3
498c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: const rs_matrix3x3* m
499c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float2 in
500c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
501c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
502c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
503c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
504c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 14
505c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float2
506c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: const rs_matrix2x2* m
507c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float2 in
508c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
509c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
510c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
511c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixRotate
512c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
5136386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: rs_matrix4x4* m, "Matrix to modify."
514c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float rot, "How much rotation to do, in degrees."
5156386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float x, "X component of the vector that is the axis of rotation."
5166386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float y, "Y component of the vector that is the axis of rotation."
5176386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float z, "Z component of the vector that is the axis of rotation."
518c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Apply a rotation to a transformation matrix
519c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
520c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Multiply the matrix m with a rotation matrix.
521c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
5226386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet This function modifies a transformation matrix to first do a rotation.  The axis of
5236386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet rotation is the <code>(x, y, z)</code> vector.
524c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
5256386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet To apply this combined transformation to a vector, multiply the vector by the created
5266386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet matrix using @rsMatrixMultiply().
527c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
528c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
529c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
530c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixScale
531c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
5326386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: rs_matrix4x4* m, "Matrix to modify."
5336386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float x, "Multiple to scale the x components by."
5346386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float y, "Multiple to scale the y components by."
5356386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float z, "Multiple to scale the z components by."
536c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Apply a scaling to a transformation matrix
537c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
538c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Multiply the matrix m with a scaling matrix.
539c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
5406386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet This function modifies a transformation matrix to first do a scaling.   When scaling,
5416386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet each component of a vector is multiplied by a number.  This number can be negative.
542c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
5436386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet To apply this combined transformation to a vector, multiply the vector by the created
5446386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet matrix using @rsMatrixMultiply().
545c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
546c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
547c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
548c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixSet
549c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillett: rs_matrix4x4, rs_matrix3x3, rs_matrix2x2
550c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
5516386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: #1* m, "Matrix that will be modified."
5526386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: uint32_t col, "Zero-based column of the element to be set."
5536386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: uint32_t row, "Zero-based row of the element to be set."
5546386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float v, "Value to set."
555c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Set one element
556c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
557c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Set an element of a matrix.
558c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
559c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet <b>Warning:</b> The order of the column and row parameters may be unexpected.
560c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
561c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
562c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
563c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixTranslate
564c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
5656386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: rs_matrix4x4* m, "Matrix to modify."
5666386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float x, "Number to add to each x component."
5676386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float y, "Number to add to each y component."
5686386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float z, "Number to add to each z component."
569c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Apply a translation to a transformation matrix
570c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
571c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Multiply the matrix m with a translation matrix.
572c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
5736386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet This function modifies a transformation matrix to first do a translation.  When
5746386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet translating, a number is added to each component of a vector.
575c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
5766386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet To apply this combined transformation to a vector, multiply the vector by the
5776386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet created matrix using @rsMatrixMultiply().
578c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
579c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
580c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
581c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixTranspose
582c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillett: rs_matrix4x4*, rs_matrix3x3*, rs_matrix2x2*
583c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
5846386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: #1 m, "Matrix to transpose."
585c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Transpose a matrix place
586c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
587c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Transpose the matrix m in place.
588c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
589c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
590