BIH_SPLITX = 0,
BIH_SPLITY = 1,
BIH_SPLITZ = 2,
- BIH_LEAF = 3,
}
bih_nodetype_t;
+typedef enum bih_leaftype_e
+{
+ BIH_BRUSH = 3,
+ BIH_COLLISIONTRIANGLE = 4,
+ BIH_RENDERTRIANGLE = 5,
+}
+bih_leaftype_t;
+
typedef struct bih_node_s
{
bih_nodetype_t type; // = BIH_SPLITX and similar values
float mins[3];
float maxs[3];
// < 0 is a leaf index (-1-leafindex), >= 0 is another node index (always >= this node's index)
- int children[2];
+ int front;
+ int back;
+ // interval of children
+ float frontmin; // children[0]
+ float backmax; // children[1]
}
bih_node_t;
typedef struct bih_leaf_s
{
- bih_nodetype_t type; // = BIH_LEAF
+ bih_leaftype_t type; // = BIH_BRUSH And similar values
float mins[3];
float maxs[3];
// data past this point is generic and entirely up to the caller...
// nodes are constructed by BIH_Build
int numnodes;
bih_node_t *nodes;
+ int rootnode; // 0 if numnodes > 0, -1 otherwise
+ // bounds calculated by BIH_Build
+ float mins[3];
+ float maxs[3];
// fields used only during BIH_Build:
int maxnodes;