rs_matrix.spec revision 6386ceb3bf25e442513224aaa45691dfe49562d9
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
49be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet# TODO Why always_inline?
50be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletattrib: always_inline
51be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletret: void
526386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: const rs_matrix4x4* viewProj, "Matrix to extract planes from."
536386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float4* left, "Left plane."
546386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float4* right, "Right plane."
556386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float4* top, "Top plane."
566386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float4* bottom, "Bottom plane."
576386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float4* near, "Near plane."
586386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float4* far, "Far plane."
5920b27d602a4778ed50a83df2147416a35b7c92beJean-Luc Brouilletsummary: Compute frustum planes
60be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletdescription:
61be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet Computes 6 frustum planes from the view projection matrix
62be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletinline:
63be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet // x y z w = a b c d in the plane equation
64be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet left->x = viewProj->m[3] + viewProj->m[0];
65be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet left->y = viewProj->m[7] + viewProj->m[4];
66be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet left->z = viewProj->m[11] + viewProj->m[8];
67be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet left->w = viewProj->m[15] + viewProj->m[12];
68be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
69be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet right->x = viewProj->m[3] - viewProj->m[0];
70be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet right->y = viewProj->m[7] - viewProj->m[4];
71be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet right->z = viewProj->m[11] - viewProj->m[8];
72be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet right->w = viewProj->m[15] - viewProj->m[12];
73be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
74be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet top->x = viewProj->m[3] - viewProj->m[1];
75be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet top->y = viewProj->m[7] - viewProj->m[5];
76be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet top->z = viewProj->m[11] - viewProj->m[9];
77be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet top->w = viewProj->m[15] - viewProj->m[13];
78be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
79be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet bottom->x = viewProj->m[3] + viewProj->m[1];
80be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet bottom->y = viewProj->m[7] + viewProj->m[5];
81be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet bottom->z = viewProj->m[11] + viewProj->m[9];
82be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet bottom->w = viewProj->m[15] + viewProj->m[13];
83be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
84be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet near->x = viewProj->m[3] + viewProj->m[2];
85be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet near->y = viewProj->m[7] + viewProj->m[6];
86be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet near->z = viewProj->m[11] + viewProj->m[10];
87be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet near->w = viewProj->m[15] + viewProj->m[14];
88be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
89be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet far->x = viewProj->m[3] - viewProj->m[2];
90be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet far->y = viewProj->m[7] - viewProj->m[6];
91be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet far->z = viewProj->m[11] - viewProj->m[10];
92be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet far->w = viewProj->m[15] - viewProj->m[14];
93be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
94be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet float len = length(left->xyz);
95be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *left /= len;
96be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet len = length(right->xyz);
97be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *right /= len;
98be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet len = length(top->xyz);
99be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *top /= len;
100be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet len = length(bottom->xyz);
101be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *bottom /= len;
102be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet len = length(near->xyz);
103be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *near /= len;
104be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet len = length(far->xyz);
105be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *far /= len;
106be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillettest: none
107be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletend:
108be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
109be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletfunction: rsIsSphereInFrustum
110be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletattrib: always_inline
111be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletret: bool
1126386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float4* sphere, "float4 representing the sphere."
1136386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float4* left, "Left plane."
1146386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float4* right, "Right plane."
1156386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float4* top, "Top plane."
1166386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float4* bottom, "Bottom plane."
1176386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float4* near, "Near plane."
1186386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float4* far, "Far plane."
11920b27d602a4778ed50a83df2147416a35b7c92beJean-Luc Brouilletsummary: Checks if a sphere is within the frustum planes
120be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletdescription:
12120b27d602a4778ed50a83df2147416a35b7c92beJean-Luc Brouillet Returns true if the sphere is within the 6 frustum planes.
122be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletinline:
123be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet float distToCenter = dot(left->xyz, sphere->xyz) + left->w;
124be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet if (distToCenter < -sphere->w) {
125be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet     return false;
126be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet }
127be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet distToCenter = dot(right->xyz, sphere->xyz) + right->w;
128be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet if (distToCenter < -sphere->w) {
129be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet     return false;
130be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet }
131be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet distToCenter = dot(top->xyz, sphere->xyz) + top->w;
132be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet if (distToCenter < -sphere->w) {
133be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet     return false;
134be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet }
135be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet distToCenter = dot(bottom->xyz, sphere->xyz) + bottom->w;
136be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet if (distToCenter < -sphere->w) {
137be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet     return false;
138be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet }
139be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet distToCenter = dot(near->xyz, sphere->xyz) + near->w;
140be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet if (distToCenter < -sphere->w) {
141be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet     return false;
142be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet }
143be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet distToCenter = dot(far->xyz, sphere->xyz) + far->w;
144be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet if (distToCenter < -sphere->w) {
145be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet     return false;
146be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet }
147be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet return true;
148be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillettest: none
149c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
150c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
151c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixGet
152c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillett: rs_matrix4x4, rs_matrix3x3, rs_matrix2x2
153c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float
1546386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: const #1* m, "Matrix to extract the element from."
1556386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: uint32_t col, "Zero-based column of the element to be extracted."
1566386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: uint32_t row, "Zero-based row of the element to extracted."
157c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Get one element
158c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
159c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Returns one element of a matrix.
160c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
161c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet <b>Warning:</b> The order of the column and row parameters may be unexpected.
162c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
163c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
164c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
165c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixInverse
166c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: bool
1676386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: rs_matrix4x4* m, "Matrix to invert."
168c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Inverts a matrix in place
169c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
170c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Returns true if the matrix was successfully inverted.
171c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
172c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
173c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
174c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixInverseTranspose
175c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: bool
1766386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: rs_matrix4x4* m, "Matrix to modify."
177c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Inverts and transpose a matrix in place
178c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
1796386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet The matrix is first inverted then transposed. Returns true if the matrix was
1806386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet successfully inverted.
181c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
182c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
183c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
184c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixLoad
185c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillett: rs_matrix4x4, rs_matrix3x3, rs_matrix2x2
186c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
1876386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: #1* destination, "Matrix to set."
1886386ceb3bf25e442513224aaa45691dfe49562d9Jean-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."
189c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Load or copy a matrix
190c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
191c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Set the elements of a matrix from an array of floats or from another matrix.
192c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
193c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet If loading from an array, the floats should be in row-major order, i.e. the element a
194c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet <code>row 0, column 0</code> should be first, followed by the element at
195c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet <code>row 0, column 1</code>, etc.
196c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
1976386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet If loading from a matrix and the source is smaller than the destination, the rest
1986386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet of the destination is filled with elements of the identity matrix.  E.g.
199c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet loading a rs_matrix2x2 into a rs_matrix4x4 will give:
200c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet <table style="max-width:300px">
201c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet <tr><td>m00</td> <td>m01</td> <td>0.0</td> <td>0.0</td></tr>
202c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet <tr><td>m10</td> <td>m11</td> <td>0.0</td> <td>0.0</td></tr>
203c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet <tr><td>0.0</td> <td>0.0</td> <td>1.0</td> <td>0.0</td></tr>
204c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet <tr><td>0.0</td> <td>0.0</td> <td>0.0</td> <td>1.0</td></tr>
205c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet </table>
206c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
207c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
208c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
209c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixLoad
210c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillett: rs_matrix4x4, rs_matrix3x3, rs_matrix2x2
211c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
212c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: #1* destination
2136386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: const #1* source, "Source matrix."
214c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
215c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
216c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
217c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixLoad
218c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillett: rs_matrix3x3, rs_matrix2x2
219c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
220c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix4x4* destination
221c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: const #1* source
222c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
223c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
224c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
225c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixLoadFrustum
226c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
2276386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: rs_matrix4x4* m, "Matrix to set."
228c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float left
229c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float right
230c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float bottom
231c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float top
232c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float near
233c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float far
234c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Load a frustum projection matrix
235c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
2366386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet Constructs a frustum projection matrix, transforming the box identified by
2376386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet the six clipping planes <code>left, right, bottom, top, near, far</code>.
238c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
2396386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet To apply this projection to a vector, multiply the vector by the created
2406386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet matrix using @rsMatrixMultiply().
241c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
242c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
243c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
244c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixLoadIdentity
245c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillett: rs_matrix4x4, rs_matrix3x3, rs_matrix2x2
246c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
2476386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: #1* m, "Matrix to set."
248c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Load identity matrix
249c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
250c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Set the elements of a matrix to the identity matrix.
251c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
252c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
253c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
254c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixLoadMultiply
255c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillett: rs_matrix4x4, rs_matrix3x3, rs_matrix2x2
256c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
2576386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: #1* m, "Matrix to set."
2586386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: const #1* lhs, "Left matrix of the product."
2596386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: const #1* rhs, "Right matrix of the product."
260c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Multiply two matrices
261c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
262c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Sets m to the matrix product of <code>lhs * rhs</code>.
263c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
264c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet To combine two 4x4 transformaton matrices, multiply the second transformation matrix
265c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet by the first transformation matrix.  E.g. to create a transformation matrix that applies
2666386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet the transformation s1 followed by s2, call <code>rsMatrixLoadMultiply(&amp;combined, &amp;s2, &amp;s1)</code>.
267c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
268c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet <b>Warning:</b> Prior to version 21, storing the result back into right matrix is not supported and
269c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet will result in undefined behavior.  Use rsMatrixMulitply instead.   E.g. instead of doing
2706386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet rsMatrixLoadMultiply (&amp;m2r, &amp;m2r, &amp;m2l), use rsMatrixMultiply (&amp;m2r, &amp;m2l).
2716386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet rsMatrixLoadMultiply (&amp;m2l, &amp;m2r, &amp;m2l) works as expected.
272c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
273c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
274c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
275c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixLoadOrtho
276c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
2776386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: rs_matrix4x4* m, "Matrix to set."
278c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float left
279c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float right
280c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float bottom
281c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float top
282c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float near
283c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float far
284c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Load an orthographic projection matrix
285c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
2866386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet Constructs an orthographic projection matrix, transforming the box identified by the
2876386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet six clipping planes <code>left, right, bottom, top, near, far</code> into a unit cube
2886386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet with a corner at <code>(-1, -1, -1)</code> and the opposite at <code>(1, 1, 1)</code>.
289c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
2906386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet To apply this projection to a vector, multiply the vector by the created matrix
2916386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet using @rsMatrixMultiply().
292c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
293c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet See https://en.wikipedia.org/wiki/Orthographic_projection .
294c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
295c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
296c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
297c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixLoadPerspective
298c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
2996386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: rs_matrix4x4* m, "Matrix to set."
300c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float fovy, "Field of view, in degrees along the Y axis."
301c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float aspect, "Ratio of x / y."
3026386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float near, "Near clipping plane."
3036386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float far, "Far clipping plane."
304c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Load a perspective projection matrix
305c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
306c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Constructs a perspective projection matrix, assuming a symmetrical field of view.
307c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
3086386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet To apply this projection to a vector, multiply the vector by the created matrix
3096386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet using @rsMatrixMultiply().
310c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
311c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
312c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
313c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixLoadRotate
314c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
3156386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: rs_matrix4x4* m, "Matrix to set."
316c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float rot, "How much rotation to do, in degrees."
3176386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float x, "X component of the vector that is the axis of rotation."
3186386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float y, "Y component of the vector that is the axis of rotation."
3196386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float z, "Z component of the vector that is the axis of rotation."
320c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Load a rotation matrix
321c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
3226386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet This function creates a rotation matrix.  The axis of rotation is the <code>(x, y, z)</code> vector.
323c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
3246386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet To rotate a vector, multiply the vector by the created matrix using @rsMatrixMultiply().
325c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
326c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet See http://en.wikipedia.org/wiki/Rotation_matrix .
327c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
328c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
329c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
330c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixLoadScale
331c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
3326386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: rs_matrix4x4* m, "Matrix to set."
3336386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float x, "Multiple to scale the x components by."
3346386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float y, "Multiple to scale the y components by."
3356386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float z, "Multiple to scale the z components by."
336c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Load a scaling matrix
337c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
3386386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet This function creates a scaling matrix, where each component of a vector is multiplied
3396386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet by a number.  This number can be negative.
340c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
3416386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet To scale a vector, multiply the vector by the created matrix using @rsMatrixMultiply().
342c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
343c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
344c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
345c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixLoadTranslate
346c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
3476386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: rs_matrix4x4* m, "Matrix to set."
3486386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float x, "Number to add to each x component."
3496386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float y, "Number to add to each y component."
3506386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float z, "Number to add to each z component."
351c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Load a translation matrix
352c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
3536386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet This function creates a translation matrix, where a number is added to each element of
3546386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet a vector.
355c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
3566386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet To translate a vector, multiply the vector by the created matrix using
3576386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet @rsMatrixMultiply().
358c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
359c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
360c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
361c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
362c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillett: rs_matrix4x4, rs_matrix3x3, rs_matrix2x2
363c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
3646386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: #1* m, "Left matrix of the product and the matrix to be set."
3656386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: const #1* rhs, "Right matrix of the product."
366c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Multiply a matrix by a vector or another matrix
367c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
368c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet For the matrix by matrix variant, sets m to the matrix product <code>m * rhs</code>.
369c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
370c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet When combining two 4x4 transformation matrices using this function, the resulting
371c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet matrix will correspond to performing the rhs transformation first followed by
372c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet the original m transformation.
373c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
374c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet For the matrix by vector variant, returns the post-multiplication of the vector
375c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet by the matrix, ie. <code>m * in</code>.
376c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
377c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet When multiplying a float3 to a @rs_matrix4x4, the vector is expanded with (1).
378c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
379c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet When multiplying a float2 to a @rs_matrix4x4, the vector is expanded with (0, 1).
380c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
381c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet When multiplying a float2 to a @rs_matrix3x3, the vector is expanded with (0).
382c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
383c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Starting with API 14, this function takes a const matrix as the first argument.
384c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
385c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
386c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
387c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
388c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 9 13
389c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float4
390c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix4x4* m
391c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float4 in
392c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
393c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
394c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
395c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
396c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 9 13
397c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float4
398c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix4x4* m
399c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float3 in
400c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
401c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
402c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
403c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
404c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 9 13
405c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float4
406c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix4x4* m
407c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float2 in
408c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
409c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
410c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
411c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
412c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 9 13
413c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float3
414c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix3x3* m
415c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float3 in
416c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
417c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
418c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
419c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
420c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 9 13
421c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float3
422c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix3x3* m
423c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float2 in
424c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
425c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
426c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
427c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
428c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 9 13
429c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float2
430c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix2x2* m
431c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float2 in
432c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
433c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
434c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
435c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
436c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 14
437c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float4
438c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: const rs_matrix4x4* m
439c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float4 in
440c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
441c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
442c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
443c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
444c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 14
445c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float4
446c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: const rs_matrix4x4* m
447c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float3 in
448c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
449c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
450c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
451c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
452c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 14
453c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float4
454c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: const rs_matrix4x4* m
455c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float2 in
456c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
457c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
458c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
459c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
460c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 14
461c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float3
462c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: const rs_matrix3x3* m
463c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float3 in
464c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
465c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
466c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
467c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
468c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 14
469c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float3
470c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: const rs_matrix3x3* m
471c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float2 in
472c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
473c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
474c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
475c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
476c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 14
477c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float2
478c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: const rs_matrix2x2* m
479c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float2 in
480c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
481c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
482c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
483c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixRotate
484c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
4856386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: rs_matrix4x4* m, "Matrix to modify."
486c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float rot, "How much rotation to do, in degrees."
4876386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float x, "X component of the vector that is the axis of rotation."
4886386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float y, "Y component of the vector that is the axis of rotation."
4896386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float z, "Z component of the vector that is the axis of rotation."
490c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Apply a rotation to a transformation matrix
491c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
492c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Multiply the matrix m with a rotation matrix.
493c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
4946386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet This function modifies a transformation matrix to first do a rotation.  The axis of
4956386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet rotation is the <code>(x, y, z)</code> vector.
496c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
4976386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet To apply this combined transformation to a vector, multiply the vector by the created
4986386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet matrix using @rsMatrixMultiply().
499c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
500c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
501c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
502c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixScale
503c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
5046386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: rs_matrix4x4* m, "Matrix to modify."
5056386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float x, "Multiple to scale the x components by."
5066386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float y, "Multiple to scale the y components by."
5076386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float z, "Multiple to scale the z components by."
508c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Apply a scaling to a transformation matrix
509c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
510c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Multiply the matrix m with a scaling matrix.
511c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
5126386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet This function modifies a transformation matrix to first do a scaling.   When scaling,
5136386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet each component of a vector is multiplied by a number.  This number can be negative.
514c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
5156386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet To apply this combined transformation to a vector, multiply the vector by the created
5166386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet matrix using @rsMatrixMultiply().
517c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
518c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
519c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
520c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixSet
521c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillett: rs_matrix4x4, rs_matrix3x3, rs_matrix2x2
522c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
5236386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: #1* m, "Matrix that will be modified."
5246386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: uint32_t col, "Zero-based column of the element to be set."
5256386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: uint32_t row, "Zero-based row of the element to be set."
5266386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float v, "Value to set."
527c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Set one element
528c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
529c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Set an element of a matrix.
530c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
531c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet <b>Warning:</b> The order of the column and row parameters may be unexpected.
532c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
533c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
534c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
535c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixTranslate
536c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
5376386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: rs_matrix4x4* m, "Matrix to modify."
5386386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float x, "Number to add to each x component."
5396386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float y, "Number to add to each y component."
5406386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: float z, "Number to add to each z component."
541c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Apply a translation to a transformation matrix
542c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
543c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Multiply the matrix m with a translation matrix.
544c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
5456386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet This function modifies a transformation matrix to first do a translation.  When
5466386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet translating, a number is added to each component of a vector.
547c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
5486386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet To apply this combined transformation to a vector, multiply the vector by the
5496386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet created matrix using @rsMatrixMultiply().
550c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
551c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
552c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
553c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixTranspose
554c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillett: rs_matrix4x4*, rs_matrix3x3*, rs_matrix2x2*
555c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
5566386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouilletarg: #1 m, "Matrix to transpose."
557c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Transpose a matrix place
558c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
559c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Transpose the matrix m in place.
560c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
561c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
562