Tachyon (current)  Current Main Branch
grid.h
Go to the documentation of this file.
1 /*
2  * grid.h - spatial subdivision efficiency structures
3  *
4  * (C) Copyright 1994-2022 John E. Stone
5  * SPDX-License-Identifier: BSD-3-Clause
6  *
7  * $Id: grid.h,v 1.19 2022/02/18 17:55:28 johns Exp $
8  *
9  */
10 
11 int engrid_scene(scenedef * scene, int boundthresh);
12 object * newgrid(scenedef * scene, int xsize, int ysize, int zsize,
13  vector min, vector max);
14 
15 #ifdef GRID_PRIVATE
16 
17 typedef struct objectlist {
18  struct objectlist * next;
19  object * obj;
20 } objectlist;
21 
22 typedef struct {
23  RT_OBJECT_HEAD
24  int xsize;
25  int ysize;
26  int zsize;
27  vector min;
28  vector max;
29  vector voxsize;
30  object * objects;
31  objectlist ** cells;
32 } grid;
33 
34 typedef struct {
35  int x;
36  int y;
37  int z;
38 } gridindex;
39 
41 #define voxel2x(g,X) ((X) * (g->voxsize.x) + (g->min.x))
42 
43 #define voxel2y(g,Y) ((Y) * (g->voxsize.y) + (g->min.y))
44 
45 #define voxel2z(g,Z) ((Z) * (g->voxsize.z) + (g->min.z))
46 
48 #define x2voxel(g,x) (((x) - g->min.x) / g->voxsize.x)
49 
50 #define y2voxel(g,y) (((y) - g->min.y) / g->voxsize.y)
51 
52 #define z2voxel(g,z) (((z) - g->min.z) / g->voxsize.z)
53 
54 
55 static void gridstats(int xs, int ys, int zs, int numobj);
56 static int grid_bbox(void * obj, vector * min, vector * max);
57 static void grid_free(void * v);
58 
59 static ptrdiff_t cellbound(const grid *g, const gridindex *index, vector * cmin, vector * cmax);
60 
61 static ptrdiff_t engrid_objlist(grid * g, object ** list);
62 static int engrid_object(grid * g, object * obj, int addtolist);
63 
64 static int engrid_objectlist(grid * g, objectlist ** list);
65 static int engrid_cell(scenedef *, int, grid *, gridindex *);
66 
67 static int pos2grid(grid * g, vector * pos, gridindex * index);
68 static void grid_intersect(const grid *, ray *);
69 static int grid_bounds_intersect(const grid * g, const ray * ry, flt *hitnear, flt *hitfar);
70 
71 #endif
72 
73 
static ptrdiff_t cellbound(const grid *g, const gridindex *index, vector *cmin, vector *cmax)
Definition: grid.c:137
static int pos2grid(grid *g, vector *pos, gridindex *index)
Definition: grid.c:452
object * newgrid(scenedef *scene, int xsize, int ysize, int zsize, vector min, vector max)
Definition: grid.c:41
double flt
generic floating point number, using double
Definition: tachyon.h:47
static int grid_bounds_intersect(const grid *g, const ray *ry, flt *hitnear, flt *hitfar)
Definition: grid.c:638
int engrid_scene(scenedef *scene, int boundthresh)
Definition: grid.c:224
static int engrid_object(grid *g, object *obj, int addtolist)
Definition: grid.c:396
static void gridstats(int xs, int ys, int zs, int numobj)
Definition: grid.c:216
static void grid_free(void *v)
Definition: grid.c:80
static int engrid_cell(scenedef *scene, int boundthresh, grid *gold, gridindex *index)
Definition: grid.c:315
static void grid_intersect(const grid *g, ray *ry)
Definition: grid.c:479
static int engrid_objectlist(grid *g, objectlist **list)
Definition: grid.c:368
static ptrdiff_t engrid_objlist(grid *g, object **list)
Definition: grid.c:288
static int grid_bbox(void *obj, vector *min, vector *max)
Definition: grid.c:71