From 6661c1a8e89c733f6d0d5a2aa9689a2436b6a113 Mon Sep 17 00:00:00 2001 From: jal Date: Sun, 11 Jul 2010 12:16:08 +0200 Subject: [PATCH 1/5] On grid lighting, redistribute the 25% of the floodlight as omnidirectional ambient light, and use only the 75% of it as top-down directional light. --- tools/quake3/q3map2/light.c | 99 ++++++++++++++++++++----------------- 1 file changed, 54 insertions(+), 45 deletions(-) diff --git a/tools/quake3/q3map2/light.c b/tools/quake3/q3map2/light.c index cf292a79..dee882ee 100644 --- a/tools/quake3/q3map2/light.c +++ b/tools/quake3/q3map2/light.c @@ -1421,6 +1421,7 @@ typedef struct { vec3_t dir; vec3_t color; + vec3_t ambient; int style; } contribution_t; @@ -1514,6 +1515,7 @@ void TraceGrid( int num ) /* add a contribution */ VectorCopy( trace.color, contributions[ numCon ].color ); VectorCopy( trace.direction, contributions[ numCon ].dir ); + VectorClear( contributions[ numCon ].ambient ); contributions[ numCon ].style = trace.light->style; numCon++; @@ -1533,51 +1535,56 @@ void TraceGrid( int num ) /////// Floodlighting for point ////////////////// //do our floodlight ambient occlusion loop, and add a single contribution based on the brightest dir - if (floodlighty) - { - int q; - float addSize,f; - vec3_t col,dir; - col[0]=col[1]=col[2]=floodlightIntensity; - dir[0]=dir[1]=0; - dir[2]=1; - - trace.testOcclusion = qtrue; - trace.forceSunlight = qfalse; - trace.inhibitRadius = DEFAULT_INHIBIT_RADIUS; - trace.testAll = qtrue; - - for (q=0;q<2;q++) - { - if (q==0) //upper hemisphere - { - trace.normal[0]=0; - trace.normal[1]=0; - trace.normal[2]=1; - } - else //lower hemisphere - { - trace.normal[0]=0; - trace.normal[1]=0; - trace.normal[2]=-1; - } - - f = FloodLightForSample(&trace, floodlightDistance, floodlight_lowquality); - - contributions[ numCon ].color[0]=col[0]*f; - contributions[ numCon ].color[1]=col[1]*f; - contributions[ numCon ].color[2]=col[2]*f; - - contributions[ numCon ].dir[0]=dir[0]; - contributions[ numCon ].dir[1]=dir[1]; - contributions[ numCon ].dir[2]=dir[2]; - - contributions[ numCon ].style = 0; - numCon++; - /* push average direction around */ - addSize = VectorLength( col ); - VectorMA( gp->dir, addSize, dir, gp->dir ); - } + if( floodlighty ) + { + int k; + float addSize, f; + vec3_t dir = { 0, 0, 1 }; + float ambientFrac = 0.25f; + + trace.testOcclusion = qtrue; + trace.forceSunlight = qfalse; + trace.inhibitRadius = DEFAULT_INHIBIT_RADIUS; + trace.testAll = qtrue; + + for( k = 0; k < 2; k++ ) + { + if( k == 0 ) // upper hemisphere + { + trace.normal[0] = 0; + trace.normal[1] = 0; + trace.normal[2] = 1; + } + else //lower hemisphere + { + trace.normal[0] = 0; + trace.normal[1] = 0; + trace.normal[2] = -1; + } + + f = FloodLightForSample( &trace, floodlightDistance, floodlight_lowquality ); + + /* add a fraction as pure ambient, half as top-down direction */ + contributions[ numCon ].color[0]= floodlightRGB[0] * floodlightIntensity * f * ( 1.0f - ambientFrac ); + contributions[ numCon ].color[1]= floodlightRGB[1] * floodlightIntensity * f * ( 1.0f - ambientFrac ); + contributions[ numCon ].color[2]= floodlightRGB[2] * floodlightIntensity * f * ( 1.0f - ambientFrac ); + + contributions[ numCon ].ambient[0]= floodlightRGB[0] * floodlightIntensity * f * ambientFrac; + contributions[ numCon ].ambient[1]= floodlightRGB[1] * floodlightIntensity * f * ambientFrac; + contributions[ numCon ].ambient[2]= floodlightRGB[2] * floodlightIntensity * f * ambientFrac; + + contributions[ numCon ].dir[0] = dir[0]; + contributions[ numCon ].dir[1] = dir[1]; + contributions[ numCon ].dir[2] = dir[2]; + + contributions[ numCon ].style = 0; + + /* push average direction around */ + addSize = VectorLength( contributions[ numCon ].color ); + VectorMA( gp->dir, addSize, dir, gp->dir ); + + numCon++; + } } ///////////////////// @@ -1632,6 +1639,8 @@ void TraceGrid( int num ) d = 0.25f * (1.0f - d); VectorMA( gp->ambient[ j ], d, contributions[ i ].color, gp->ambient[ j ] ); + VectorAdd( gp->ambient[ j ], contributions[ i ].ambient, gp->ambient[ j ] ); + /* * div0: * the total light average = ambient value + 0.25 * sum of all directional values From f78b813d8b4c458d22eaa5fa779fb25678de79c1 Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Sun, 25 Jul 2010 17:10:39 +0200 Subject: [PATCH 2/5] improve the max shader name length in brushexport plugin --- contrib/brushexport/export.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/contrib/brushexport/export.cpp b/contrib/brushexport/export.cpp index a83f7ebc..c406f198 100644 --- a/contrib/brushexport/export.cpp +++ b/contrib/brushexport/export.cpp @@ -11,6 +11,9 @@ // this is very evil, but right now there is no better way #include "../../radiant/brush.h" +#define MAX_MATERIAL_NAME (64+9-1) +// MAX_QPATH plus "textures/" prefix, allow trailing NUL to fit + /* Abstract baseclass for modelexporters the class collects all the data which then gets @@ -279,9 +282,9 @@ bool ExportDataAsWavefront::WriteToFile(const std::string& path, collapsemode mo if(mat != lastMat) { - if(limNames && mat.size() > 20) + if(limNames && mat.size() > MAX_MATERIAL_NAME) { - out << "\nusemtl " << mat.substr(mat.size() - 20, mat.size()).c_str(); + out << "\nusemtl " << mat.substr(mat.size() - MAX_MATERIAL_NAME, mat.size()).c_str(); } else { out << "\nusemtl " << mat.c_str(); } @@ -308,9 +311,9 @@ bool ExportDataAsWavefront::WriteToFile(const std::string& path, collapsemode mo outMtl << "# Material Count: " << (const Unsigned)materials.size() << "\n\n"; for(std::set::const_iterator it(materials.begin()); it != materials.end(); ++it) { - if(limNames && it->size() > 20) + if(limNames && it->size() > MAX_MATERIAL_NAME) { - outMtl << "newmtl " << it->substr(it->size() - 20, it->size()).c_str() << "\n"; + outMtl << "newmtl " << it->substr(it->size() - MAX_MATERIAL_NAME, it->size()).c_str() << "\n"; } else { outMtl << "newmtl " << it->c_str() << "\n"; } From b515a4a7094ae26ce17ba8a7b380818426ac1b46 Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Sun, 25 Jul 2010 17:16:46 +0200 Subject: [PATCH 3/5] argh :P 20 was intentional --- contrib/brushexport/export.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/brushexport/export.cpp b/contrib/brushexport/export.cpp index c406f198..0407432e 100644 --- a/contrib/brushexport/export.cpp +++ b/contrib/brushexport/export.cpp @@ -11,8 +11,8 @@ // this is very evil, but right now there is no better way #include "../../radiant/brush.h" -#define MAX_MATERIAL_NAME (64+9-1) -// MAX_QPATH plus "textures/" prefix, allow trailing NUL to fit +// for limNames +#define MAX_MATERIAL_NAME 20 /* Abstract baseclass for modelexporters From 4947520bd1f085aab8e197e8a51d94b9e444f4da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C4=81nis=20R=C5=ABcis?= Date: Wed, 28 Jul 2010 21:07:27 +0300 Subject: [PATCH 4/5] Fix wireframe entity display in 2D window On 64-bit systems, sizeof(size_t) != sizeof (unsigned int). --- libs/entitylib.h | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/libs/entitylib.h b/libs/entitylib.h index 6b63174d..6602357b 100644 --- a/libs/entitylib.h +++ b/libs/entitylib.h @@ -104,18 +104,17 @@ inline void aabb_testselect(const AABB& aabb, SelectionTest& test, SelectionInte inline void aabb_draw_wire(const Vector3 points[8]) { - typedef std::size_t index_t; - index_t indices[24] = { + unsigned int indices[24] = { 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7, }; #if 1 glVertexPointer(3, GL_FLOAT, 0, points); - glDrawElements(GL_LINES, sizeof(indices)/sizeof(index_t), GL_UNSIGNED_INT, indices); + glDrawElements(GL_LINES, sizeof(indices)/sizeof(indices[0]), GL_UNSIGNED_INT, indices); #else glBegin(GL_LINES); - for(std::size_t i = 0; i < sizeof(indices)/sizeof(index_t); ++i) + for(std::size_t i = 0; i < sizeof(indices)/sizeof(indices[0]); ++i) { glVertex3fv(points[indices[i]]); } From a40dc77dd9d5bb6babd688ca4e756053fc5ad029 Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Thu, 29 Jul 2010 18:57:08 +0200 Subject: [PATCH 5/5] add more vertexes to the entity display to make it more visible (paint an X in its middle) --- libs/entitylib.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libs/entitylib.h b/libs/entitylib.h index 6602357b..2612ac2b 100644 --- a/libs/entitylib.h +++ b/libs/entitylib.h @@ -104,10 +104,11 @@ inline void aabb_testselect(const AABB& aabb, SelectionTest& test, SelectionInte inline void aabb_draw_wire(const Vector3 points[8]) { - unsigned int indices[24] = { + unsigned int indices[32] = { 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7, + 0, 6, 1, 7, 2, 4, 3, 5 // X cross }; #if 1 glVertexPointer(3, GL_FLOAT, 0, points);