- moved the Plane class to vectors.h and deleted gl_geometric.h

This commit is contained in:
Christoph Oelckers 2018-04-01 12:43:23 +02:00
parent cd64655f97
commit d6fedd36b1
7 changed files with 51 additions and 99 deletions

View file

@ -41,7 +41,6 @@
#include "actorinlines.h"
#include "g_levellocals.h"
#include "gl/dynlights/gl_dynlight.h"
#include "gl/utility/gl_geometric.h"
#include "gl/renderer/gl_renderer.h"
#include "gl/renderer/gl_lightdata.h"
#include "gl/system/gl_interface.h"
@ -641,7 +640,7 @@ void GLFlat::DrawSubsectorLights(subsector_t * sub, int pass)
continue;
}
p.Set(plane.plane);
p.Set(plane.plane.Normal(), plane.plane.fD());
if (!gl_SetupLight(sub->sector->PortalGroup, p, light, nearPt, up, right, scale, false, pass != GLPASS_LIGHTTEX))
{
node = node->nextLight;
@ -715,7 +714,8 @@ bool GLWall::PrepareLight(ADynamicLight * light, int pass)
FVector3 nearPt, up, right;
float scale;
p.Set(&glseg);
auto normal = glseg.Normal();
p.Set(normal, -normal.X * glseg.x1 - normal.Y * glseg.y1);
if (!p.ValidNormal())
{

View file

@ -25,7 +25,6 @@
#include "c_cvars.h"
#include "a_dynlight.h"
#include "gl/utility/gl_geometric.h"
struct FDynLightData

View file

@ -7,6 +7,5 @@ class AActor;
void gl_PreprocessLevel();
void gl_CleanLevelData();
void gl_LinkLights();
#endif

View file

@ -141,7 +141,7 @@ void GLFlat::SetupSubsectorLights(int pass, subsector_t * sub, int *dli)
continue;
}
p.Set(plane.plane);
p.Set(plane.plane.Normal(), plane.plane.fD());
gl_GetLight(sub->sector->PortalGroup, p, light, false, lightdata);
node = node->nextLight;
}

View file

@ -74,14 +74,10 @@ void GLWall::SetupLights()
Plane p;
lightdata.Clear();
p.Set(&glseg);
/*
if (!p.ValidNormal())
{
return;
}
*/
auto normal = glseg.Normal();
p.Set(normal, -normal.X * glseg.x1 - normal.Y * glseg.y1);
FLightNode *node;
if (seg->sidedef == NULL)
{

View file

@ -1,86 +0,0 @@
/*
** gl_geometric.h
**
**---------------------------------------------------------------------------
** Copyright 2003 Timothy Stump
** All rights reserved.
**
** Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions
** are met:
**
** 1. Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** 2. Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in the
** documentation and/or other materials provided with the distribution.
** 3. The name of the author may not be used to endorse or promote products
** derived from this software without specific prior written permission.
**
** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
**---------------------------------------------------------------------------
**
*/
#ifndef __GL_GEOM
#define __GL_GEOM
#include "math.h"
#include "r_defs.h"
#include "gl/scene/gl_wall.h"
struct GLSeg;
class Plane
{
public:
void Set(GLSeg *seg)
{
m_normal = seg->Normal();
m_d = m_normal | FVector3(-seg->x1, 0, -seg->y1);
}
void Set(secplane_t &plane)
{
m_normal = { (float)plane.Normal().X, (float)plane.Normal().Z, (float)plane.Normal().Y };
m_d = (float)plane.fD();
}
float DistToPoint(float x, float y, float z)
{
FVector3 p(x, y, z);
return (m_normal | p) + m_d;
}
bool PointOnSide(float x, float y, float z)
{
return DistToPoint(x, y, z) < 0.f;
}
bool PointOnSide(FVector3 &v) { return PointOnSide(v.X, v.Y, v.Z); }
bool ValidNormal() { return m_normal.LengthSquared() == 1.f; }
float A() { return m_normal.X; }
float B() { return m_normal.Y; }
float C() { return m_normal.Z; }
float D() { return m_d; }
const FVector3 &Normal() const { return m_normal; }
protected:
FVector3 m_normal;
float m_d;
};
#endif

View file

@ -1673,4 +1673,48 @@ typedef TRotator<double> DRotator;
typedef TMatrix3x3<double> DMatrix3x3;
typedef TAngle<double> DAngle;
class Plane
{
public:
void Set(FVector3 normal, float d)
{
m_normal = normal;
m_d = d;
}
// same for a play-vector. Note that y and z are inversed.
void Set(DVector3 normal, double d)
{
m_normal = { (float)normal.X, (float)normal.Z, (float)normal.Y };
m_d = (float)d;
}
float DistToPoint(float x, float y, float z)
{
FVector3 p(x, y, z);
return (m_normal | p) + m_d;
}
bool PointOnSide(float x, float y, float z)
{
return DistToPoint(x, y, z) < 0.f;
}
bool PointOnSide(FVector3 &v) { return PointOnSide(v.X, v.Y, v.Z); }
bool ValidNormal() { return m_normal.LengthSquared() == 1.f; }
float A() { return m_normal.X; }
float B() { return m_normal.Y; }
float C() { return m_normal.Z; }
float D() { return m_d; }
const FVector3 &Normal() const { return m_normal; }
protected:
FVector3 m_normal;
float m_d;
};
#endif