summaryrefslogtreecommitdiffstats
path: root/dev/MinGfx/docs/html/classmingfx_1_1_matrix4.html
diff options
context:
space:
mode:
authorMatt Strapp <matt@mattstrapp.net>2021-09-20 18:15:14 -0500
committerMatt Strapp <matt@mattstrapp.net>2021-09-20 18:15:14 -0500
commit342403a02f8063903d0f38327430721d4d0ae331 (patch)
tree29d020a27bc16939c568dd4b29166566d1c0e658 /dev/MinGfx/docs/html/classmingfx_1_1_matrix4.html
parentFix parenthesis (diff)
downloadcsci4611-342403a02f8063903d0f38327430721d4d0ae331.tar
csci4611-342403a02f8063903d0f38327430721d4d0ae331.tar.gz
csci4611-342403a02f8063903d0f38327430721d4d0ae331.tar.bz2
csci4611-342403a02f8063903d0f38327430721d4d0ae331.tar.lz
csci4611-342403a02f8063903d0f38327430721d4d0ae331.tar.xz
csci4611-342403a02f8063903d0f38327430721d4d0ae331.tar.zst
csci4611-342403a02f8063903d0f38327430721d4d0ae331.zip
Diffstat (limited to 'dev/MinGfx/docs/html/classmingfx_1_1_matrix4.html')
-rw-r--r--dev/MinGfx/docs/html/classmingfx_1_1_matrix4.html2480
1 files changed, 1240 insertions, 1240 deletions
diff --git a/dev/MinGfx/docs/html/classmingfx_1_1_matrix4.html b/dev/MinGfx/docs/html/classmingfx_1_1_matrix4.html
index f687d82..a5dd6fd 100644
--- a/dev/MinGfx/docs/html/classmingfx_1_1_matrix4.html
+++ b/dev/MinGfx/docs/html/classmingfx_1_1_matrix4.html
@@ -1,1240 +1,1240 @@
-<!-- HTML header for doxygen 1.8.9.1-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.9.1"/>
-<title>MinGfx Toolkit: mingfx::Matrix4 Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<script type="text/x-mathjax-config">
- MathJax.Hub.Config({
- extensions: ["tex2jax.js"],
- jax: ["input/TeX","output/HTML-CSS"],
-});
-</script>
-<script type="text/javascript" async="async" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="customdoxygen.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td style="padding-left: 0.5em;">
- <div id="projectname">MinGfx Toolkit
- &#160;<span id="projectnumber">1.0</span>
- </div>
- <div id="projectbrief">A minimal library for writing cross-platform (Windows, OSX, linux) graphics programs.</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.1 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="namespacemingfx.html">mingfx</a></li><li class="navelem"><a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
-<a href="classmingfx_1_1_matrix4-members.html">List of all members</a> </div>
- <div class="headertitle">
-<div class="title">mingfx::Matrix4 Class Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>A 4x4 transformation matrix stored internally as an array of floats in column-major order so as to be compatible with OpenGL. </p>
-<p>Examples: </p><div class="fragment"><div class="line"><span class="comment">// constructing various matrices:</span></div>
-<div class="line"><a class="code" href="classmingfx_1_1_matrix4.html#a50990f00b756d640670a0b02129afd22">Matrix4</a> T = <a class="code" href="classmingfx_1_1_matrix4.html#ae82bab81df82dc03f5eb11e74ba1dd84">Matrix4::Translation</a>(Vector3(1,0,0));</div>
-<div class="line"><a class="code" href="classmingfx_1_1_matrix4.html#a50990f00b756d640670a0b02129afd22">Matrix4</a> S = <a class="code" href="classmingfx_1_1_matrix4.html#a0232a58d20b1da5374cf8c72fb113a4e">Matrix4::Scale</a>(Vector3(2,2,2));</div>
-<div class="line"><a class="code" href="classmingfx_1_1_matrix4.html#a50990f00b756d640670a0b02129afd22">Matrix4</a> R = Matrix4::RotateX(GfxMath::toRadians(45.0));</div>
-<div class="line"> </div>
-<div class="line"><span class="comment">// compose matrices together by multiplication</span></div>
-<div class="line"><a class="code" href="classmingfx_1_1_matrix4.html#a50990f00b756d640670a0b02129afd22">Matrix4</a> M = T * R * S;</div>
-<div class="line"><a class="code" href="classmingfx_1_1_matrix4.html#a50990f00b756d640670a0b02129afd22">Matrix4</a> Minv = M.Inverse();</div>
-<div class="line"> </div>
-<div class="line"><span class="comment">// transforming points, vectors, etc.</span></div>
-<div class="line">Point3 p1(1,1,1);</div>
-<div class="line">Point3 p2 = M * p1;</div>
-<div class="line"> </div>
-<div class="line">Vector3 v1(1,1,1);</div>
-<div class="line">Vector3 v2 = M * v1;</div>
-<div class="line"> </div>
-<div class="line">Ray r1(p1, v1);</div>
-<div class="line">Ray r2 = M * r1;</div>
-<div class="ttc" id="aclassmingfx_1_1_matrix4_html_a0232a58d20b1da5374cf8c72fb113a4e"><div class="ttname"><a href="classmingfx_1_1_matrix4.html#a0232a58d20b1da5374cf8c72fb113a4e">mingfx::Matrix4::Scale</a></div><div class="ttdeci">static Matrix4 Scale(const Vector3 &amp;v)</div><div class="ttdoc">Returns the scale matrix described by the vector.</div></div>
-<div class="ttc" id="aclassmingfx_1_1_matrix4_html_a50990f00b756d640670a0b02129afd22"><div class="ttname"><a href="classmingfx_1_1_matrix4.html#a50990f00b756d640670a0b02129afd22">mingfx::Matrix4::Matrix4</a></div><div class="ttdeci">Matrix4()</div><div class="ttdoc">The default constructor creates an identity matrix:</div></div>
-<div class="ttc" id="aclassmingfx_1_1_matrix4_html_ae82bab81df82dc03f5eb11e74ba1dd84"><div class="ttname"><a href="classmingfx_1_1_matrix4.html#ae82bab81df82dc03f5eb11e74ba1dd84">mingfx::Matrix4::Translation</a></div><div class="ttdeci">static Matrix4 Translation(const Vector3 &amp;v)</div><div class="ttdoc">Returns the translation matrix described by the vector.</div></div>
-</div><!-- fragment -->
-<p class="definition">Definition at line <a class="el" href="matrix4_8h_source.html#l00050">50</a> of file <a class="el" href="matrix4_8h_source.html">matrix4.h</a>.</p>
-</div>
-<p><code>#include &lt;<a class="el" href="matrix4_8h_source.html">matrix4.h</a>&gt;</code></p>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a50990f00b756d640670a0b02129afd22"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a50990f00b756d640670a0b02129afd22">Matrix4</a> ()</td></tr>
-<tr class="memdesc:a50990f00b756d640670a0b02129afd22"><td class="mdescLeft">&#160;</td><td class="mdescRight">The default constructor creates an identity matrix: <a href="classmingfx_1_1_matrix4.html#a50990f00b756d640670a0b02129afd22">More...</a><br /></td></tr>
-<tr class="separator:a50990f00b756d640670a0b02129afd22"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a09a366a3ef940ff355f8d5c521baa57d"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a09a366a3ef940ff355f8d5c521baa57d">Matrix4</a> (const float *a)</td></tr>
-<tr class="memdesc:a09a366a3ef940ff355f8d5c521baa57d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs a matrix given from an array of 16 floats in OpenGL matrix format (i.e., column major). <a href="classmingfx_1_1_matrix4.html#a09a366a3ef940ff355f8d5c521baa57d">More...</a><br /></td></tr>
-<tr class="separator:a09a366a3ef940ff355f8d5c521baa57d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0abaeb690794c4a55e74c9b5fd82d138"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a0abaeb690794c4a55e74c9b5fd82d138">Matrix4</a> (const std::vector&lt; float &gt; &amp;a)</td></tr>
-<tr class="memdesc:a0abaeb690794c4a55e74c9b5fd82d138"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs a matrix given from a vector of 16 floats in OpenGL matrix format (i.e., column major). <a href="classmingfx_1_1_matrix4.html#a0abaeb690794c4a55e74c9b5fd82d138">More...</a><br /></td></tr>
-<tr class="separator:a0abaeb690794c4a55e74c9b5fd82d138"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4bcf311614006c551f57d2b0dcd32d87"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a4bcf311614006c551f57d2b0dcd32d87">Matrix4</a> (const <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> &amp;m2)</td></tr>
-<tr class="memdesc:a4bcf311614006c551f57d2b0dcd32d87"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy constructor. <a href="classmingfx_1_1_matrix4.html#a4bcf311614006c551f57d2b0dcd32d87">More...</a><br /></td></tr>
-<tr class="separator:a4bcf311614006c551f57d2b0dcd32d87"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8853a6b3fd0d08f1def5c9921bd47933"><td class="memItemLeft" align="right" valign="top">virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a8853a6b3fd0d08f1def5c9921bd47933">~Matrix4</a> ()</td></tr>
-<tr class="memdesc:a8853a6b3fd0d08f1def5c9921bd47933"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor. <a href="classmingfx_1_1_matrix4.html#a8853a6b3fd0d08f1def5c9921bd47933">More...</a><br /></td></tr>
-<tr class="separator:a8853a6b3fd0d08f1def5c9921bd47933"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9ec2ee167a450cd7b992384e4cc5bb73"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a9ec2ee167a450cd7b992384e4cc5bb73">operator==</a> (const <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> &amp;m2) const</td></tr>
-<tr class="memdesc:a9ec2ee167a450cd7b992384e4cc5bb73"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check for "equality", taking floating point imprecision into account. <a href="classmingfx_1_1_matrix4.html#a9ec2ee167a450cd7b992384e4cc5bb73">More...</a><br /></td></tr>
-<tr class="separator:a9ec2ee167a450cd7b992384e4cc5bb73"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab186b0ae1ae669346c0718c2489cd71b"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#ab186b0ae1ae669346c0718c2489cd71b">operator!=</a> (const <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> &amp;m2) const</td></tr>
-<tr class="memdesc:ab186b0ae1ae669346c0718c2489cd71b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check for "inequality", taking floating point imprecision into account. <a href="classmingfx_1_1_matrix4.html#ab186b0ae1ae669346c0718c2489cd71b">More...</a><br /></td></tr>
-<tr class="separator:ab186b0ae1ae669346c0718c2489cd71b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9ad8a8bc180ce213956d6d7d3fa19770"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a9ad8a8bc180ce213956d6d7d3fa19770">operator=</a> (const <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> &amp;m2)</td></tr>
-<tr class="memdesc:a9ad8a8bc180ce213956d6d7d3fa19770"><td class="mdescLeft">&#160;</td><td class="mdescRight">Matrix assignment operator. <a href="classmingfx_1_1_matrix4.html#a9ad8a8bc180ce213956d6d7d3fa19770">More...</a><br /></td></tr>
-<tr class="separator:a9ad8a8bc180ce213956d6d7d3fa19770"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2b7b30f23f08d70e83c7b7e01945dd3c"><td class="memItemLeft" align="right" valign="top">const float *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a2b7b30f23f08d70e83c7b7e01945dd3c">value_ptr</a> () const</td></tr>
-<tr class="memdesc:a2b7b30f23f08d70e83c7b7e01945dd3c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a pointer to the raw data array used to store the matrix. This is a 1D array of 16-elements stored in column-major order. <a href="classmingfx_1_1_matrix4.html#a2b7b30f23f08d70e83c7b7e01945dd3c">More...</a><br /></td></tr>
-<tr class="separator:a2b7b30f23f08d70e83c7b7e01945dd3c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:acd64f0db45e255d61dde4f6fa10a4127"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#acd64f0db45e255d61dde4f6fa10a4127">operator[]</a> (const int i) const</td></tr>
-<tr class="memdesc:acd64f0db45e255d61dde4f6fa10a4127"><td class="mdescLeft">&#160;</td><td class="mdescRight">Accesses the ith element of the raw data array used to store the matrix. This is a 1D array of 16-elements stored in column-major order. <a href="classmingfx_1_1_matrix4.html#acd64f0db45e255d61dde4f6fa10a4127">More...</a><br /></td></tr>
-<tr class="separator:acd64f0db45e255d61dde4f6fa10a4127"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af9b02807d81eac55d66238f246c53656"><td class="memItemLeft" align="right" valign="top">float &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#af9b02807d81eac55d66238f246c53656">operator[]</a> (const int i)</td></tr>
-<tr class="memdesc:af9b02807d81eac55d66238f246c53656"><td class="mdescLeft">&#160;</td><td class="mdescRight">Accesses the ith element of the raw data array used to store the matrix. This is a 1D array of 16-elements stored in column-major order. <a href="classmingfx_1_1_matrix4.html#af9b02807d81eac55d66238f246c53656">More...</a><br /></td></tr>
-<tr class="separator:af9b02807d81eac55d66238f246c53656"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa324d0cec02c452fb938af28725d5df9"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#aa324d0cec02c452fb938af28725d5df9">operator()</a> (const int row, const int col) const</td></tr>
-<tr class="memdesc:aa324d0cec02c452fb938af28725d5df9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Access an individual element of the array using the syntax: <a class="el" href="classmingfx_1_1_matrix4.html" title="A 4x4 transformation matrix stored internally as an array of floats in column-major order so as to be...">Matrix4</a> mat; float row1col2 = mat(1,2);. <a href="classmingfx_1_1_matrix4.html#aa324d0cec02c452fb938af28725d5df9">More...</a><br /></td></tr>
-<tr class="separator:aa324d0cec02c452fb938af28725d5df9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a470bba77b8e3c47de7adaa18046e6096"><td class="memItemLeft" align="right" valign="top">float &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a470bba77b8e3c47de7adaa18046e6096">operator()</a> (const int row, const int col)</td></tr>
-<tr class="memdesc:a470bba77b8e3c47de7adaa18046e6096"><td class="mdescLeft">&#160;</td><td class="mdescRight">Access an individual element of the array using the syntax: <a class="el" href="classmingfx_1_1_matrix4.html" title="A 4x4 transformation matrix stored internally as an array of floats in column-major order so as to be...">Matrix4</a> mat; mat(1,2) = 1.0;. <a href="classmingfx_1_1_matrix4.html#a470bba77b8e3c47de7adaa18046e6096">More...</a><br /></td></tr>
-<tr class="separator:a470bba77b8e3c47de7adaa18046e6096"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7396dbff36cb732e1bd878020f52bbc3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classmingfx_1_1_vector3.html">Vector3</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a7396dbff36cb732e1bd878020f52bbc3">ColumnToVector3</a> (int c) const</td></tr>
-<tr class="memdesc:a7396dbff36cb732e1bd878020f52bbc3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the c-th column of the matrix as a Vector type, e.g.,: <a class="el" href="classmingfx_1_1_vector3.html" title="A 3D Vector with floating point coordinates, used for storing normals and all sorts of other 3D graph...">Vector3</a> xAxis = mat.getColumnAsVector3(0); <a class="el" href="classmingfx_1_1_vector3.html" title="A 3D Vector with floating point coordinates, used for storing normals and all sorts of other 3D graph...">Vector3</a> yAxis = mat.getColumnAsVector3(1); <a class="el" href="classmingfx_1_1_vector3.html" title="A 3D Vector with floating point coordinates, used for storing normals and all sorts of other 3D graph...">Vector3</a> zAxis = mat.getColumnAsVector3(2);. <a href="classmingfx_1_1_matrix4.html#a7396dbff36cb732e1bd878020f52bbc3">More...</a><br /></td></tr>
-<tr class="separator:a7396dbff36cb732e1bd878020f52bbc3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae991be2b3bca290b44e676a9f8dc13bd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classmingfx_1_1_point3.html">Point3</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#ae991be2b3bca290b44e676a9f8dc13bd">ColumnToPoint3</a> (int c) const</td></tr>
-<tr class="memdesc:ae991be2b3bca290b44e676a9f8dc13bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the c-th column of the matrix as a Vector type, e.g.,: <a class="el" href="classmingfx_1_1_point3.html" title="A 3D Point with floating point coordinates, used for storing vertices and all sorts of other 3D graph...">Point3</a> pos = mat.getColumnAsPoint3(3);. <a href="classmingfx_1_1_matrix4.html#ae991be2b3bca290b44e676a9f8dc13bd">More...</a><br /></td></tr>
-<tr class="separator:ae991be2b3bca290b44e676a9f8dc13bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4e9433f0482b5e9688c12398900608db"><td class="memItemLeft" align="right" valign="top">std::vector&lt; float &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a4e9433f0482b5e9688c12398900608db">ToVector</a> () const</td></tr>
-<tr class="separator:a4e9433f0482b5e9688c12398900608db"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab3f360906e15730eee621826b5f0bbc5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#ab3f360906e15730eee621826b5f0bbc5">Inverse</a> () const</td></tr>
-<tr class="memdesc:ab3f360906e15730eee621826b5f0bbc5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the inverse of the 4x4 matrix if it is nonsingular. If it is singular, then returns the identity matrix. <a href="classmingfx_1_1_matrix4.html#ab3f360906e15730eee621826b5f0bbc5">More...</a><br /></td></tr>
-<tr class="separator:ab3f360906e15730eee621826b5f0bbc5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9ad5c85784e84fa0a941361eaaae0250"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a9ad5c85784e84fa0a941361eaaae0250">Orthonormal</a> () const</td></tr>
-<tr class="memdesc:a9ad5c85784e84fa0a941361eaaae0250"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an orthonormal version of the matrix, i.e., guarantees that the rotational component of the matrix is built from column vectors that are all unit vectors and orthogonal to each other. <a href="classmingfx_1_1_matrix4.html#a9ad5c85784e84fa0a941361eaaae0250">More...</a><br /></td></tr>
-<tr class="separator:a9ad5c85784e84fa0a941361eaaae0250"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:afd1030205567d23d4a2d1240d8214850"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#afd1030205567d23d4a2d1240d8214850">Transpose</a> () const</td></tr>
-<tr class="memdesc:afd1030205567d23d4a2d1240d8214850"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the transpose of the matrix. <a href="classmingfx_1_1_matrix4.html#afd1030205567d23d4a2d1240d8214850">More...</a><br /></td></tr>
-<tr class="separator:afd1030205567d23d4a2d1240d8214850"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3d9898bfac2510a695df6b033054e481"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a3d9898bfac2510a695df6b033054e481">SubDeterminant</a> (int exclude_row, int exclude_col) const</td></tr>
-<tr class="memdesc:a3d9898bfac2510a695df6b033054e481"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the determinant of the 3x3 matrix formed by excluding the specified row and column from the 4x4 matrix. <a href="classmingfx_1_1_matrix4.html#a3d9898bfac2510a695df6b033054e481">More...</a><br /></td></tr>
-<tr class="separator:a3d9898bfac2510a695df6b033054e481"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0d88ba8e15325d135157d115f2412e91"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a0d88ba8e15325d135157d115f2412e91">Cofactor</a> () const</td></tr>
-<tr class="memdesc:a0d88ba8e15325d135157d115f2412e91"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the cofactor matrix. <a href="classmingfx_1_1_matrix4.html#a0d88ba8e15325d135157d115f2412e91">More...</a><br /></td></tr>
-<tr class="separator:a0d88ba8e15325d135157d115f2412e91"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0127ebae92b50e4f10ebee8565b0248c"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a0127ebae92b50e4f10ebee8565b0248c">Determinant</a> () const</td></tr>
-<tr class="memdesc:a0127ebae92b50e4f10ebee8565b0248c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the determinant of the 4x4 matrix. <a href="classmingfx_1_1_matrix4.html#a0127ebae92b50e4f10ebee8565b0248c">More...</a><br /></td></tr>
-<tr class="separator:a0127ebae92b50e4f10ebee8565b0248c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
-Static Public Member Functions</h2></td></tr>
-<tr class="memitem:add98bfa1cf6a10dbae0e8ae8defe728b"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#add98bfa1cf6a10dbae0e8ae8defe728b">FromRowMajorElements</a> (const float r1c1, const float r1c2, const float r1c3, const float r1c4, const float r2c1, const float r2c2, const float r2c3, const float r2c4, const float r3c1, const float r3c2, const float r3c3, const float r3c4, const float r4c1, const float r4c2, const float r4c3, const float r4c4)</td></tr>
-<tr class="memdesc:add98bfa1cf6a10dbae0e8ae8defe728b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a matrix constructed from individual elements passed in row major order so that the matrix looks "correct" on the screen as you write this constructor on 4 lines of code as below. <a href="classmingfx_1_1_matrix4.html#add98bfa1cf6a10dbae0e8ae8defe728b">More...</a><br /></td></tr>
-<tr class="separator:add98bfa1cf6a10dbae0e8ae8defe728b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0232a58d20b1da5374cf8c72fb113a4e"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a0232a58d20b1da5374cf8c72fb113a4e">Scale</a> (const <a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> &amp;v)</td></tr>
-<tr class="memdesc:a0232a58d20b1da5374cf8c72fb113a4e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the scale matrix described by the vector. <a href="classmingfx_1_1_matrix4.html#a0232a58d20b1da5374cf8c72fb113a4e">More...</a><br /></td></tr>
-<tr class="separator:a0232a58d20b1da5374cf8c72fb113a4e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae82bab81df82dc03f5eb11e74ba1dd84"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#ae82bab81df82dc03f5eb11e74ba1dd84">Translation</a> (const <a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> &amp;v)</td></tr>
-<tr class="memdesc:ae82bab81df82dc03f5eb11e74ba1dd84"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the translation matrix described by the vector. <a href="classmingfx_1_1_matrix4.html#ae82bab81df82dc03f5eb11e74ba1dd84">More...</a><br /></td></tr>
-<tr class="separator:ae82bab81df82dc03f5eb11e74ba1dd84"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a48615deb30590055c0aa9f207eee7f08"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a48615deb30590055c0aa9f207eee7f08">RotationX</a> (const float radians)</td></tr>
-<tr class="memdesc:a48615deb30590055c0aa9f207eee7f08"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the rotation matrix about the x axis by the specified angle. <a href="classmingfx_1_1_matrix4.html#a48615deb30590055c0aa9f207eee7f08">More...</a><br /></td></tr>
-<tr class="separator:a48615deb30590055c0aa9f207eee7f08"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aef94f0e9d298a7ba57e0119ef09b71b6"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#aef94f0e9d298a7ba57e0119ef09b71b6">RotationY</a> (const float radians)</td></tr>
-<tr class="memdesc:aef94f0e9d298a7ba57e0119ef09b71b6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the rotation matrix about the y axis by the specified angle. <a href="classmingfx_1_1_matrix4.html#aef94f0e9d298a7ba57e0119ef09b71b6">More...</a><br /></td></tr>
-<tr class="separator:aef94f0e9d298a7ba57e0119ef09b71b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4bf1dced8875fdc5827b5b8869e9de93"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a4bf1dced8875fdc5827b5b8869e9de93">RotationZ</a> (const float radians)</td></tr>
-<tr class="memdesc:a4bf1dced8875fdc5827b5b8869e9de93"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the rotation matrix about the z axis by the specified angle. <a href="classmingfx_1_1_matrix4.html#a4bf1dced8875fdc5827b5b8869e9de93">More...</a><br /></td></tr>
-<tr class="separator:a4bf1dced8875fdc5827b5b8869e9de93"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:acf4abaf4a45826f14b435edf80a8d0e0"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#acf4abaf4a45826f14b435edf80a8d0e0">Rotation</a> (const <a class="el" href="classmingfx_1_1_point3.html">Point3</a> &amp;p, const <a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> &amp;v, const float a)</td></tr>
-<tr class="memdesc:acf4abaf4a45826f14b435edf80a8d0e0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the rotation matrix around the vector v placed at point p, rotate by angle a. <a href="classmingfx_1_1_matrix4.html#acf4abaf4a45826f14b435edf80a8d0e0">More...</a><br /></td></tr>
-<tr class="separator:acf4abaf4a45826f14b435edf80a8d0e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae61cdabb318a03cd4dae8a1c8ecafa4d"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#ae61cdabb318a03cd4dae8a1c8ecafa4d">Align</a> (const <a class="el" href="classmingfx_1_1_point3.html">Point3</a> &amp;a_p, const <a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> &amp;a_v1, const <a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> &amp;a_v2, const <a class="el" href="classmingfx_1_1_point3.html">Point3</a> &amp;b_p, const <a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> &amp;b_v1, const <a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> &amp;b_v2)</td></tr>
-<tr class="memdesc:ae61cdabb318a03cd4dae8a1c8ecafa4d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a transformation matrix that maps a coordinate space, <em>a</em>, defined one point, <em>a_p</em>, and two vectors, <em>a_v1</em> and <em>a_v2</em>, to a new coordinate space, <em>b</em>, also defined by one point, <em>b_p</em>, and two vectors, <em>b_v1</em> and <em>b_v2</em>. The transformation will thus include both some rotation and some translation. Pseudocode example of aligning a billboard defined in the XY plane with a normal in the +Z direction and that rotates around the Y axis with a camera: <a href="classmingfx_1_1_matrix4.html#ae61cdabb318a03cd4dae8a1c8ecafa4d">More...</a><br /></td></tr>
-<tr class="separator:ae61cdabb318a03cd4dae8a1c8ecafa4d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4543695a6dfc996d0312b70c2eaa00de"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a4543695a6dfc996d0312b70c2eaa00de">LookAt</a> (<a class="el" href="classmingfx_1_1_point3.html">Point3</a> eye, <a class="el" href="classmingfx_1_1_point3.html">Point3</a> target, <a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> up)</td></tr>
-<tr class="memdesc:a4543695a6dfc996d0312b70c2eaa00de"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a view matrix that centers the camera at the 'eye' position and orients it to look at the desired 'target' point with the top of the screen pointed as closely as possible in the direction of the 'up' vector. <a href="classmingfx_1_1_matrix4.html#a4543695a6dfc996d0312b70c2eaa00de">More...</a><br /></td></tr>
-<tr class="separator:a4543695a6dfc996d0312b70c2eaa00de"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0e34aee86758a0397074590b87712c5e"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a0e34aee86758a0397074590b87712c5e">Perspective</a> (float fov_y_in_degrees, float aspect_ratio, float near_plane_dist, float far_plane_dist)</td></tr>
-<tr class="memdesc:a0e34aee86758a0397074590b87712c5e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a perspective projection matrix equivalent to the one gluPerspective creates. <a href="classmingfx_1_1_matrix4.html#a0e34aee86758a0397074590b87712c5e">More...</a><br /></td></tr>
-<tr class="separator:a0e34aee86758a0397074590b87712c5e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8e2f7b50cd2c8853e007829df9863722"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a8e2f7b50cd2c8853e007829df9863722">Frustum</a> (float left, float right, float bottom, float top, float near_plane_dist, float far_plane_dist)</td></tr>
-<tr class="memdesc:a8e2f7b50cd2c8853e007829df9863722"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a projection matrix equivalent the one glFrustum creates. <a href="classmingfx_1_1_matrix4.html#a8e2f7b50cd2c8853e007829df9863722">More...</a><br /></td></tr>
-<tr class="separator:a8e2f7b50cd2c8853e007829df9863722"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
-<a id="a50990f00b756d640670a0b02129afd22"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a50990f00b756d640670a0b02129afd22">&#9670;&nbsp;</a></span>Matrix4() <span class="overload">[1/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">mingfx::Matrix4::Matrix4 </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>The default constructor creates an identity matrix: </p>
-
-</div>
-</div>
-<a id="a09a366a3ef940ff355f8d5c521baa57d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a09a366a3ef940ff355f8d5c521baa57d">&#9670;&nbsp;</a></span>Matrix4() <span class="overload">[2/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">mingfx::Matrix4::Matrix4 </td>
- <td>(</td>
- <td class="paramtype">const float *&#160;</td>
- <td class="paramname"><em>a</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Constructs a matrix given from an array of 16 floats in OpenGL matrix format (i.e., column major). </p>
-
-</div>
-</div>
-<a id="a0abaeb690794c4a55e74c9b5fd82d138"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0abaeb690794c4a55e74c9b5fd82d138">&#9670;&nbsp;</a></span>Matrix4() <span class="overload">[3/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">mingfx::Matrix4::Matrix4 </td>
- <td>(</td>
- <td class="paramtype">const std::vector&lt; float &gt; &amp;&#160;</td>
- <td class="paramname"><em>a</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Constructs a matrix given from a vector of 16 floats in OpenGL matrix format (i.e., column major). </p>
-
-</div>
-</div>
-<a id="a4bcf311614006c551f57d2b0dcd32d87"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4bcf311614006c551f57d2b0dcd32d87">&#9670;&nbsp;</a></span>Matrix4() <span class="overload">[4/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">mingfx::Matrix4::Matrix4 </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> &amp;&#160;</td>
- <td class="paramname"><em>m2</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Copy constructor. </p>
-
-</div>
-</div>
-<a id="a8853a6b3fd0d08f1def5c9921bd47933"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8853a6b3fd0d08f1def5c9921bd47933">&#9670;&nbsp;</a></span>~Matrix4()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">virtual mingfx::Matrix4::~Matrix4 </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Destructor. </p>
-
-</div>
-</div>
-<h2 class="groupheader">Member Function Documentation</h2>
-<a id="ae61cdabb318a03cd4dae8a1c8ecafa4d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae61cdabb318a03cd4dae8a1c8ecafa4d">&#9670;&nbsp;</a></span>Align()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> mingfx::Matrix4::Align </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classmingfx_1_1_point3.html">Point3</a> &amp;&#160;</td>
- <td class="paramname"><em>a_p</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> &amp;&#160;</td>
- <td class="paramname"><em>a_v1</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> &amp;&#160;</td>
- <td class="paramname"><em>a_v2</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classmingfx_1_1_point3.html">Point3</a> &amp;&#160;</td>
- <td class="paramname"><em>b_p</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> &amp;&#160;</td>
- <td class="paramname"><em>b_v1</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> &amp;&#160;</td>
- <td class="paramname"><em>b_v2</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Creates a transformation matrix that maps a coordinate space, <em>a</em>, defined one point, <em>a_p</em>, and two vectors, <em>a_v1</em> and <em>a_v2</em>, to a new coordinate space, <em>b</em>, also defined by one point, <em>b_p</em>, and two vectors, <em>b_v1</em> and <em>b_v2</em>. The transformation will thus include both some rotation and some translation. Pseudocode example of aligning a billboard defined in the XY plane with a normal in the +Z direction and that rotates around the Y axis with a camera: </p>
-<div class="fragment"><div class="line"><span class="comment">// define a coordiante space for a canonical billboard geometry defined</span></div>
-<div class="line"><span class="comment">// right at the origin.</span></div>
-<div class="line">Point3 a_p = Point3(0,0,0); <span class="comment">// billboard&#39;s initial base position</span></div>
-<div class="line">Vector3 a_v1 = Vector3(0,1,0); <span class="comment">// billboard&#39;s initial up direction</span></div>
-<div class="line">Vector3 a_v2 = Vector3(0,0,1); <span class="comment">// billboard&#39;s initial normal direction</span></div>
-<div class="line"> </div>
-<div class="line"><span class="comment">// define a coordinate space for where we want this billboard to go and</span></div>
-<div class="line"><span class="comment">// the direction it should be facing</span></div>
-<div class="line">Point3 b_p = desired_base_pos; <span class="comment">// new position for the billboard</span></div>
-<div class="line">Vector3 b_v1 = Vector3(0,1,0); <span class="comment">// +Y is still up, doesn&#39;t change</span></div>
-<div class="line">Vector3 b_v2 = (camera.eye() - desired_base_pos); <span class="comment">// the normal should point toward the camera</span></div>
-<div class="line">b_v2[1] = 0.0; <span class="comment">// with 0 change in Y so the billboard does not tilt</span></div>
-<div class="line">b_v2.Normalize(); <span class="comment">// convert to a unit vector</span></div>
-<div class="line"> </div>
-<div class="line"><a class="code" href="classmingfx_1_1_matrix4.html#a50990f00b756d640670a0b02129afd22">Matrix4</a> billboard_model_matrix = <a class="code" href="classmingfx_1_1_matrix4.html#ae61cdabb318a03cd4dae8a1c8ecafa4d">Matrix4::Align</a>(a_p, a_v1, a_v2, b_p, b_v1, b_v2);</div>
-<div class="ttc" id="aclassmingfx_1_1_matrix4_html_ae61cdabb318a03cd4dae8a1c8ecafa4d"><div class="ttname"><a href="classmingfx_1_1_matrix4.html#ae61cdabb318a03cd4dae8a1c8ecafa4d">mingfx::Matrix4::Align</a></div><div class="ttdeci">static Matrix4 Align(const Point3 &amp;a_p, const Vector3 &amp;a_v1, const Vector3 &amp;a_v2, const Point3 &amp;b_p, const Vector3 &amp;b_v1, const Vector3 &amp;b_v2)</div><div class="ttdoc">Creates a transformation matrix that maps a coordinate space, a, defined one point,...</div></div>
-</div><!-- fragment -->
-</div>
-</div>
-<a id="a0d88ba8e15325d135157d115f2412e91"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0d88ba8e15325d135157d115f2412e91">&#9670;&nbsp;</a></span>Cofactor()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> mingfx::Matrix4::Cofactor </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Returns the cofactor matrix. </p>
-
-</div>
-</div>
-<a id="ae991be2b3bca290b44e676a9f8dc13bd"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae991be2b3bca290b44e676a9f8dc13bd">&#9670;&nbsp;</a></span>ColumnToPoint3()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classmingfx_1_1_point3.html">Point3</a> mingfx::Matrix4::ColumnToPoint3 </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Returns the c-th column of the matrix as a Vector type, e.g.,: <a class="el" href="classmingfx_1_1_point3.html" title="A 3D Point with floating point coordinates, used for storing vertices and all sorts of other 3D graph...">Point3</a> pos = mat.getColumnAsPoint3(3);. </p>
-
-</div>
-</div>
-<a id="a7396dbff36cb732e1bd878020f52bbc3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7396dbff36cb732e1bd878020f52bbc3">&#9670;&nbsp;</a></span>ColumnToVector3()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> mingfx::Matrix4::ColumnToVector3 </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Returns the c-th column of the matrix as a Vector type, e.g.,: <a class="el" href="classmingfx_1_1_vector3.html" title="A 3D Vector with floating point coordinates, used for storing normals and all sorts of other 3D graph...">Vector3</a> xAxis = mat.getColumnAsVector3(0); <a class="el" href="classmingfx_1_1_vector3.html" title="A 3D Vector with floating point coordinates, used for storing normals and all sorts of other 3D graph...">Vector3</a> yAxis = mat.getColumnAsVector3(1); <a class="el" href="classmingfx_1_1_vector3.html" title="A 3D Vector with floating point coordinates, used for storing normals and all sorts of other 3D graph...">Vector3</a> zAxis = mat.getColumnAsVector3(2);. </p>
-
-</div>
-</div>
-<a id="a0127ebae92b50e4f10ebee8565b0248c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0127ebae92b50e4f10ebee8565b0248c">&#9670;&nbsp;</a></span>Determinant()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float mingfx::Matrix4::Determinant </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Returns the determinant of the 4x4 matrix. </p>
-
-</div>
-</div>
-<a id="add98bfa1cf6a10dbae0e8ae8defe728b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#add98bfa1cf6a10dbae0e8ae8defe728b">&#9670;&nbsp;</a></span>FromRowMajorElements()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> mingfx::Matrix4::FromRowMajorElements </td>
- <td>(</td>
- <td class="paramtype">const float&#160;</td>
- <td class="paramname"><em>r1c1</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const float&#160;</td>
- <td class="paramname"><em>r1c2</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const float&#160;</td>
- <td class="paramname"><em>r1c3</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const float&#160;</td>
- <td class="paramname"><em>r1c4</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const float&#160;</td>
- <td class="paramname"><em>r2c1</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const float&#160;</td>
- <td class="paramname"><em>r2c2</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const float&#160;</td>
- <td class="paramname"><em>r2c3</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const float&#160;</td>
- <td class="paramname"><em>r2c4</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const float&#160;</td>
- <td class="paramname"><em>r3c1</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const float&#160;</td>
- <td class="paramname"><em>r3c2</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const float&#160;</td>
- <td class="paramname"><em>r3c3</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const float&#160;</td>
- <td class="paramname"><em>r3c4</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const float&#160;</td>
- <td class="paramname"><em>r4c1</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const float&#160;</td>
- <td class="paramname"><em>r4c2</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const float&#160;</td>
- <td class="paramname"><em>r4c3</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const float&#160;</td>
- <td class="paramname"><em>r4c4</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Returns a matrix constructed from individual elements passed in row major order so that the matrix looks "correct" on the screen as you write this constructor on 4 lines of code as below. </p>
-<p>Note the that internally the matrix constructed will be stored in a 16 element column major array to be consistent with OpenGL. </p>
-
-</div>
-</div>
-<a id="a8e2f7b50cd2c8853e007829df9863722"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8e2f7b50cd2c8853e007829df9863722">&#9670;&nbsp;</a></span>Frustum()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> mingfx::Matrix4::Frustum </td>
- <td>(</td>
- <td class="paramtype">float&#160;</td>
- <td class="paramname"><em>left</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float&#160;</td>
- <td class="paramname"><em>right</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float&#160;</td>
- <td class="paramname"><em>bottom</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float&#160;</td>
- <td class="paramname"><em>top</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float&#160;</td>
- <td class="paramname"><em>near_plane_dist</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float&#160;</td>
- <td class="paramname"><em>far_plane_dist</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Returns a projection matrix equivalent the one glFrustum creates. </p>
-
-</div>
-</div>
-<a id="ab3f360906e15730eee621826b5f0bbc5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab3f360906e15730eee621826b5f0bbc5">&#9670;&nbsp;</a></span>Inverse()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> mingfx::Matrix4::Inverse </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Returns the inverse of the 4x4 matrix if it is nonsingular. If it is singular, then returns the identity matrix. </p>
-
-</div>
-</div>
-<a id="a4543695a6dfc996d0312b70c2eaa00de"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4543695a6dfc996d0312b70c2eaa00de">&#9670;&nbsp;</a></span>LookAt()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> mingfx::Matrix4::LookAt </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classmingfx_1_1_point3.html">Point3</a>&#160;</td>
- <td class="paramname"><em>eye</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classmingfx_1_1_point3.html">Point3</a>&#160;</td>
- <td class="paramname"><em>target</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classmingfx_1_1_vector3.html">Vector3</a>&#160;</td>
- <td class="paramname"><em>up</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Returns a view matrix that centers the camera at the 'eye' position and orients it to look at the desired 'target' point with the top of the screen pointed as closely as possible in the direction of the 'up' vector. </p>
-
-</div>
-</div>
-<a id="ab186b0ae1ae669346c0718c2489cd71b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab186b0ae1ae669346c0718c2489cd71b">&#9670;&nbsp;</a></span>operator!=()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool mingfx::Matrix4::operator!= </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> &amp;&#160;</td>
- <td class="paramname"><em>m2</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Check for "inequality", taking floating point imprecision into account. </p>
-
-</div>
-</div>
-<a id="a470bba77b8e3c47de7adaa18046e6096"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a470bba77b8e3c47de7adaa18046e6096">&#9670;&nbsp;</a></span>operator()() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float&amp; mingfx::Matrix4::operator() </td>
- <td>(</td>
- <td class="paramtype">const int&#160;</td>
- <td class="paramname"><em>row</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const int&#160;</td>
- <td class="paramname"><em>col</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Access an individual element of the array using the syntax: <a class="el" href="classmingfx_1_1_matrix4.html" title="A 4x4 transformation matrix stored internally as an array of floats in column-major order so as to be...">Matrix4</a> mat; mat(1,2) = 1.0;. </p>
-
-</div>
-</div>
-<a id="aa324d0cec02c452fb938af28725d5df9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aa324d0cec02c452fb938af28725d5df9">&#9670;&nbsp;</a></span>operator()() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float mingfx::Matrix4::operator() </td>
- <td>(</td>
- <td class="paramtype">const int&#160;</td>
- <td class="paramname"><em>row</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const int&#160;</td>
- <td class="paramname"><em>col</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Access an individual element of the array using the syntax: <a class="el" href="classmingfx_1_1_matrix4.html" title="A 4x4 transformation matrix stored internally as an array of floats in column-major order so as to be...">Matrix4</a> mat; float row1col2 = mat(1,2);. </p>
-
-</div>
-</div>
-<a id="a9ad8a8bc180ce213956d6d7d3fa19770"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9ad8a8bc180ce213956d6d7d3fa19770">&#9670;&nbsp;</a></span>operator=()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&amp; mingfx::Matrix4::operator= </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> &amp;&#160;</td>
- <td class="paramname"><em>m2</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Matrix assignment operator. </p>
-
-</div>
-</div>
-<a id="a9ec2ee167a450cd7b992384e4cc5bb73"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9ec2ee167a450cd7b992384e4cc5bb73">&#9670;&nbsp;</a></span>operator==()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool mingfx::Matrix4::operator== </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> &amp;&#160;</td>
- <td class="paramname"><em>m2</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Check for "equality", taking floating point imprecision into account. </p>
-
-</div>
-</div>
-<a id="af9b02807d81eac55d66238f246c53656"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af9b02807d81eac55d66238f246c53656">&#9670;&nbsp;</a></span>operator[]() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float&amp; mingfx::Matrix4::operator[] </td>
- <td>(</td>
- <td class="paramtype">const int&#160;</td>
- <td class="paramname"><em>i</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Accesses the ith element of the raw data array used to store the matrix. This is a 1D array of 16-elements stored in column-major order. </p>
-
-</div>
-</div>
-<a id="acd64f0db45e255d61dde4f6fa10a4127"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#acd64f0db45e255d61dde4f6fa10a4127">&#9670;&nbsp;</a></span>operator[]() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float mingfx::Matrix4::operator[] </td>
- <td>(</td>
- <td class="paramtype">const int&#160;</td>
- <td class="paramname"><em>i</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Accesses the ith element of the raw data array used to store the matrix. This is a 1D array of 16-elements stored in column-major order. </p>
-
-</div>
-</div>
-<a id="a9ad5c85784e84fa0a941361eaaae0250"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9ad5c85784e84fa0a941361eaaae0250">&#9670;&nbsp;</a></span>Orthonormal()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> mingfx::Matrix4::Orthonormal </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Returns an orthonormal version of the matrix, i.e., guarantees that the rotational component of the matrix is built from column vectors that are all unit vectors and orthogonal to each other. </p>
-
-</div>
-</div>
-<a id="a0e34aee86758a0397074590b87712c5e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0e34aee86758a0397074590b87712c5e">&#9670;&nbsp;</a></span>Perspective()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> mingfx::Matrix4::Perspective </td>
- <td>(</td>
- <td class="paramtype">float&#160;</td>
- <td class="paramname"><em>fov_y_in_degrees</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float&#160;</td>
- <td class="paramname"><em>aspect_ratio</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float&#160;</td>
- <td class="paramname"><em>near_plane_dist</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float&#160;</td>
- <td class="paramname"><em>far_plane_dist</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Returns a perspective projection matrix equivalent to the one gluPerspective creates. </p>
-
-</div>
-</div>
-<a id="acf4abaf4a45826f14b435edf80a8d0e0"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#acf4abaf4a45826f14b435edf80a8d0e0">&#9670;&nbsp;</a></span>Rotation()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> mingfx::Matrix4::Rotation </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classmingfx_1_1_point3.html">Point3</a> &amp;&#160;</td>
- <td class="paramname"><em>p</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> &amp;&#160;</td>
- <td class="paramname"><em>v</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const float&#160;</td>
- <td class="paramname"><em>a</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Returns the rotation matrix around the vector v placed at point p, rotate by angle a. </p>
-
-</div>
-</div>
-<a id="a48615deb30590055c0aa9f207eee7f08"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a48615deb30590055c0aa9f207eee7f08">&#9670;&nbsp;</a></span>RotationX()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> mingfx::Matrix4::RotationX </td>
- <td>(</td>
- <td class="paramtype">const float&#160;</td>
- <td class="paramname"><em>radians</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Returns the rotation matrix about the x axis by the specified angle. </p>
-
-</div>
-</div>
-<a id="aef94f0e9d298a7ba57e0119ef09b71b6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aef94f0e9d298a7ba57e0119ef09b71b6">&#9670;&nbsp;</a></span>RotationY()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> mingfx::Matrix4::RotationY </td>
- <td>(</td>
- <td class="paramtype">const float&#160;</td>
- <td class="paramname"><em>radians</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Returns the rotation matrix about the y axis by the specified angle. </p>
-
-</div>
-</div>
-<a id="a4bf1dced8875fdc5827b5b8869e9de93"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4bf1dced8875fdc5827b5b8869e9de93">&#9670;&nbsp;</a></span>RotationZ()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> mingfx::Matrix4::RotationZ </td>
- <td>(</td>
- <td class="paramtype">const float&#160;</td>
- <td class="paramname"><em>radians</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Returns the rotation matrix about the z axis by the specified angle. </p>
-
-</div>
-</div>
-<a id="a0232a58d20b1da5374cf8c72fb113a4e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0232a58d20b1da5374cf8c72fb113a4e">&#9670;&nbsp;</a></span>Scale()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> mingfx::Matrix4::Scale </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> &amp;&#160;</td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Returns the scale matrix described by the vector. </p>
-
-</div>
-</div>
-<a id="a3d9898bfac2510a695df6b033054e481"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3d9898bfac2510a695df6b033054e481">&#9670;&nbsp;</a></span>SubDeterminant()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float mingfx::Matrix4::SubDeterminant </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>exclude_row</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>exclude_col</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Returns the determinant of the 3x3 matrix formed by excluding the specified row and column from the 4x4 matrix. </p>
-
-</div>
-</div>
-<a id="a4e9433f0482b5e9688c12398900608db"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4e9433f0482b5e9688c12398900608db">&#9670;&nbsp;</a></span>ToVector()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">std::vector&lt;float&gt; mingfx::Matrix4::ToVector </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ae82bab81df82dc03f5eb11e74ba1dd84"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae82bab81df82dc03f5eb11e74ba1dd84">&#9670;&nbsp;</a></span>Translation()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> mingfx::Matrix4::Translation </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> &amp;&#160;</td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Returns the translation matrix described by the vector. </p>
-
-</div>
-</div>
-<a id="afd1030205567d23d4a2d1240d8214850"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#afd1030205567d23d4a2d1240d8214850">&#9670;&nbsp;</a></span>Transpose()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> mingfx::Matrix4::Transpose </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Returns the transpose of the matrix. </p>
-
-</div>
-</div>
-<a id="a2b7b30f23f08d70e83c7b7e01945dd3c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a2b7b30f23f08d70e83c7b7e01945dd3c">&#9670;&nbsp;</a></span>value_ptr()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">const float* mingfx::Matrix4::value_ptr </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Returns a pointer to the raw data array used to store the matrix. This is a 1D array of 16-elements stored in column-major order. </p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>src/<a class="el" href="matrix4_8h_source.html">matrix4.h</a></li>
-</ul>
-</div><!-- contents -->
-<!-- HTML footer for doxygen 1.8.9.1-->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.9.1
-</small></address>
-</body>
-</html>
+<!-- HTML header for doxygen 1.8.9.1-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<title>MinGfx Toolkit: mingfx::Matrix4 Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/x-mathjax-config">
+ MathJax.Hub.Config({
+ extensions: ["tex2jax.js"],
+ jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="customdoxygen.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">MinGfx Toolkit
+ &#160;<span id="projectnumber">1.0</span>
+ </div>
+ <div id="projectbrief">A minimal library for writing cross-platform (Windows, OSX, linux) graphics programs.</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="namespacemingfx.html">mingfx</a></li><li class="navelem"><a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
+<a href="classmingfx_1_1_matrix4-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">mingfx::Matrix4 Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>A 4x4 transformation matrix stored internally as an array of floats in column-major order so as to be compatible with OpenGL. </p>
+<p>Examples: </p><div class="fragment"><div class="line"><span class="comment">// constructing various matrices:</span></div>
+<div class="line"><a class="code" href="classmingfx_1_1_matrix4.html#a50990f00b756d640670a0b02129afd22">Matrix4</a> T = <a class="code" href="classmingfx_1_1_matrix4.html#ae82bab81df82dc03f5eb11e74ba1dd84">Matrix4::Translation</a>(Vector3(1,0,0));</div>
+<div class="line"><a class="code" href="classmingfx_1_1_matrix4.html#a50990f00b756d640670a0b02129afd22">Matrix4</a> S = <a class="code" href="classmingfx_1_1_matrix4.html#a0232a58d20b1da5374cf8c72fb113a4e">Matrix4::Scale</a>(Vector3(2,2,2));</div>
+<div class="line"><a class="code" href="classmingfx_1_1_matrix4.html#a50990f00b756d640670a0b02129afd22">Matrix4</a> R = Matrix4::RotateX(GfxMath::toRadians(45.0));</div>
+<div class="line"> </div>
+<div class="line"><span class="comment">// compose matrices together by multiplication</span></div>
+<div class="line"><a class="code" href="classmingfx_1_1_matrix4.html#a50990f00b756d640670a0b02129afd22">Matrix4</a> M = T * R * S;</div>
+<div class="line"><a class="code" href="classmingfx_1_1_matrix4.html#a50990f00b756d640670a0b02129afd22">Matrix4</a> Minv = M.Inverse();</div>
+<div class="line"> </div>
+<div class="line"><span class="comment">// transforming points, vectors, etc.</span></div>
+<div class="line">Point3 p1(1,1,1);</div>
+<div class="line">Point3 p2 = M * p1;</div>
+<div class="line"> </div>
+<div class="line">Vector3 v1(1,1,1);</div>
+<div class="line">Vector3 v2 = M * v1;</div>
+<div class="line"> </div>
+<div class="line">Ray r1(p1, v1);</div>
+<div class="line">Ray r2 = M * r1;</div>
+<div class="ttc" id="aclassmingfx_1_1_matrix4_html_a0232a58d20b1da5374cf8c72fb113a4e"><div class="ttname"><a href="classmingfx_1_1_matrix4.html#a0232a58d20b1da5374cf8c72fb113a4e">mingfx::Matrix4::Scale</a></div><div class="ttdeci">static Matrix4 Scale(const Vector3 &amp;v)</div><div class="ttdoc">Returns the scale matrix described by the vector.</div></div>
+<div class="ttc" id="aclassmingfx_1_1_matrix4_html_a50990f00b756d640670a0b02129afd22"><div class="ttname"><a href="classmingfx_1_1_matrix4.html#a50990f00b756d640670a0b02129afd22">mingfx::Matrix4::Matrix4</a></div><div class="ttdeci">Matrix4()</div><div class="ttdoc">The default constructor creates an identity matrix:</div></div>
+<div class="ttc" id="aclassmingfx_1_1_matrix4_html_ae82bab81df82dc03f5eb11e74ba1dd84"><div class="ttname"><a href="classmingfx_1_1_matrix4.html#ae82bab81df82dc03f5eb11e74ba1dd84">mingfx::Matrix4::Translation</a></div><div class="ttdeci">static Matrix4 Translation(const Vector3 &amp;v)</div><div class="ttdoc">Returns the translation matrix described by the vector.</div></div>
+</div><!-- fragment -->
+<p class="definition">Definition at line <a class="el" href="matrix4_8h_source.html#l00050">50</a> of file <a class="el" href="matrix4_8h_source.html">matrix4.h</a>.</p>
+</div>
+<p><code>#include &lt;<a class="el" href="matrix4_8h_source.html">matrix4.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a50990f00b756d640670a0b02129afd22"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a50990f00b756d640670a0b02129afd22">Matrix4</a> ()</td></tr>
+<tr class="memdesc:a50990f00b756d640670a0b02129afd22"><td class="mdescLeft">&#160;</td><td class="mdescRight">The default constructor creates an identity matrix: <a href="classmingfx_1_1_matrix4.html#a50990f00b756d640670a0b02129afd22">More...</a><br /></td></tr>
+<tr class="separator:a50990f00b756d640670a0b02129afd22"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a09a366a3ef940ff355f8d5c521baa57d"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a09a366a3ef940ff355f8d5c521baa57d">Matrix4</a> (const float *a)</td></tr>
+<tr class="memdesc:a09a366a3ef940ff355f8d5c521baa57d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs a matrix given from an array of 16 floats in OpenGL matrix format (i.e., column major). <a href="classmingfx_1_1_matrix4.html#a09a366a3ef940ff355f8d5c521baa57d">More...</a><br /></td></tr>
+<tr class="separator:a09a366a3ef940ff355f8d5c521baa57d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0abaeb690794c4a55e74c9b5fd82d138"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a0abaeb690794c4a55e74c9b5fd82d138">Matrix4</a> (const std::vector&lt; float &gt; &amp;a)</td></tr>
+<tr class="memdesc:a0abaeb690794c4a55e74c9b5fd82d138"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs a matrix given from a vector of 16 floats in OpenGL matrix format (i.e., column major). <a href="classmingfx_1_1_matrix4.html#a0abaeb690794c4a55e74c9b5fd82d138">More...</a><br /></td></tr>
+<tr class="separator:a0abaeb690794c4a55e74c9b5fd82d138"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4bcf311614006c551f57d2b0dcd32d87"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a4bcf311614006c551f57d2b0dcd32d87">Matrix4</a> (const <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> &amp;m2)</td></tr>
+<tr class="memdesc:a4bcf311614006c551f57d2b0dcd32d87"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy constructor. <a href="classmingfx_1_1_matrix4.html#a4bcf311614006c551f57d2b0dcd32d87">More...</a><br /></td></tr>
+<tr class="separator:a4bcf311614006c551f57d2b0dcd32d87"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8853a6b3fd0d08f1def5c9921bd47933"><td class="memItemLeft" align="right" valign="top">virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a8853a6b3fd0d08f1def5c9921bd47933">~Matrix4</a> ()</td></tr>
+<tr class="memdesc:a8853a6b3fd0d08f1def5c9921bd47933"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor. <a href="classmingfx_1_1_matrix4.html#a8853a6b3fd0d08f1def5c9921bd47933">More...</a><br /></td></tr>
+<tr class="separator:a8853a6b3fd0d08f1def5c9921bd47933"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9ec2ee167a450cd7b992384e4cc5bb73"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a9ec2ee167a450cd7b992384e4cc5bb73">operator==</a> (const <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> &amp;m2) const</td></tr>
+<tr class="memdesc:a9ec2ee167a450cd7b992384e4cc5bb73"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check for "equality", taking floating point imprecision into account. <a href="classmingfx_1_1_matrix4.html#a9ec2ee167a450cd7b992384e4cc5bb73">More...</a><br /></td></tr>
+<tr class="separator:a9ec2ee167a450cd7b992384e4cc5bb73"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab186b0ae1ae669346c0718c2489cd71b"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#ab186b0ae1ae669346c0718c2489cd71b">operator!=</a> (const <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> &amp;m2) const</td></tr>
+<tr class="memdesc:ab186b0ae1ae669346c0718c2489cd71b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check for "inequality", taking floating point imprecision into account. <a href="classmingfx_1_1_matrix4.html#ab186b0ae1ae669346c0718c2489cd71b">More...</a><br /></td></tr>
+<tr class="separator:ab186b0ae1ae669346c0718c2489cd71b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9ad8a8bc180ce213956d6d7d3fa19770"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a9ad8a8bc180ce213956d6d7d3fa19770">operator=</a> (const <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> &amp;m2)</td></tr>
+<tr class="memdesc:a9ad8a8bc180ce213956d6d7d3fa19770"><td class="mdescLeft">&#160;</td><td class="mdescRight">Matrix assignment operator. <a href="classmingfx_1_1_matrix4.html#a9ad8a8bc180ce213956d6d7d3fa19770">More...</a><br /></td></tr>
+<tr class="separator:a9ad8a8bc180ce213956d6d7d3fa19770"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2b7b30f23f08d70e83c7b7e01945dd3c"><td class="memItemLeft" align="right" valign="top">const float *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a2b7b30f23f08d70e83c7b7e01945dd3c">value_ptr</a> () const</td></tr>
+<tr class="memdesc:a2b7b30f23f08d70e83c7b7e01945dd3c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a pointer to the raw data array used to store the matrix. This is a 1D array of 16-elements stored in column-major order. <a href="classmingfx_1_1_matrix4.html#a2b7b30f23f08d70e83c7b7e01945dd3c">More...</a><br /></td></tr>
+<tr class="separator:a2b7b30f23f08d70e83c7b7e01945dd3c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acd64f0db45e255d61dde4f6fa10a4127"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#acd64f0db45e255d61dde4f6fa10a4127">operator[]</a> (const int i) const</td></tr>
+<tr class="memdesc:acd64f0db45e255d61dde4f6fa10a4127"><td class="mdescLeft">&#160;</td><td class="mdescRight">Accesses the ith element of the raw data array used to store the matrix. This is a 1D array of 16-elements stored in column-major order. <a href="classmingfx_1_1_matrix4.html#acd64f0db45e255d61dde4f6fa10a4127">More...</a><br /></td></tr>
+<tr class="separator:acd64f0db45e255d61dde4f6fa10a4127"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af9b02807d81eac55d66238f246c53656"><td class="memItemLeft" align="right" valign="top">float &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#af9b02807d81eac55d66238f246c53656">operator[]</a> (const int i)</td></tr>
+<tr class="memdesc:af9b02807d81eac55d66238f246c53656"><td class="mdescLeft">&#160;</td><td class="mdescRight">Accesses the ith element of the raw data array used to store the matrix. This is a 1D array of 16-elements stored in column-major order. <a href="classmingfx_1_1_matrix4.html#af9b02807d81eac55d66238f246c53656">More...</a><br /></td></tr>
+<tr class="separator:af9b02807d81eac55d66238f246c53656"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa324d0cec02c452fb938af28725d5df9"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#aa324d0cec02c452fb938af28725d5df9">operator()</a> (const int row, const int col) const</td></tr>
+<tr class="memdesc:aa324d0cec02c452fb938af28725d5df9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Access an individual element of the array using the syntax: <a class="el" href="classmingfx_1_1_matrix4.html" title="A 4x4 transformation matrix stored internally as an array of floats in column-major order so as to be...">Matrix4</a> mat; float row1col2 = mat(1,2);. <a href="classmingfx_1_1_matrix4.html#aa324d0cec02c452fb938af28725d5df9">More...</a><br /></td></tr>
+<tr class="separator:aa324d0cec02c452fb938af28725d5df9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a470bba77b8e3c47de7adaa18046e6096"><td class="memItemLeft" align="right" valign="top">float &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a470bba77b8e3c47de7adaa18046e6096">operator()</a> (const int row, const int col)</td></tr>
+<tr class="memdesc:a470bba77b8e3c47de7adaa18046e6096"><td class="mdescLeft">&#160;</td><td class="mdescRight">Access an individual element of the array using the syntax: <a class="el" href="classmingfx_1_1_matrix4.html" title="A 4x4 transformation matrix stored internally as an array of floats in column-major order so as to be...">Matrix4</a> mat; mat(1,2) = 1.0;. <a href="classmingfx_1_1_matrix4.html#a470bba77b8e3c47de7adaa18046e6096">More...</a><br /></td></tr>
+<tr class="separator:a470bba77b8e3c47de7adaa18046e6096"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7396dbff36cb732e1bd878020f52bbc3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classmingfx_1_1_vector3.html">Vector3</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a7396dbff36cb732e1bd878020f52bbc3">ColumnToVector3</a> (int c) const</td></tr>
+<tr class="memdesc:a7396dbff36cb732e1bd878020f52bbc3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the c-th column of the matrix as a Vector type, e.g.,: <a class="el" href="classmingfx_1_1_vector3.html" title="A 3D Vector with floating point coordinates, used for storing normals and all sorts of other 3D graph...">Vector3</a> xAxis = mat.getColumnAsVector3(0); <a class="el" href="classmingfx_1_1_vector3.html" title="A 3D Vector with floating point coordinates, used for storing normals and all sorts of other 3D graph...">Vector3</a> yAxis = mat.getColumnAsVector3(1); <a class="el" href="classmingfx_1_1_vector3.html" title="A 3D Vector with floating point coordinates, used for storing normals and all sorts of other 3D graph...">Vector3</a> zAxis = mat.getColumnAsVector3(2);. <a href="classmingfx_1_1_matrix4.html#a7396dbff36cb732e1bd878020f52bbc3">More...</a><br /></td></tr>
+<tr class="separator:a7396dbff36cb732e1bd878020f52bbc3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae991be2b3bca290b44e676a9f8dc13bd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classmingfx_1_1_point3.html">Point3</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#ae991be2b3bca290b44e676a9f8dc13bd">ColumnToPoint3</a> (int c) const</td></tr>
+<tr class="memdesc:ae991be2b3bca290b44e676a9f8dc13bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the c-th column of the matrix as a Vector type, e.g.,: <a class="el" href="classmingfx_1_1_point3.html" title="A 3D Point with floating point coordinates, used for storing vertices and all sorts of other 3D graph...">Point3</a> pos = mat.getColumnAsPoint3(3);. <a href="classmingfx_1_1_matrix4.html#ae991be2b3bca290b44e676a9f8dc13bd">More...</a><br /></td></tr>
+<tr class="separator:ae991be2b3bca290b44e676a9f8dc13bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4e9433f0482b5e9688c12398900608db"><td class="memItemLeft" align="right" valign="top">std::vector&lt; float &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a4e9433f0482b5e9688c12398900608db">ToVector</a> () const</td></tr>
+<tr class="separator:a4e9433f0482b5e9688c12398900608db"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab3f360906e15730eee621826b5f0bbc5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#ab3f360906e15730eee621826b5f0bbc5">Inverse</a> () const</td></tr>
+<tr class="memdesc:ab3f360906e15730eee621826b5f0bbc5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the inverse of the 4x4 matrix if it is nonsingular. If it is singular, then returns the identity matrix. <a href="classmingfx_1_1_matrix4.html#ab3f360906e15730eee621826b5f0bbc5">More...</a><br /></td></tr>
+<tr class="separator:ab3f360906e15730eee621826b5f0bbc5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9ad5c85784e84fa0a941361eaaae0250"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a9ad5c85784e84fa0a941361eaaae0250">Orthonormal</a> () const</td></tr>
+<tr class="memdesc:a9ad5c85784e84fa0a941361eaaae0250"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an orthonormal version of the matrix, i.e., guarantees that the rotational component of the matrix is built from column vectors that are all unit vectors and orthogonal to each other. <a href="classmingfx_1_1_matrix4.html#a9ad5c85784e84fa0a941361eaaae0250">More...</a><br /></td></tr>
+<tr class="separator:a9ad5c85784e84fa0a941361eaaae0250"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afd1030205567d23d4a2d1240d8214850"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#afd1030205567d23d4a2d1240d8214850">Transpose</a> () const</td></tr>
+<tr class="memdesc:afd1030205567d23d4a2d1240d8214850"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the transpose of the matrix. <a href="classmingfx_1_1_matrix4.html#afd1030205567d23d4a2d1240d8214850">More...</a><br /></td></tr>
+<tr class="separator:afd1030205567d23d4a2d1240d8214850"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3d9898bfac2510a695df6b033054e481"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a3d9898bfac2510a695df6b033054e481">SubDeterminant</a> (int exclude_row, int exclude_col) const</td></tr>
+<tr class="memdesc:a3d9898bfac2510a695df6b033054e481"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the determinant of the 3x3 matrix formed by excluding the specified row and column from the 4x4 matrix. <a href="classmingfx_1_1_matrix4.html#a3d9898bfac2510a695df6b033054e481">More...</a><br /></td></tr>
+<tr class="separator:a3d9898bfac2510a695df6b033054e481"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d88ba8e15325d135157d115f2412e91"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a0d88ba8e15325d135157d115f2412e91">Cofactor</a> () const</td></tr>
+<tr class="memdesc:a0d88ba8e15325d135157d115f2412e91"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the cofactor matrix. <a href="classmingfx_1_1_matrix4.html#a0d88ba8e15325d135157d115f2412e91">More...</a><br /></td></tr>
+<tr class="separator:a0d88ba8e15325d135157d115f2412e91"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0127ebae92b50e4f10ebee8565b0248c"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a0127ebae92b50e4f10ebee8565b0248c">Determinant</a> () const</td></tr>
+<tr class="memdesc:a0127ebae92b50e4f10ebee8565b0248c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the determinant of the 4x4 matrix. <a href="classmingfx_1_1_matrix4.html#a0127ebae92b50e4f10ebee8565b0248c">More...</a><br /></td></tr>
+<tr class="separator:a0127ebae92b50e4f10ebee8565b0248c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:add98bfa1cf6a10dbae0e8ae8defe728b"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#add98bfa1cf6a10dbae0e8ae8defe728b">FromRowMajorElements</a> (const float r1c1, const float r1c2, const float r1c3, const float r1c4, const float r2c1, const float r2c2, const float r2c3, const float r2c4, const float r3c1, const float r3c2, const float r3c3, const float r3c4, const float r4c1, const float r4c2, const float r4c3, const float r4c4)</td></tr>
+<tr class="memdesc:add98bfa1cf6a10dbae0e8ae8defe728b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a matrix constructed from individual elements passed in row major order so that the matrix looks "correct" on the screen as you write this constructor on 4 lines of code as below. <a href="classmingfx_1_1_matrix4.html#add98bfa1cf6a10dbae0e8ae8defe728b">More...</a><br /></td></tr>
+<tr class="separator:add98bfa1cf6a10dbae0e8ae8defe728b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0232a58d20b1da5374cf8c72fb113a4e"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a0232a58d20b1da5374cf8c72fb113a4e">Scale</a> (const <a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> &amp;v)</td></tr>
+<tr class="memdesc:a0232a58d20b1da5374cf8c72fb113a4e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the scale matrix described by the vector. <a href="classmingfx_1_1_matrix4.html#a0232a58d20b1da5374cf8c72fb113a4e">More...</a><br /></td></tr>
+<tr class="separator:a0232a58d20b1da5374cf8c72fb113a4e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae82bab81df82dc03f5eb11e74ba1dd84"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#ae82bab81df82dc03f5eb11e74ba1dd84">Translation</a> (const <a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> &amp;v)</td></tr>
+<tr class="memdesc:ae82bab81df82dc03f5eb11e74ba1dd84"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the translation matrix described by the vector. <a href="classmingfx_1_1_matrix4.html#ae82bab81df82dc03f5eb11e74ba1dd84">More...</a><br /></td></tr>
+<tr class="separator:ae82bab81df82dc03f5eb11e74ba1dd84"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a48615deb30590055c0aa9f207eee7f08"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a48615deb30590055c0aa9f207eee7f08">RotationX</a> (const float radians)</td></tr>
+<tr class="memdesc:a48615deb30590055c0aa9f207eee7f08"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the rotation matrix about the x axis by the specified angle. <a href="classmingfx_1_1_matrix4.html#a48615deb30590055c0aa9f207eee7f08">More...</a><br /></td></tr>
+<tr class="separator:a48615deb30590055c0aa9f207eee7f08"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aef94f0e9d298a7ba57e0119ef09b71b6"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#aef94f0e9d298a7ba57e0119ef09b71b6">RotationY</a> (const float radians)</td></tr>
+<tr class="memdesc:aef94f0e9d298a7ba57e0119ef09b71b6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the rotation matrix about the y axis by the specified angle. <a href="classmingfx_1_1_matrix4.html#aef94f0e9d298a7ba57e0119ef09b71b6">More...</a><br /></td></tr>
+<tr class="separator:aef94f0e9d298a7ba57e0119ef09b71b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4bf1dced8875fdc5827b5b8869e9de93"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a4bf1dced8875fdc5827b5b8869e9de93">RotationZ</a> (const float radians)</td></tr>
+<tr class="memdesc:a4bf1dced8875fdc5827b5b8869e9de93"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the rotation matrix about the z axis by the specified angle. <a href="classmingfx_1_1_matrix4.html#a4bf1dced8875fdc5827b5b8869e9de93">More...</a><br /></td></tr>
+<tr class="separator:a4bf1dced8875fdc5827b5b8869e9de93"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acf4abaf4a45826f14b435edf80a8d0e0"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#acf4abaf4a45826f14b435edf80a8d0e0">Rotation</a> (const <a class="el" href="classmingfx_1_1_point3.html">Point3</a> &amp;p, const <a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> &amp;v, const float a)</td></tr>
+<tr class="memdesc:acf4abaf4a45826f14b435edf80a8d0e0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the rotation matrix around the vector v placed at point p, rotate by angle a. <a href="classmingfx_1_1_matrix4.html#acf4abaf4a45826f14b435edf80a8d0e0">More...</a><br /></td></tr>
+<tr class="separator:acf4abaf4a45826f14b435edf80a8d0e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae61cdabb318a03cd4dae8a1c8ecafa4d"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#ae61cdabb318a03cd4dae8a1c8ecafa4d">Align</a> (const <a class="el" href="classmingfx_1_1_point3.html">Point3</a> &amp;a_p, const <a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> &amp;a_v1, const <a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> &amp;a_v2, const <a class="el" href="classmingfx_1_1_point3.html">Point3</a> &amp;b_p, const <a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> &amp;b_v1, const <a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> &amp;b_v2)</td></tr>
+<tr class="memdesc:ae61cdabb318a03cd4dae8a1c8ecafa4d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a transformation matrix that maps a coordinate space, <em>a</em>, defined one point, <em>a_p</em>, and two vectors, <em>a_v1</em> and <em>a_v2</em>, to a new coordinate space, <em>b</em>, also defined by one point, <em>b_p</em>, and two vectors, <em>b_v1</em> and <em>b_v2</em>. The transformation will thus include both some rotation and some translation. Pseudocode example of aligning a billboard defined in the XY plane with a normal in the +Z direction and that rotates around the Y axis with a camera: <a href="classmingfx_1_1_matrix4.html#ae61cdabb318a03cd4dae8a1c8ecafa4d">More...</a><br /></td></tr>
+<tr class="separator:ae61cdabb318a03cd4dae8a1c8ecafa4d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4543695a6dfc996d0312b70c2eaa00de"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a4543695a6dfc996d0312b70c2eaa00de">LookAt</a> (<a class="el" href="classmingfx_1_1_point3.html">Point3</a> eye, <a class="el" href="classmingfx_1_1_point3.html">Point3</a> target, <a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> up)</td></tr>
+<tr class="memdesc:a4543695a6dfc996d0312b70c2eaa00de"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a view matrix that centers the camera at the 'eye' position and orients it to look at the desired 'target' point with the top of the screen pointed as closely as possible in the direction of the 'up' vector. <a href="classmingfx_1_1_matrix4.html#a4543695a6dfc996d0312b70c2eaa00de">More...</a><br /></td></tr>
+<tr class="separator:a4543695a6dfc996d0312b70c2eaa00de"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0e34aee86758a0397074590b87712c5e"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a0e34aee86758a0397074590b87712c5e">Perspective</a> (float fov_y_in_degrees, float aspect_ratio, float near_plane_dist, float far_plane_dist)</td></tr>
+<tr class="memdesc:a0e34aee86758a0397074590b87712c5e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a perspective projection matrix equivalent to the one gluPerspective creates. <a href="classmingfx_1_1_matrix4.html#a0e34aee86758a0397074590b87712c5e">More...</a><br /></td></tr>
+<tr class="separator:a0e34aee86758a0397074590b87712c5e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8e2f7b50cd2c8853e007829df9863722"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_matrix4.html#a8e2f7b50cd2c8853e007829df9863722">Frustum</a> (float left, float right, float bottom, float top, float near_plane_dist, float far_plane_dist)</td></tr>
+<tr class="memdesc:a8e2f7b50cd2c8853e007829df9863722"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a projection matrix equivalent the one glFrustum creates. <a href="classmingfx_1_1_matrix4.html#a8e2f7b50cd2c8853e007829df9863722">More...</a><br /></td></tr>
+<tr class="separator:a8e2f7b50cd2c8853e007829df9863722"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a50990f00b756d640670a0b02129afd22"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a50990f00b756d640670a0b02129afd22">&#9670;&nbsp;</a></span>Matrix4() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">mingfx::Matrix4::Matrix4 </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>The default constructor creates an identity matrix: </p>
+
+</div>
+</div>
+<a id="a09a366a3ef940ff355f8d5c521baa57d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a09a366a3ef940ff355f8d5c521baa57d">&#9670;&nbsp;</a></span>Matrix4() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">mingfx::Matrix4::Matrix4 </td>
+ <td>(</td>
+ <td class="paramtype">const float *&#160;</td>
+ <td class="paramname"><em>a</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Constructs a matrix given from an array of 16 floats in OpenGL matrix format (i.e., column major). </p>
+
+</div>
+</div>
+<a id="a0abaeb690794c4a55e74c9b5fd82d138"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0abaeb690794c4a55e74c9b5fd82d138">&#9670;&nbsp;</a></span>Matrix4() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">mingfx::Matrix4::Matrix4 </td>
+ <td>(</td>
+ <td class="paramtype">const std::vector&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>a</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Constructs a matrix given from a vector of 16 floats in OpenGL matrix format (i.e., column major). </p>
+
+</div>
+</div>
+<a id="a4bcf311614006c551f57d2b0dcd32d87"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4bcf311614006c551f57d2b0dcd32d87">&#9670;&nbsp;</a></span>Matrix4() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">mingfx::Matrix4::Matrix4 </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> &amp;&#160;</td>
+ <td class="paramname"><em>m2</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Copy constructor. </p>
+
+</div>
+</div>
+<a id="a8853a6b3fd0d08f1def5c9921bd47933"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8853a6b3fd0d08f1def5c9921bd47933">&#9670;&nbsp;</a></span>~Matrix4()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual mingfx::Matrix4::~Matrix4 </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Destructor. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="ae61cdabb318a03cd4dae8a1c8ecafa4d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae61cdabb318a03cd4dae8a1c8ecafa4d">&#9670;&nbsp;</a></span>Align()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> mingfx::Matrix4::Align </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_point3.html">Point3</a> &amp;&#160;</td>
+ <td class="paramname"><em>a_p</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> &amp;&#160;</td>
+ <td class="paramname"><em>a_v1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> &amp;&#160;</td>
+ <td class="paramname"><em>a_v2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_point3.html">Point3</a> &amp;&#160;</td>
+ <td class="paramname"><em>b_p</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> &amp;&#160;</td>
+ <td class="paramname"><em>b_v1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> &amp;&#160;</td>
+ <td class="paramname"><em>b_v2</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Creates a transformation matrix that maps a coordinate space, <em>a</em>, defined one point, <em>a_p</em>, and two vectors, <em>a_v1</em> and <em>a_v2</em>, to a new coordinate space, <em>b</em>, also defined by one point, <em>b_p</em>, and two vectors, <em>b_v1</em> and <em>b_v2</em>. The transformation will thus include both some rotation and some translation. Pseudocode example of aligning a billboard defined in the XY plane with a normal in the +Z direction and that rotates around the Y axis with a camera: </p>
+<div class="fragment"><div class="line"><span class="comment">// define a coordiante space for a canonical billboard geometry defined</span></div>
+<div class="line"><span class="comment">// right at the origin.</span></div>
+<div class="line">Point3 a_p = Point3(0,0,0); <span class="comment">// billboard&#39;s initial base position</span></div>
+<div class="line">Vector3 a_v1 = Vector3(0,1,0); <span class="comment">// billboard&#39;s initial up direction</span></div>
+<div class="line">Vector3 a_v2 = Vector3(0,0,1); <span class="comment">// billboard&#39;s initial normal direction</span></div>
+<div class="line"> </div>
+<div class="line"><span class="comment">// define a coordinate space for where we want this billboard to go and</span></div>
+<div class="line"><span class="comment">// the direction it should be facing</span></div>
+<div class="line">Point3 b_p = desired_base_pos; <span class="comment">// new position for the billboard</span></div>
+<div class="line">Vector3 b_v1 = Vector3(0,1,0); <span class="comment">// +Y is still up, doesn&#39;t change</span></div>
+<div class="line">Vector3 b_v2 = (camera.eye() - desired_base_pos); <span class="comment">// the normal should point toward the camera</span></div>
+<div class="line">b_v2[1] = 0.0; <span class="comment">// with 0 change in Y so the billboard does not tilt</span></div>
+<div class="line">b_v2.Normalize(); <span class="comment">// convert to a unit vector</span></div>
+<div class="line"> </div>
+<div class="line"><a class="code" href="classmingfx_1_1_matrix4.html#a50990f00b756d640670a0b02129afd22">Matrix4</a> billboard_model_matrix = <a class="code" href="classmingfx_1_1_matrix4.html#ae61cdabb318a03cd4dae8a1c8ecafa4d">Matrix4::Align</a>(a_p, a_v1, a_v2, b_p, b_v1, b_v2);</div>
+<div class="ttc" id="aclassmingfx_1_1_matrix4_html_ae61cdabb318a03cd4dae8a1c8ecafa4d"><div class="ttname"><a href="classmingfx_1_1_matrix4.html#ae61cdabb318a03cd4dae8a1c8ecafa4d">mingfx::Matrix4::Align</a></div><div class="ttdeci">static Matrix4 Align(const Point3 &amp;a_p, const Vector3 &amp;a_v1, const Vector3 &amp;a_v2, const Point3 &amp;b_p, const Vector3 &amp;b_v1, const Vector3 &amp;b_v2)</div><div class="ttdoc">Creates a transformation matrix that maps a coordinate space, a, defined one point,...</div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a0d88ba8e15325d135157d115f2412e91"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0d88ba8e15325d135157d115f2412e91">&#9670;&nbsp;</a></span>Cofactor()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> mingfx::Matrix4::Cofactor </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the cofactor matrix. </p>
+
+</div>
+</div>
+<a id="ae991be2b3bca290b44e676a9f8dc13bd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae991be2b3bca290b44e676a9f8dc13bd">&#9670;&nbsp;</a></span>ColumnToPoint3()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classmingfx_1_1_point3.html">Point3</a> mingfx::Matrix4::ColumnToPoint3 </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the c-th column of the matrix as a Vector type, e.g.,: <a class="el" href="classmingfx_1_1_point3.html" title="A 3D Point with floating point coordinates, used for storing vertices and all sorts of other 3D graph...">Point3</a> pos = mat.getColumnAsPoint3(3);. </p>
+
+</div>
+</div>
+<a id="a7396dbff36cb732e1bd878020f52bbc3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7396dbff36cb732e1bd878020f52bbc3">&#9670;&nbsp;</a></span>ColumnToVector3()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> mingfx::Matrix4::ColumnToVector3 </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the c-th column of the matrix as a Vector type, e.g.,: <a class="el" href="classmingfx_1_1_vector3.html" title="A 3D Vector with floating point coordinates, used for storing normals and all sorts of other 3D graph...">Vector3</a> xAxis = mat.getColumnAsVector3(0); <a class="el" href="classmingfx_1_1_vector3.html" title="A 3D Vector with floating point coordinates, used for storing normals and all sorts of other 3D graph...">Vector3</a> yAxis = mat.getColumnAsVector3(1); <a class="el" href="classmingfx_1_1_vector3.html" title="A 3D Vector with floating point coordinates, used for storing normals and all sorts of other 3D graph...">Vector3</a> zAxis = mat.getColumnAsVector3(2);. </p>
+
+</div>
+</div>
+<a id="a0127ebae92b50e4f10ebee8565b0248c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0127ebae92b50e4f10ebee8565b0248c">&#9670;&nbsp;</a></span>Determinant()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float mingfx::Matrix4::Determinant </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the determinant of the 4x4 matrix. </p>
+
+</div>
+</div>
+<a id="add98bfa1cf6a10dbae0e8ae8defe728b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#add98bfa1cf6a10dbae0e8ae8defe728b">&#9670;&nbsp;</a></span>FromRowMajorElements()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> mingfx::Matrix4::FromRowMajorElements </td>
+ <td>(</td>
+ <td class="paramtype">const float&#160;</td>
+ <td class="paramname"><em>r1c1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const float&#160;</td>
+ <td class="paramname"><em>r1c2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const float&#160;</td>
+ <td class="paramname"><em>r1c3</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const float&#160;</td>
+ <td class="paramname"><em>r1c4</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const float&#160;</td>
+ <td class="paramname"><em>r2c1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const float&#160;</td>
+ <td class="paramname"><em>r2c2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const float&#160;</td>
+ <td class="paramname"><em>r2c3</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const float&#160;</td>
+ <td class="paramname"><em>r2c4</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const float&#160;</td>
+ <td class="paramname"><em>r3c1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const float&#160;</td>
+ <td class="paramname"><em>r3c2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const float&#160;</td>
+ <td class="paramname"><em>r3c3</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const float&#160;</td>
+ <td class="paramname"><em>r3c4</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const float&#160;</td>
+ <td class="paramname"><em>r4c1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const float&#160;</td>
+ <td class="paramname"><em>r4c2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const float&#160;</td>
+ <td class="paramname"><em>r4c3</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const float&#160;</td>
+ <td class="paramname"><em>r4c4</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns a matrix constructed from individual elements passed in row major order so that the matrix looks "correct" on the screen as you write this constructor on 4 lines of code as below. </p>
+<p>Note the that internally the matrix constructed will be stored in a 16 element column major array to be consistent with OpenGL. </p>
+
+</div>
+</div>
+<a id="a8e2f7b50cd2c8853e007829df9863722"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8e2f7b50cd2c8853e007829df9863722">&#9670;&nbsp;</a></span>Frustum()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> mingfx::Matrix4::Frustum </td>
+ <td>(</td>
+ <td class="paramtype">float&#160;</td>
+ <td class="paramname"><em>left</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float&#160;</td>
+ <td class="paramname"><em>right</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float&#160;</td>
+ <td class="paramname"><em>bottom</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float&#160;</td>
+ <td class="paramname"><em>top</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float&#160;</td>
+ <td class="paramname"><em>near_plane_dist</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float&#160;</td>
+ <td class="paramname"><em>far_plane_dist</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns a projection matrix equivalent the one glFrustum creates. </p>
+
+</div>
+</div>
+<a id="ab3f360906e15730eee621826b5f0bbc5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab3f360906e15730eee621826b5f0bbc5">&#9670;&nbsp;</a></span>Inverse()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> mingfx::Matrix4::Inverse </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the inverse of the 4x4 matrix if it is nonsingular. If it is singular, then returns the identity matrix. </p>
+
+</div>
+</div>
+<a id="a4543695a6dfc996d0312b70c2eaa00de"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4543695a6dfc996d0312b70c2eaa00de">&#9670;&nbsp;</a></span>LookAt()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> mingfx::Matrix4::LookAt </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classmingfx_1_1_point3.html">Point3</a>&#160;</td>
+ <td class="paramname"><em>eye</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classmingfx_1_1_point3.html">Point3</a>&#160;</td>
+ <td class="paramname"><em>target</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classmingfx_1_1_vector3.html">Vector3</a>&#160;</td>
+ <td class="paramname"><em>up</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns a view matrix that centers the camera at the 'eye' position and orients it to look at the desired 'target' point with the top of the screen pointed as closely as possible in the direction of the 'up' vector. </p>
+
+</div>
+</div>
+<a id="ab186b0ae1ae669346c0718c2489cd71b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab186b0ae1ae669346c0718c2489cd71b">&#9670;&nbsp;</a></span>operator!=()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool mingfx::Matrix4::operator!= </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> &amp;&#160;</td>
+ <td class="paramname"><em>m2</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Check for "inequality", taking floating point imprecision into account. </p>
+
+</div>
+</div>
+<a id="a470bba77b8e3c47de7adaa18046e6096"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a470bba77b8e3c47de7adaa18046e6096">&#9670;&nbsp;</a></span>operator()() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float&amp; mingfx::Matrix4::operator() </td>
+ <td>(</td>
+ <td class="paramtype">const int&#160;</td>
+ <td class="paramname"><em>row</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const int&#160;</td>
+ <td class="paramname"><em>col</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Access an individual element of the array using the syntax: <a class="el" href="classmingfx_1_1_matrix4.html" title="A 4x4 transformation matrix stored internally as an array of floats in column-major order so as to be...">Matrix4</a> mat; mat(1,2) = 1.0;. </p>
+
+</div>
+</div>
+<a id="aa324d0cec02c452fb938af28725d5df9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa324d0cec02c452fb938af28725d5df9">&#9670;&nbsp;</a></span>operator()() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float mingfx::Matrix4::operator() </td>
+ <td>(</td>
+ <td class="paramtype">const int&#160;</td>
+ <td class="paramname"><em>row</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const int&#160;</td>
+ <td class="paramname"><em>col</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Access an individual element of the array using the syntax: <a class="el" href="classmingfx_1_1_matrix4.html" title="A 4x4 transformation matrix stored internally as an array of floats in column-major order so as to be...">Matrix4</a> mat; float row1col2 = mat(1,2);. </p>
+
+</div>
+</div>
+<a id="a9ad8a8bc180ce213956d6d7d3fa19770"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9ad8a8bc180ce213956d6d7d3fa19770">&#9670;&nbsp;</a></span>operator=()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a>&amp; mingfx::Matrix4::operator= </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> &amp;&#160;</td>
+ <td class="paramname"><em>m2</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Matrix assignment operator. </p>
+
+</div>
+</div>
+<a id="a9ec2ee167a450cd7b992384e4cc5bb73"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9ec2ee167a450cd7b992384e4cc5bb73">&#9670;&nbsp;</a></span>operator==()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool mingfx::Matrix4::operator== </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> &amp;&#160;</td>
+ <td class="paramname"><em>m2</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Check for "equality", taking floating point imprecision into account. </p>
+
+</div>
+</div>
+<a id="af9b02807d81eac55d66238f246c53656"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af9b02807d81eac55d66238f246c53656">&#9670;&nbsp;</a></span>operator[]() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float&amp; mingfx::Matrix4::operator[] </td>
+ <td>(</td>
+ <td class="paramtype">const int&#160;</td>
+ <td class="paramname"><em>i</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Accesses the ith element of the raw data array used to store the matrix. This is a 1D array of 16-elements stored in column-major order. </p>
+
+</div>
+</div>
+<a id="acd64f0db45e255d61dde4f6fa10a4127"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acd64f0db45e255d61dde4f6fa10a4127">&#9670;&nbsp;</a></span>operator[]() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float mingfx::Matrix4::operator[] </td>
+ <td>(</td>
+ <td class="paramtype">const int&#160;</td>
+ <td class="paramname"><em>i</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Accesses the ith element of the raw data array used to store the matrix. This is a 1D array of 16-elements stored in column-major order. </p>
+
+</div>
+</div>
+<a id="a9ad5c85784e84fa0a941361eaaae0250"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9ad5c85784e84fa0a941361eaaae0250">&#9670;&nbsp;</a></span>Orthonormal()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> mingfx::Matrix4::Orthonormal </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns an orthonormal version of the matrix, i.e., guarantees that the rotational component of the matrix is built from column vectors that are all unit vectors and orthogonal to each other. </p>
+
+</div>
+</div>
+<a id="a0e34aee86758a0397074590b87712c5e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0e34aee86758a0397074590b87712c5e">&#9670;&nbsp;</a></span>Perspective()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> mingfx::Matrix4::Perspective </td>
+ <td>(</td>
+ <td class="paramtype">float&#160;</td>
+ <td class="paramname"><em>fov_y_in_degrees</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float&#160;</td>
+ <td class="paramname"><em>aspect_ratio</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float&#160;</td>
+ <td class="paramname"><em>near_plane_dist</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float&#160;</td>
+ <td class="paramname"><em>far_plane_dist</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns a perspective projection matrix equivalent to the one gluPerspective creates. </p>
+
+</div>
+</div>
+<a id="acf4abaf4a45826f14b435edf80a8d0e0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acf4abaf4a45826f14b435edf80a8d0e0">&#9670;&nbsp;</a></span>Rotation()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> mingfx::Matrix4::Rotation </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_point3.html">Point3</a> &amp;&#160;</td>
+ <td class="paramname"><em>p</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> &amp;&#160;</td>
+ <td class="paramname"><em>v</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const float&#160;</td>
+ <td class="paramname"><em>a</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the rotation matrix around the vector v placed at point p, rotate by angle a. </p>
+
+</div>
+</div>
+<a id="a48615deb30590055c0aa9f207eee7f08"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a48615deb30590055c0aa9f207eee7f08">&#9670;&nbsp;</a></span>RotationX()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> mingfx::Matrix4::RotationX </td>
+ <td>(</td>
+ <td class="paramtype">const float&#160;</td>
+ <td class="paramname"><em>radians</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the rotation matrix about the x axis by the specified angle. </p>
+
+</div>
+</div>
+<a id="aef94f0e9d298a7ba57e0119ef09b71b6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aef94f0e9d298a7ba57e0119ef09b71b6">&#9670;&nbsp;</a></span>RotationY()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> mingfx::Matrix4::RotationY </td>
+ <td>(</td>
+ <td class="paramtype">const float&#160;</td>
+ <td class="paramname"><em>radians</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the rotation matrix about the y axis by the specified angle. </p>
+
+</div>
+</div>
+<a id="a4bf1dced8875fdc5827b5b8869e9de93"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4bf1dced8875fdc5827b5b8869e9de93">&#9670;&nbsp;</a></span>RotationZ()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> mingfx::Matrix4::RotationZ </td>
+ <td>(</td>
+ <td class="paramtype">const float&#160;</td>
+ <td class="paramname"><em>radians</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the rotation matrix about the z axis by the specified angle. </p>
+
+</div>
+</div>
+<a id="a0232a58d20b1da5374cf8c72fb113a4e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0232a58d20b1da5374cf8c72fb113a4e">&#9670;&nbsp;</a></span>Scale()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> mingfx::Matrix4::Scale </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> &amp;&#160;</td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the scale matrix described by the vector. </p>
+
+</div>
+</div>
+<a id="a3d9898bfac2510a695df6b033054e481"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3d9898bfac2510a695df6b033054e481">&#9670;&nbsp;</a></span>SubDeterminant()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float mingfx::Matrix4::SubDeterminant </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>exclude_row</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>exclude_col</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the determinant of the 3x3 matrix formed by excluding the specified row and column from the 4x4 matrix. </p>
+
+</div>
+</div>
+<a id="a4e9433f0482b5e9688c12398900608db"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4e9433f0482b5e9688c12398900608db">&#9670;&nbsp;</a></span>ToVector()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::vector&lt;float&gt; mingfx::Matrix4::ToVector </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae82bab81df82dc03f5eb11e74ba1dd84"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae82bab81df82dc03f5eb11e74ba1dd84">&#9670;&nbsp;</a></span>Translation()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> mingfx::Matrix4::Translation </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_vector3.html">Vector3</a> &amp;&#160;</td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the translation matrix described by the vector. </p>
+
+</div>
+</div>
+<a id="afd1030205567d23d4a2d1240d8214850"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afd1030205567d23d4a2d1240d8214850">&#9670;&nbsp;</a></span>Transpose()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classmingfx_1_1_matrix4.html">Matrix4</a> mingfx::Matrix4::Transpose </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the transpose of the matrix. </p>
+
+</div>
+</div>
+<a id="a2b7b30f23f08d70e83c7b7e01945dd3c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2b7b30f23f08d70e83c7b7e01945dd3c">&#9670;&nbsp;</a></span>value_ptr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const float* mingfx::Matrix4::value_ptr </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns a pointer to the raw data array used to store the matrix. This is a 1D array of 16-elements stored in column-major order. </p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>src/<a class="el" href="matrix4_8h_source.html">matrix4.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.9.1-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.9.1
+</small></address>
+</body>
+</html>