diff options
Diffstat (limited to 'manuals/chickadee/Matrices.html')
-rw-r--r-- | manuals/chickadee/Matrices.html | 175 |
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> [<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> [<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> [<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> |