ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/oocmorton.c
Revision: 2.2
Committed: Mon Aug 14 21:12:10 2017 UTC (6 years, 8 months ago) by rschregle
Content type: text/plain
Branch: MAIN
CVS Tags: rad5R4, rad5R2, rad5R3, rad5R1, HEAD
Changes since 2.1: +10 -1 lines
Log Message:
Updated photon map code for Windows; no multproc or ooC for now

File Contents

# Content
1 #ifndef lint
2 static const char RCSid[] = "$Id$";
3 #endif
4
5
6 /*
7 =========================================================================
8 Routines to generate and compare Morton Codes, i.e. indices on space
9 filling Z-curves.
10
11 Roland Schregle (roland.schregle@{hslu.ch, gmail.com})
12 (c) Lucerne University of Applied Sciences and Arts,
13 supported by the Swiss National Science Foundation (SNSF, #147053)
14 =========================================================================
15
16 $Id: oocmorton.c,v 2.1 2016/05/17 17:39:47 rschregle Exp $
17 */
18
19
20 #if !defined(_WIN32) && !defined(_WIN64) || defined(PMAP_OOC)
21 /* No Windoze support for now */
22
23 #include "oocmorton.h"
24
25
26
27 OOC_MortonIdx OOC_Key2Morton (const FVECT key, const FVECT org, RREAL scale)
28 /* Compute Morton code (Z-curve index) of length 3 * OOC_MORTON_BITS bits
29 * for 3D key within bounding box defined by org and scaled to maximum index
30 * with scale */
31 {
32 unsigned i;
33 OOC_MortonIdx k [3];
34
35 /* Normalise key and map each dim to int of OOC_MORTON_BITS */
36 for (i = 0; i < 3; i++)
37 k [i] = scale * (key [i] - org [i]);
38
39 /* Interleave each dim with zeros and merge */
40 return OOC_BitInterleave(k [0]) | OOC_BitInterleave(k [1]) << 1 |
41 OOC_BitInterleave(k [2]) << 2;
42 }
43
44 #endif /* NIX / PMAP_OOC */