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(&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: 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(&combined, &s2, &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 (&m2r, &m2r, &m2l), use rsMatrixMultiply (&m2r, &m2l). 2716386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet rsMatrixLoadMultiply (&m2l, &m2r, &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