*new generic raytrace API
[blender-staging.git] / source / blender / render / extern / include / RE_raytrace.h
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version. 
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19  *
20  * The Original Code is Copyright (C) 2007 Blender Foundation.
21  * All rights reserved.
22  *
23  * The Original Code is: all of this file.
24  *
25  * Contributor(s): AndrĂ© Pinto.
26  *
27  * ***** END GPL LICENSE BLOCK *****
28  * RE_raytrace.h: ray tracing api, can be used independently from the renderer. 
29  */
30
31 #ifndef RE_RAYTRACE_H
32 #define RE_RAYTRACE_H
33
34
35 /* Internals about raycasting structures can be found on intern/raytree.h */
36 typedef struct RayObject RayObject;
37 typedef struct Isect Isect;
38 struct DerivedMesh;
39 struct Mesh;
40
41 int  RayObject_raycast(RayObject *r, Isect *i);
42 void RayObject_add    (RayObject *r, RayObject *);
43 void RayObject_done(RayObject *r);
44 void RayObject_free(RayObject *r);
45
46 /* RayObject constructors */
47 RayObject* RayObject_octree_create(int ocres, int size);
48
49 //RayObject* RayObject_derivedmesh_create(struct DerivedMesh*, void *ob);
50 RayObject* RayObject_mesh_create(struct Mesh*, void *ob);
51
52 /* Ray Intersection */
53 struct Isect
54 {
55         float start[3];
56         float vec[3];
57 /*      float end[3];                    - not used */
58
59         float labda, u, v;
60         
61         struct
62         {
63                 void *ob;
64                 void *face;
65 /*              RayObject *obj; */
66         }
67         hit, orig;
68         
69         RayObject *last_hit;    /* last hit optimization */
70         
71         short isect;                    /* which half of quad */
72         short mode;                             /* RE_RAY_SHADOW, RE_RAY_MIRROR, RE_RAY_SHADOW_TRA */
73         int lay;                                /* -1 default, set for layer lamps */
74         
75         int skip;                               /* RE_SKIP_CULLFACE */
76
77         float col[4];                   /* RGBA for shadow_tra */
78         
79         void *userdata;
80 };
81
82 /* ray types */
83 #define RE_RAY_SHADOW 0
84 #define RE_RAY_MIRROR 1
85 #define RE_RAY_SHADOW_TRA 2
86
87 /* skip options */
88 #define RE_SKIP_CULLFACE        1
89
90 /* TODO use: FLT_MAX? */
91 #define RE_RAYTRACE_MAXDIST     1e33
92
93
94 #endif /*__RE_RAYTRACE_H__*/