From: Rudolf Polzer Date: Fri, 30 Jul 2010 13:47:54 +0000 (+0200) Subject: Merge branch 'master' of ssh://git.xonotic.org/netradiant X-Git-Tag: xonotic-v0.5.0~245 X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fnetradiant.git;a=commitdiff_plain;h=4741e6535e6bbdf58ab856a3edd7f2b37761592b;hp=a8e761cc5c791e65b1045e1cedf1078424bb8b92 Merge branch 'master' of ssh://git.xonotic.org/netradiant --- diff --git a/contrib/brushexport/export.cpp b/contrib/brushexport/export.cpp index a83f7ebc..0407432e 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" +// for limNames +#define MAX_MATERIAL_NAME 20 + /* 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"; } diff --git a/libs/entitylib.h b/libs/entitylib.h index 6b63174d..2612ac2b 100644 --- a/libs/entitylib.h +++ b/libs/entitylib.h @@ -104,18 +104,18 @@ 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[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); - 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]]); } diff --git a/tools/quake3/q3map2/light.c b/tools/quake3/q3map2/light.c index aaaa2247..977fa32f 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