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