common: fix up Face_Plane to remove unnecessary distance calc

This commit is contained in:
Eric Wasylishen 2017-04-24 01:45:16 -06:00
parent 0a64905df8
commit a7df1994dc
1 changed files with 13 additions and 29 deletions

View File

@ -71,40 +71,26 @@ Vertex_GetPos(const bsp2_t *bsp, int num, vec3_t out)
void void
Face_Normal(const bsp2_t *bsp, const bsp2_dface_t *f, vec3_t norm) Face_Normal(const bsp2_t *bsp, const bsp2_dface_t *f, vec3_t norm)
{ {
if (f->side) plane_t pl = Face_Plane(bsp, f);
VectorSubtract(vec3_origin, bsp->dplanes[f->planenum].normal, norm); VectorCopy(pl.normal, norm);
else
VectorCopy(bsp->dplanes[f->planenum].normal, norm);
} }
plane_t plane_t
Face_Plane(const bsp2_t *bsp, const bsp2_dface_t *f) Face_Plane(const bsp2_t *bsp, const bsp2_dface_t *f)
{ {
const int vertnum = Face_VertexAtIndex(bsp, f, 0); Q_assert(f->planenum >= 0 && f->planenum < bsp->numplanes);
vec3_t vertpos; const dplane_t *dplane = &bsp->dplanes[f->planenum];
Vertex_GetPos(bsp, vertnum, vertpos);
plane_t res; plane_t result;
Face_Normal(bsp, f, res.normal); if (f->side) {
res.dist = DotProduct(vertpos, res.normal); VectorSubtract(vec3_origin, dplane->normal, result.normal);
return res; result.dist = -dplane->dist;
}
//FIXME: Any reason to prefer this implementation vs the above one?
#if 0
static void GetFaceNormal(const bsp2_t *bsp, const bsp2_dface_t *face, plane_t *plane)
{
const dplane_t *dplane = &bsp->dplanes[face->planenum];
if (face->side) {
VectorSubtract(vec3_origin, dplane->normal, plane->normal);
plane->dist = -dplane->dist;
} else { } else {
VectorCopy(dplane->normal, plane->normal); VectorCopy(dplane->normal, result.normal);
plane->dist = dplane->dist; result.dist = dplane->dist;
} }
return result;
} }
#endif
const texinfo_t *Face_Texinfo(const bsp2_t *bsp, const bsp2_dface_t *face) const texinfo_t *Face_Texinfo(const bsp2_t *bsp, const bsp2_dface_t *face)
{ {
@ -284,10 +270,8 @@ EdgePlanes_PointInside(const bsp2_dface_t *face, const plane_t *edgeplanes, cons
qvec4f Face_Plane_E(const bsp2_t *bsp, const bsp2_dface_t *f) qvec4f Face_Plane_E(const bsp2_t *bsp, const bsp2_dface_t *f)
{ {
const qvec3f p0 = Face_PointAtIndex_E(bsp, f, 0); const plane_t pl = Face_Plane(bsp, f);
const qvec3f norm = Face_Normal_E(bsp, f); return qvec4f(pl.normal[0], pl.normal[1], pl.normal[2], pl.dist);
const qvec4f plane(norm[0], norm[1], norm[2], qv::dot(norm, p0));
return plane;
} }
qvec3f Face_PointAtIndex_E(const bsp2_t *bsp, const bsp2_dface_t *f, int v) qvec3f Face_PointAtIndex_E(const bsp2_t *bsp, const bsp2_dface_t *f, int v)