MCPcopy Create free account
hub / github.com/DescentDevelopers/Descent3 / BBoxPlaneIntersection

Function BBoxPlaneIntersection

physics/findintersection.cpp:3215–3314  ·  view source on GitHub ↗

MTS: only used in this file. Hacked for some initial testing

Source from the content-addressed store, hash-verified

3213// MTS: only used in this file.
3214// Hacked for some initial testing
3215bool BBoxPlaneIntersection(bool fast_exit, vector *collision_point, vector *collision_normal, object *obj,
3216 vector *new_pos, int nv, vector **vertex_ptr_list, vector *face_normal, matrix *orient,
3217 vector *rotvel, vector *velocity) {
3218 vector plane_pnt;
3219 vector verts[12];
3220 poly_model *pm = &Poly_models[obj->rtype.pobj_info.model_num];
3221 int i;
3222 vector rel[32];
3223 float dot[32];
3224 bool collidable[32];
3225
3226 int num_int_box = 0;
3227 vector int_points_box[12];
3228
3229 verts[0] = (orient->rvec * pm->mins.x) + (orient->uvec * pm->maxs.y) + (orient->fvec * pm->mins.z);
3230
3231 verts[1] = (orient->rvec * pm->mins.x) + (orient->uvec * pm->mins.y) + (orient->fvec * pm->mins.z);
3232
3233 verts[2] = (orient->rvec * pm->maxs.x) + (orient->uvec * pm->mins.y) + (orient->fvec * pm->mins.z);
3234
3235 verts[3] = (orient->rvec * pm->maxs.x) + (orient->uvec * pm->maxs.y) + (orient->fvec * pm->mins.z);
3236
3237 verts[4] = (orient->rvec * pm->maxs.x) + (orient->uvec * pm->maxs.y) + (orient->fvec * pm->maxs.z);
3238
3239 verts[5] = (orient->rvec * pm->maxs.x) + (orient->uvec * pm->mins.y) + (orient->fvec * pm->maxs.z);
3240
3241 verts[6] = (orient->rvec * pm->mins.x) + (orient->uvec * pm->mins.y) + (orient->fvec * pm->maxs.z);
3242
3243 verts[7] = (orient->rvec * pm->mins.x) + (orient->uvec * pm->maxs.y) + (orient->fvec * pm->maxs.z);
3244
3245 for (i = 0; i < 8; i++) {
3246 verts[i] += *new_pos;
3247 }
3248
3249 vector xxx_normal = Zero_vector;
3250 xxx_normal.y = 1.0f;
3251
3252 for (i = 0; i < 8; i++) {
3253 rel[i] = verts[i];
3254 dot[i] = rel[i] * (xxx_normal);
3255 }
3256
3257 for (i = 0; i < 8; i++) {
3258 collidable[i] =
3259 true; //(PointSpeed(&Objects[fvi_query_ptr->thisobjnum], &verts[i], orient, rotvel, velocity).y < 0.0);
3260 }
3261
3262 // Get Ground intersection points
3263 for (i = 0; i < 12; i++) {
3264 vector movement;
3265 bool found;
3266 float nmovement;
3267
3268 found = false;
3269
3270 if (dot[bbox_edges[i][0]] > 0.0f && dot[bbox_edges[i][1]] < 0.0f && collidable[bbox_edges[i][1]]) {
3271 movement = verts[bbox_edges[i][1]] - verts[bbox_edges[i][0]];
3272

Callers 1

check_terrain_nodeFunction · 0.85

Calls 1

vm_MakeZeroFunction · 0.85

Tested by

no test coverage detected