From 952c5c128f9efaea89d41d882c4ea3ade7df4591 Mon Sep 17 00:00:00 2001 From: zakk Date: Fri, 26 Aug 2005 04:48:05 +0000 Subject: Itsa me, quake3io! git-svn-id: svn://svn.icculus.org/quake3/trunk@2 edf5b092-35ff-0310-97b2-ce42778d08ea --- q3map/light.h | 151 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100755 q3map/light.h (limited to 'q3map/light.h') diff --git a/q3map/light.h b/q3map/light.h new file mode 100755 index 0000000..5faa24a --- /dev/null +++ b/q3map/light.h @@ -0,0 +1,151 @@ +/* +=========================================================================== +Copyright (C) 1999-2005 Id Software, Inc. + +This file is part of Quake III Arena source code. + +Quake III Arena source code is free software; you can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation; either version 2 of the License, +or (at your option) any later version. + +Quake III Arena source code is distributed in the hope that it will be +useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Foobar; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +=========================================================================== +*/ + +#include "cmdlib.h" +#include "mathlib.h" +#include "bspfile.h" +#include "polylib.h" +#include "imagelib.h" +#include "threads.h" +#include "scriplib.h" + +#include "shaders.h" +#include "mesh.h" + + + +typedef enum +{ + emit_point, + emit_area, + emit_spotlight, + emit_sun +} emittype_t; + +#define MAX_LIGHT_EDGES 8 +typedef struct light_s +{ + struct light_s *next; + emittype_t type; + struct shaderInfo_s *si; + + vec3_t origin; + vec3_t normal; // for surfaces, spotlights, and suns + float dist; // plane location along normal + + qboolean linearLight; + int photons; + int style; + vec3_t color; + float radiusByDist; // for spotlights + + qboolean twosided; // fog lights both sides + + winding_t *w; + vec3_t emitColor; // full out-of-gamut value +} light_t; + + +extern float lightscale; +extern float ambient; +extern float maxlight; +extern float direct_scale; +extern float entity_scale; + +extern qboolean noSurfaces; + +//=============================================================== + +// light_trace.c + +// a facet is a subdivided element of a patch aproximation or model +typedef struct cFacet_s { + float surface[4]; + int numBoundaries; // either 3 or 4, anything less is degenerate + float boundaries[4][4]; // positive is outside the bounds + + vec3_t points[4]; // needed for area light subdivision + + float textureMatrix[2][4]; // compute texture coordinates at point of impact for translucency +} cFacet_t; + +typedef struct { + vec3_t mins, maxs; + vec3_t origin; + float radius; + + qboolean patch; + + int numFacets; + cFacet_t *facets; + + shaderInfo_t *shader; // for translucency +} surfaceTest_t; + + +typedef struct { + vec3_t filter; // starts out 1.0, 1.0, 1.0, may be reduced if + // transparent surfaces are crossed + + vec3_t hit; // the impact point of a completely opaque surface + float hitFraction; // 0 = at start, 1.0 = at end + qboolean passSolid; +} trace_t; + +extern surfaceTest_t *surfaceTest[MAX_MAP_DRAW_SURFS]; + +void InitTrace( void ); + +// traceWork_t is only a parameter to crutch up poor large local allocations on +// winNT and macOS. It should be allocated in the worker function, but never +// looked at. +typedef struct { + vec3_t start, end; + int numOpenLeafs; + int openLeafNumbers[MAX_MAP_LEAFS]; + trace_t *trace; + int patchshadows; +} traceWork_t; + +void TraceLine( const vec3_t start, const vec3_t stop, trace_t *trace, + qboolean testAll, traceWork_t *tw ); +qboolean PointInSolid( vec3_t start ); + +//=============================================================== + +//=============================================================== + + +typedef struct { + int textureNum; + int x, y, width, height; + + // for patches + qboolean patch; + mesh_t mesh; + + // for faces + vec3_t origin; + vec3_t vecs[3]; +} lightmap_t; + + -- cgit v1.2.3