From d309df4ce4d8ad0ed995a8e1c4267412a7782021 Mon Sep 17 00:00:00 2001 From: xolatile Date: Mon, 4 Aug 2025 22:53:42 +0200 Subject: Bunch of small changes... --- src/engine/bih.h | 146 +++++++++++++++++++++++++++---------------------------- 1 file changed, 73 insertions(+), 73 deletions(-) (limited to 'src/engine/bih.h') diff --git a/src/engine/bih.h b/src/engine/bih.h index 971e64b..16da278 100644 --- a/src/engine/bih.h +++ b/src/engine/bih.h @@ -1,78 +1,78 @@ struct BIH { - struct node - { - short split[2]; - ushort child[2]; - - int axis() const { return child[0]>>14; } - int childindex(int which) const { return child[which]&0x3FFF; } - bool isleaf(int which) const { return (child[1]&(1<<(14+which)))!=0; } - }; - - struct tri - { - ushort vert[3]; - }; - - struct tribb - { - svec center, radius; - - bool outside(const ivec &bo, const ivec &br) const - { - return abs(bo.x - center.x) > br.x + radius.x || - abs(bo.y - center.y) > br.y + radius.y || - abs(bo.z - center.z) > br.z + radius.z; - } - }; - - enum { MESH_NOCLIP = 1<<0, MESH_ALPHA = 1<<1, MESH_CULLFACE = 1<<2 }; - - struct mesh - { - enum { MAXTRIS = 1<<14 }; - - matrix4x3 xform, invxform; - matrix3 xformnorm, invxformnorm; - float scale, invscale; - node *nodes; - int numnodes; - const tri *tris; - const tribb *tribbs; - int numtris; - const uchar *pos, *tc; - int posstride, tcstride; - Texture *tex; - int flags; - vec bbmin, bbmax; - - mesh() : numnodes(0), numtris(0), tex(NULL), flags(0) {} - - vec getpos(int i) const { return *(const vec *)(pos + i*posstride); } - vec2 gettc(int i) const { return *(const vec2 *)(tc + i*tcstride); } - }; - - mesh *meshes; - int nummeshes; - node *nodes; - int numnodes; - tribb *tribbs; - int numtris; - vec bbmin, bbmax, center; - float radius, entradius; - - BIH(vector &buildmeshes); - - ~BIH(); - - void build(mesh &m, ushort *indices, int numindices, const ivec &vmin, const ivec &vmax); - - bool traverse(const vec &o, const vec &ray, float maxdist, float &dist, int mode); - bool traverse(const mesh &m, const vec &o, const vec &ray, const vec &invray, float maxdist, float &dist, int mode, node *curnode, float tmin, float tmax); - bool triintersect(const mesh &m, int tidx, const vec &mo, const vec &mray, float maxdist, float &dist, int mode); - - void preload(); + struct node + { + short split[2]; + ushort child[2]; + + int axis() const { return child[0]>>14; } + int childindex(int which) const { return child[which]&0x3FFF; } + bool isleaf(int which) const { return (child[1]&(1<<(14+which)))!=0; } + }; + + struct tri + { + ushort vert[3]; + }; + + struct tribb + { + svec center, radius; + + bool outside(const ivec &bo, const ivec &br) const + { + return abs(bo.x - center.x) > br.x + radius.x || + abs(bo.y - center.y) > br.y + radius.y || + abs(bo.z - center.z) > br.z + radius.z; + } + }; + + enum { MESH_NOCLIP = 1<<0, MESH_ALPHA = 1<<1, MESH_CULLFACE = 1<<2 }; + + struct mesh + { + enum { MAXTRIS = 1<<14 }; + + matrix4x3 xform, invxform; + matrix3 xformnorm, invxformnorm; + float scale, invscale; + node *nodes; + int numnodes; + const tri *tris; + const tribb *tribbs; + int numtris; + const uchar *pos, *tc; + int posstride, tcstride; + Texture *tex; + int flags; + vec bbmin, bbmax; + + mesh() : numnodes(0), numtris(0), tex(NULL), flags(0) {} + + vec getpos(int i) const { return *(const vec *)(pos + i*posstride); } + vec2 gettc(int i) const { return *(const vec2 *)(tc + i*tcstride); } + }; + + mesh *meshes; + int nummeshes; + node *nodes; + int numnodes; + tribb *tribbs; + int numtris; + vec bbmin, bbmax, center; + float radius, entradius; + + BIH(vector &buildmeshes); + + ~BIH(); + + void build(mesh &m, ushort *indices, int numindices, const ivec &vmin, const ivec &vmax); + + bool traverse(const vec &o, const vec &ray, float maxdist, float &dist, int mode); + bool traverse(const mesh &m, const vec &o, const vec &ray, const vec &invray, float maxdist, float &dist, int mode, node *curnode, float tmin, float tmax); + bool triintersect(const mesh &m, int tidx, const vec &mo, const vec &mray, float maxdist, float &dist, int mode); + + void preload(); }; extern bool mmintersect(const extentity &e, const vec &o, const vec &ray, float maxdist, int mode, float &dist); -- cgit v1.2.3