summaryrefslogtreecommitdiff
path: root/apps/graphics/traveler/include/trv_trigtbl.h
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2014-12-05 08:44:55 -0600
committerGregory Nutt <gnutt@nuttx.org>2014-12-05 08:44:55 -0600
commitd2b407f9f9272b8f7dbc97c494d11f2468157363 (patch)
treeba1c4b3164a826bb440266d48b82031b9c0f4d5c /apps/graphics/traveler/include/trv_trigtbl.h
parent86e5c3a5b0792e9234f98e4aeb1c0721b56352b2 (diff)
downloadnuttx-d2b407f9f9272b8f7dbc97c494d11f2468157363.tar.gz
nuttx-d2b407f9f9272b8f7dbc97c494d11f2468157363.tar.bz2
nuttx-d2b407f9f9272b8f7dbc97c494d11f2468157363.zip
Add first of several ray cast/rendering files
Diffstat (limited to 'apps/graphics/traveler/include/trv_trigtbl.h')
-rw-r--r--apps/graphics/traveler/include/trv_trigtbl.h58
1 files changed, 58 insertions, 0 deletions
diff --git a/apps/graphics/traveler/include/trv_trigtbl.h b/apps/graphics/traveler/include/trv_trigtbl.h
index deac5a0fb..999270a12 100644
--- a/apps/graphics/traveler/include/trv_trigtbl.h
+++ b/apps/graphics/traveler/include/trv_trigtbl.h
@@ -45,6 +45,7 @@
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
+/* Angles *******************************************************************/
/* These are definitions of commonly used angles. */
@@ -69,6 +70,63 @@
#define ANGLE_270 1440
#define ANGLE_360 1920
+/* Fixed precision definitions **********************************************/
+
+/* SMALL precision (6 bits past binary point) */
+/* This occurs frequently because each CELL is 64x64 */
+
+#define sUNITY 64
+#define sHALF 32
+#define sQUARTER 16
+#define sSHIFT 6
+#define sMASK 63
+
+#define sTRUNC(a) ((a) >> sSHIFT)
+#define sROUND(a) (((a) + sHALF) >> sSHIFT)
+#define sFIX(a) ((a) << sSHIFT)
+#define sSNAP(a) ((a) & (~sMASK))
+#define sFRAC(a) ((a) & sMASK)
+
+#define sMUL(a,b) (((int32_t)(a) * (int32_t)(b)) >> sSHIFT )
+#define sDIV(a,b) (((int32_t)(a) << sSHIFT) / (b))
+#define sFLOAT(a) ((float)(a) / (float)sUNITY)
+
+/* DOUBLE precision (12 bits past binary point) */
+/* This precision results when two SMALL precision numbers are multiplied */
+
+#define dUNITY 4096
+#define dHALF 2048
+#define dSHIFT 12
+#define dMASK 4095
+
+#define dTRUNC(a) ((a) >> dSHIFT)
+#define dROUND(a) (((a) + dHALF) >> dSHIFT)
+#define dFIX(a) ((a) << dSHIFT)
+#define dSNAP(a) ((a) & (~dMASK))
+#define dFRAC(a) ((a) & dMASK)
+
+/* TRIPLE precision (18 bits past binary point) */
+/* This precision results when a SMALL and a DOUBLE precision number
+ * are multiplied
+ */
+
+#define tSHIFT 18
+
+/* QUAD precision (24 bits past binary point) */
+/* This precision results when two DOUBLE precision numbers are multiplied */
+
+#define qSHIFT 24
+
+/* BIG precision (16 bits past binary point) */
+/* This is convenient precision because it is easy to extract the integer
+ * portion without shifting or masking
+ */
+
+#define bUNITY 65536
+#define bHALF 32768
+#define bSHIFT 16
+#define bMASK 65535
+
/****************************************************************************
* Public Function Prototypes
****************************************************************************/