rs_matrix.spec revision 20b27d602a4778ed50a83df2147416a35b7c92be
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.
21c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet They are particularly useful for graphical transformations and are
22c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet compatible with OpenGL.
23c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
24c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet We use a zero-based index for rows and columns.  E.g. the last element of
25c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet a @rs_matrix4x4 is found at (3, 3).
26c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
27c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet RenderScript uses column-major matrices and column-based vectors.
28c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Transforming a vector is done by postmultiplying the vector,
29c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet e.g. <code>(matrix * vector)</code>, as provided by @rsMatrixMultiply().
30c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
31c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet To create a transformation matrix that performs two transformations at
32c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet once, multiply the two source matrices, with the first transformation as the
33c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet right argument.  E.g. to create a transformation matrix that applies the
34c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet transformation s1 followed by s2, call <code>rsMatrixLoadMultiply(&combined, &s2, &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:
38c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixLoad<i>Transformation</i> and rsMatrix<i>Transformation</i>.  The
39c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet former style simply stores the transformation matrix in the first argument.
40c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet The latter modifies a pre-existing transformation matrix so that the new
41c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet transformation happens first.  E.g. if you call @rsMatrixTranslate()
42c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet on a matrix that already does a scaling, the resulting matrix when applied
43c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet to a vector will first do the 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
52be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletarg: const rs_matrix4x4* viewProj, "matrix to extract planes from"
53be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletarg: float4* left, "left plane"
54be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletarg: float4* right, "right plane"
55be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletarg: float4* top, "top plane"
56be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletarg: float4* bottom, "bottom plane"
57be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletarg: float4* near, "near plane"
58be2163801c33d6849ae580d42b919b8803d55095Jean-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
112be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletarg: float4* sphere, "float4 representing the sphere"
113be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletarg: float4* left, "left plane"
114be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletarg: float4* right, "right plane"
115be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletarg: float4* top, "top plane"
116be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletarg: float4* bottom, "bottom plane"
117be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletarg: float4* near, "near plane"
118be2163801c33d6849ae580d42b919b8803d55095Jean-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
154c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: const #1* m, "The matrix to extract the element from."
155c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: uint32_t col, "The zero-based column of the element to be extracted."
156c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: uint32_t row, "The 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
167c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix4x4* m, "The 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
176c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix4x4* m, "The matrix to modify."
177c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Inverts and transpose a matrix in place
178c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
179c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet The matrix is first inverted then transposed.
180c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Returns true if the matrix was 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
187c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: #1* destination, "The matrix to set."
188c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: const float* array, "The 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
197c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet If loading from a matrix and the source is smaller than the destination, the rest of the
198c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet 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
213c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: const #1* source, "The 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
227c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix4x4* m, "The 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:
236c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Constructs a frustum projection matrix, transforming the box
237c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet identified by the six clipping planes <code>left, right, bottom, top,
238c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet near, far</code>.
239c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
240c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet To apply this projection to a vector, multiply the vector by the
241c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet created matrix using @rsMatrixMultiply().
242c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
243c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
244c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
245c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixLoadIdentity
246c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillett: rs_matrix4x4, rs_matrix3x3, rs_matrix2x2
247c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
248c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: #1* m, "The matrix to set."
249c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Load identity matrix
250c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
251c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Set the elements of a matrix to the identity matrix.
252c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
253c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
254c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
255c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixLoadMultiply
256c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillett: rs_matrix4x4, rs_matrix3x3, rs_matrix2x2
257c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
258c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: #1* m, "The matrix to set."
259c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: const #1* lhs, "The left matrix of the product."
260c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: const #1* rhs, "The right matrix of the product."
261c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Multiply two matrices
262c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
263c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Sets m to the matrix product of <code>lhs * rhs</code>.
264c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
265c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet To combine two 4x4 transformaton matrices, multiply the second transformation matrix
266c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet by the first transformation matrix.  E.g. to create a transformation matrix that applies
267c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet the transformation s1 followed by s2, call
268c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet <code>rsMatrixLoadMultiply(&combined, &s2, &s1)</code>.
269c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
270c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet <b>Warning:</b> Prior to version 21, storing the result back into right matrix is not supported and
271c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet will result in undefined behavior.  Use rsMatrixMulitply instead.   E.g. instead of doing
272c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixLoadMultiply (&m2r, &m2r, &m2l), use rsMatrixMultiply (&m2r, &m2l).
273c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixLoadMultiply (&m2l, &m2r, &m2l) works as expected.
274c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
275c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
276c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
277c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixLoadOrtho
278c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
279c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix4x4* m, "The matrix to set."
280c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float left
281c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float right
282c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float bottom
283c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float top
284c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float near
285c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float far
286c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Load an orthographic projection matrix
287c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
288c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Constructs an orthographic projection matrix, transforming the box
289c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet identified by the six clipping planes <code>left, right, bottom, top,
290c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet near, far</code> into a unit cube with a corner at
291c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet <code>(-1, -1, -1)</code> and the opposite at <code>(1, 1, 1)</code>.
292c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
293c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet To apply this projection to a vector, multiply the vector by the
294c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet created matrix using @rsMatrixMultiply().
295c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
296c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet See https://en.wikipedia.org/wiki/Orthographic_projection .
297c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
298c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
299c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
300c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixLoadPerspective
301c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
302c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix4x4* m, "The matrix to set."
303c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float fovy, "Field of view, in degrees along the Y axis."
304c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float aspect, "Ratio of x / y."
305c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float near, "The near clipping plane."
306c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float far, "The far clipping plane."
307c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Load a perspective projection matrix
308c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
309c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Constructs a perspective projection matrix, assuming a symmetrical field of view.
310c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
311c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet To apply this projection to a vector, multiply the vector by the
312c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet created matrix using @rsMatrixMultiply().
313c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
314c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
315c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
316c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixLoadRotate
317c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
318c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix4x4* m, "The matrix to set."
319c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float rot, "How much rotation to do, in degrees."
320c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float x, "The x component of the vector that is the axis of rotation."
321c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float y, "The y component of the vector that is the axis of rotation."
322c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float z, "The z component of the vector that is the axis of rotation."
323c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Load a rotation matrix
324c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
325c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet This function creates a rotation matrix.  The axis of rotation is the
326c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet <code>(x, y, z)</code> vector.
327c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
328c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet To rotate a vector, multiply the vector by the created matrix
329c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet using @rsMatrixMultiply().
330c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
331c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet See http://en.wikipedia.org/wiki/Rotation_matrix .
332c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
333c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
334c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
335c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixLoadScale
336c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
337c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix4x4* m, "The matrix to set."
338c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float x, "The multiple to scale the x components by."
339c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float y, "The multiple to scale the y components by."
340c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float z, "The multiple to scale the z components by."
341c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Load a scaling matrix
342c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
343c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet This function creates a scaling matrix, where each component of a
344c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet vector is multiplied by a number.  This number can be negative.
345c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
346c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet To scale a vector, multiply the vector by the created matrix
347c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet using @rsMatrixMultiply().
348c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
349c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
350c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
351c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixLoadTranslate
352c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
353c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix4x4* m, "The matrix to set."
354c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float x, "The number to add to each x component."
355c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float y, "The number to add to each y component."
356c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float z, "The number to add to each z component."
357c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Load a translation matrix
358c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
359c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet This function creates a translation matrix, where a
360c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet number is added to each element of a vector.
361c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
362c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet To translate a vector, multiply the vector by the created matrix
363c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet using @rsMatrixMultiply().
364c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
365c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
366c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
367c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
368c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillett: rs_matrix4x4, rs_matrix3x3, rs_matrix2x2
369c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
370c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: #1* m, "The left matrix of the product and the matrix to be set."
371c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: const #1* rhs, "The right matrix of the product."
372c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Multiply a matrix by a vector or another matrix
373c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
374c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet For the matrix by matrix variant, sets m to the matrix product <code>m * rhs</code>.
375c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
376c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet When combining two 4x4 transformation matrices using this function, the resulting
377c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet matrix will correspond to performing the rhs transformation first followed by
378c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet the original m transformation.
379c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
380c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet For the matrix by vector variant, returns the post-multiplication of the vector
381c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet by the matrix, ie. <code>m * in</code>.
382c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
383c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet When multiplying a float3 to a @rs_matrix4x4, the vector is expanded with (1).
384c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
385c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet When multiplying a float2 to a @rs_matrix4x4, the vector is expanded with (0, 1).
386c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
387c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet When multiplying a float2 to a @rs_matrix3x3, the vector is expanded with (0).
388c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
389c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Starting with API 14, this function takes a const matrix as the first argument.
390c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
391c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
392c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
393c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
394c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 9 13
395c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float4
396c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix4x4* m
397c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float4 in
398c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
399c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
400c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
401c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
402c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 9 13
403c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float4
404c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix4x4* m
405c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float3 in
406c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
407c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
408c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
409c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
410c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 9 13
411c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float4
412c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix4x4* m
413c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float2 in
414c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
415c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
416c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
417c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
418c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 9 13
419c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float3
420c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix3x3* m
421c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float3 in
422c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
423c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
424c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
425c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
426c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 9 13
427c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float3
428c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix3x3* m
429c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float2 in
430c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
431c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
432c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
433c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
434c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 9 13
435c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float2
436c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix2x2* m
437c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float2 in
438c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
439c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
440c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
441c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
442c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 14
443c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float4
444c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: const rs_matrix4x4* m
445c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float4 in
446c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
447c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
448c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
449c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
450c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 14
451c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float4
452c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: const rs_matrix4x4* m
453c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float3 in
454c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
455c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
456c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
457c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
458c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 14
459c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float4
460c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: const rs_matrix4x4* m
461c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float2 in
462c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
463c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
464c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
465c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
466c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 14
467c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float3
468c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: const rs_matrix3x3* m
469c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float3 in
470c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
471c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
472c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
473c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
474c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 14
475c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float3
476c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: const rs_matrix3x3* m
477c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float2 in
478c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
479c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
480c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
481c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixMultiply
482c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletversion: 14
483c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: float2
484c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: const rs_matrix2x2* m
485c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float2 in
486c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
487c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
488c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
489c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixRotate
490c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
491c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix4x4* m, "The matrix to modify."
492c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float rot, "How much rotation to do, in degrees."
493c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float x, "The x component of the vector that is the axis of rotation."
494c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float y, "The y component of the vector that is the axis of rotation."
495c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float z, "The z component of the vector that is the axis of rotation."
496c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Apply a rotation to a transformation matrix
497c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
498c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Multiply the matrix m with a rotation matrix.
499c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
500c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet This function modifies a transformation matrix to first do a rotation.
501c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet The axis of rotation is the <code>(x, y, z)</code> vector.
502c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
503c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet To apply this combined transformation to a vector, multiply
504c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet the vector by the created matrix using @rsMatrixMultiply().
505c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
506c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
507c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
508c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixScale
509c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
510c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix4x4* m, "The matrix to modify."
511c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float x, "The multiple to scale the x components by."
512c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float y, "The multiple to scale the y components by."
513c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float z, "The multiple to scale the z components by."
514c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Apply a scaling to a transformation matrix
515c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
516c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Multiply the matrix m with a scaling matrix.
517c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
518c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet This function modifies a transformation matrix to first do a scaling.
519c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet When scaling, each component of a vector is multiplied by a number.
520c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet This number can be negative.
521c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
522c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet To apply this combined transformation to a vector, multiply
523c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet the vector by the created matrix using @rsMatrixMultiply().
524c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
525c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
526c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
527c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixSet
528c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillett: rs_matrix4x4, rs_matrix3x3, rs_matrix2x2
529c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
530c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: #1* m, "The matrix that will be modified."
531c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: uint32_t col, "The zero-based column of the element to be set."
532c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: uint32_t row, "The zero-based row of the element to be set."
533c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float v, "The value to set."
534c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Set one element
535c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
536c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Set an element of a matrix.
537c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
538c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet <b>Warning:</b> The order of the column and row parameters may be unexpected.
539c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
540c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
541c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
542c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixTranslate
543c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
544c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: rs_matrix4x4* m, "The matrix to modify."
545c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float x, "The number to add to each x component."
546c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float y, "The number to add to each y component."
547c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: float z, "The number to add to each z component."
548c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Apply a translation to a transformation matrix
549c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
550c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Multiply the matrix m with a translation matrix.
551c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
552c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet This function modifies a transformation matrix to first
553c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet do a translation.  When translating, a number is added
554c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet to each component of a vector.
555c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
556c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet To apply this combined transformation to a vector, multiply
557c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet the vector by the created matrix using @rsMatrixMultiply().
558c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
559c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
560c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet
561c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletfunction: rsMatrixTranspose
562c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillett: rs_matrix4x4*, rs_matrix3x3*, rs_matrix2x2*
563c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletret: void
564c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletarg: #1 m, "The matrix to transpose."
565c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletsummary: Transpose a matrix place
566c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletdescription:
567c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet Transpose the matrix m in place.
568c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillettest: none
569c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletend:
570