summaryrefslogtreecommitdiff
path: root/manuals/chickadee/Matrices.html
diff options
context:
space:
mode:
authorDavid Thompson <dthompson2@worcester.edu>2018-12-12 09:20:10 -0500
committerDavid Thompson <dthompson2@worcester.edu>2018-12-12 09:20:10 -0500
commitf16fed3d50fd3d56deb46a3d4641a81460e389de (patch)
tree71659ed643b65eadb17110b3f8f0c5d5cfdd3031 /manuals/chickadee/Matrices.html
parentc4b418c2dcfba3c741f67058a51a3e490aa4b297 (diff)
Update Chickadee manual and home page for 0.3.0.
Better late than never!
Diffstat (limited to 'manuals/chickadee/Matrices.html')
-rw-r--r--manuals/chickadee/Matrices.html175
1 files changed, 166 insertions, 9 deletions
diff --git a/manuals/chickadee/Matrices.html b/manuals/chickadee/Matrices.html
index 8630efd..5f664ef 100644
--- a/manuals/chickadee/Matrices.html
+++ b/manuals/chickadee/Matrices.html
@@ -16,22 +16,22 @@ Foundation Web site at http://www.gnu.org/licenses/fdl.html.
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
-<!-- Created by GNU Texinfo 6.3, http://www.gnu.org/software/texinfo/ -->
+<!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
<head>
-<title>The Chickadee Game Toolkit: Matrices</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Matrices (The Chickadee Game Toolkit)</title>
-<meta name="description" content="The Chickadee Game Toolkit: Matrices">
-<meta name="keywords" content="The Chickadee Game Toolkit: Matrices">
+<meta name="description" content="Matrices (The Chickadee Game Toolkit)">
+<meta name="keywords" content="Matrices (The Chickadee Game Toolkit)">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Index.html#Index" rel="index" title="Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Math.html#Math" rel="up" title="Math">
-<link href="Rectangles.html#Rectangles" rel="next" title="Rectangles">
-<link href="Vectors.html#Vectors" rel="prev" title="Vectors">
+<link href="Quaternions.html#Quaternions" rel="next" title="Quaternions">
+<link href="Grid.html#Grid" rel="prev" title="Grid">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
@@ -90,12 +90,169 @@ ul.no-bullet {list-style: none}
<a name="Matrices"></a>
<div class="header">
<p>
-Next: <a href="Rectangles.html#Rectangles" accesskey="n" rel="next">Rectangles</a>, Previous: <a href="Vectors.html#Vectors" accesskey="p" rel="prev">Vectors</a>, Up: <a href="Math.html#Math" accesskey="u" rel="up">Math</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
+Next: <a href="Quaternions.html#Quaternions" accesskey="n" rel="next">Quaternions</a>, Previous: <a href="Grid.html#Grid" accesskey="p" rel="prev">Grid</a>, Up: <a href="Math.html#Math" accesskey="u" rel="up">Math</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Matrices-1"></a>
-<h4 class="subsection">2.3.2 Matrices</h4>
+<h4 class="subsection">2.2.5 Matrices</h4>
+
+<p>The <code>(chickadee math matrix)</code> module provides an interface for
+working with the most common type of matrices in game development: 4x4
+transformation matrices.
+</p>
+<a name="Another-Note-About-Performance"></a>
+<h4 class="subsubsection">2.2.5.1 Another Note About Performance</h4>
+
+<p>Much like the vector API, the matrix API is commonly used in
+performance critical code paths. In order to reduce the amount of
+garbage generated and improve matrix multiplication performance, there
+are many procedures that perform in-place modifications of matrix
+objects.
+</p>
+<a name="Matrix-Operations"></a>
+<h4 class="subsubsection">2.2.5.2 Matrix Operations</h4>
+
+<dl>
+<dt><a name="index-make_002dmatrix4"></a>Procedure: <strong>make-matrix4</strong> <em><var>aa</var> <var>ab</var> <var>ac</var> <var>ad</var> <var>ba</var> <var>bb</var> <var>bc</var> <var>bd</var> <var>ca</var> <var>cb</var> <var>cc</var> <var>cd</var> <var>da</var> <var>db</var> <var>dc</var> <var>dd</var></em></dt>
+<dd>
+<p>Return a new 4x4 matrix initialized with the given 16 values in
+column-major format.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-make_002dnull_002dmatrix4"></a>Procedure: <strong>make-null-matrix4</strong></dt>
+<dd><p>Return a new 4x4 matrix with all values initialized to 0.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-make_002didentity_002dmatrix4"></a>Procedure: <strong>make-identity-matrix4</strong></dt>
+<dd><p>Return a new 4x4 identity matrix. Any matrix multiplied by the
+identity matrix yields the original matrix. This procedure is
+equivalent to the following code:
+</p>
+<div class="example">
+<pre class="example">(make-matrix4 1 0 0 0
+ 0 1 0 0
+ 0 0 1 0
+ 0 0 0 1)
+</pre></div>
+
+</dd></dl>
+
+<dl>
+<dt><a name="index-matrix4_003f"></a>Procedure: <strong>matrix4?</strong> <em><var>obj</var></em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a 4x4 matrix.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-matrix4_002a"></a>Procedure: <strong>matrix4*</strong> <em>. <var>matrices</var></em></dt>
+<dd><p>Return a new 4x4 matrix containing the product of multiplying all of
+the given <var>matrices</var>.
+</p>
+<p>Note: Remember that matrix multiplication is <strong>not</strong> commutative!
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-orthographic_002dprojection"></a>Procedure: <strong>orthographic-projection</strong> <em><var>left</var> <var>right</var> <var>top</var> <var>bottom</var> <var>near</var> <var>far</var></em></dt>
+<dd>
+<p>Return a new 4x4 matrix that represents an orthographic (2D)
+projection for the horizontal clipping plane <var>top</var> and
+<var>bottom</var>, the vertical clipping plane <var>top</var> and <var>bottom</var>,
+and the depth clipping plane <var>near</var> and <var>far</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-perspective_002dprojection"></a>Procedure: <strong>perspective-projection</strong> <em><var>fov</var> <var>aspect-ratio</var> <var>near</var> <var>far</var></em></dt>
+<dd>
+<p>Return a new 4x4 matrix that represents a perspective (3D) projection
+with a field of vision of <var>fov</var> radians, an aspect ratio of
+<var>aspect-ratio</var>, and a depth clipping plane defined by <var>near</var>
+and <var>far</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-matrix4_002dtranslate"></a>Procedure: <strong>matrix4-translate</strong> <em><var>x</var></em></dt>
+<dd><p>Return a new 4x4 matrix that represents a translation by <var>x</var>, a 2D
+vector, a 3D vector, or a rectangle (in which case the bottom-left
+corner of the rectangle is used).
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-matrix4_002dscale"></a>Procedure: <strong>matrix4-scale</strong> <em><var>s</var></em></dt>
+<dd><p>Return a new 4x4 matrix that represents a scaling along the X, Y, and
+Z axes by the scaling factor <var>s</var>, a real number.
+</p></dd></dl>
+<dl>
+<dt><a name="index-matrix4_002drotate"></a>Procedure: <strong>matrix4-rotate</strong> <em><var>q</var></em></dt>
+<dd><p>Return a new 4x4 matrix that represents a rotation about an arbitrary
+axis defined by the quaternion <var>q</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-matrix4_002drotate_002dz"></a>Procedure: <strong>matrix4-rotate-z</strong> <em><var>theta</var></em></dt>
+<dd><p>Return a new 4x4 matrix that represents a rotation about the Z axis by
+<var>theta</var> radians.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-matrix4_002didentity_0021"></a>Procedure: <strong>matrix4-identity!</strong> <em><var>matrix</var></em></dt>
+<dd><p>Modify <var>matrix</var> in-place to contain the identity matrix.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-matrix4_002dmult_0021"></a>Procedure: <strong>matrix4-mult!</strong> <em><var>dest</var> <var>a</var> <var>b</var></em></dt>
+<dd><p>Multiply the 4x4 matrix <var>a</var> by the 4x4 matrix <var>b</var> and store
+the result in the 4x4 matrix <var>dest</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-matrix4_002dtranslate_0021"></a>Procedure: <strong>matrix4-translate!</strong> <em><var>matrix</var> <var>x</var></em></dt>
+<dd><p>Modify <var>matrix</var> in-place to contain a translation by <var>x</var>, a 2D
+vector, a 3D vector, or a rectangle (in which case the bottom-left
+corner of the rectangle is used).
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-matrix4_002dscale_0021"></a>Procedure: <strong>matrix4-scale!</strong> <em><var>matrix</var> <var>s</var></em></dt>
+<dd><p>Modify <var>matrix</var> in-place to contain a scaling along the X, Y, and
+Z axes by the scaling factor <var>s</var>, a real number.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-matrix4_002drotate_0021"></a>Procedure: <strong>matrix4-rotate!</strong> <em><var>matrix</var> <var>q</var></em></dt>
+<dd><p>Modify <var>matrix</var> in-place to contain a rotation about an arbitrary
+axis defined by the quaternion <var>q</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-matrix4_002drotate_002dz_0021"></a>Procedure: <strong>matrix4-rotate-z!</strong> <em><var>matrix</var> <var>theta</var></em></dt>
+<dd><p>Modify <var>matrix</var> in-place to contain a rotation about the Z axis by
+<var>theta</var> radians.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-matrix4_002d2d_002dtransform_0021"></a>Procedure: <strong>matrix4-2d-transform!</strong> <em><var>matrix</var> [#:origin] [#:position] [#:rotation] [#:scale] [#:skew]</em></dt>
+<dd>
+<p>Modify <var>matrix</var> in-place to contain the transformation described
+by <var>position</var>, a 2D vector or rectangle, <var>rotation</var>, a scalar
+representing a rotation about the Z axis, <var>scale</var>, a 2D vector,
+and <var>skew</var>, a 2D vector. The transformation happens with respect
+to <var>origin</var>, a 2D vector. If an argument is not provided, that
+particular transformation will not be included in the result.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-transform_0021"></a>Procedure: <strong>transform!</strong> <em><var>matrix</var> <var>v</var></em></dt>
+<dd><p>Modify the 2D vector <var>v</var> in-place by multiplying it by the 4x4
+matrix <var>matrix</var>.
+</p></dd></dl>
+
+<hr>
+<div class="header">
+<p>
+Next: <a href="Quaternions.html#Quaternions" accesskey="n" rel="next">Quaternions</a>, Previous: <a href="Grid.html#Grid" accesskey="p" rel="prev">Grid</a>, Up: <a href="Math.html#Math" accesskey="u" rel="up">Math</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
+</div>