Merge branch 'master' of ssh://git.xonotic.org/netradiant

This commit is contained in:
Rudolf Polzer 2010-07-30 15:47:54 +02:00
commit 4741e6535e
3 changed files with 65 additions and 53 deletions

View File

@ -11,6 +11,9 @@
// this is very evil, but right now there is no better way // this is very evil, but right now there is no better way
#include "../../radiant/brush.h" #include "../../radiant/brush.h"
// for limNames
#define MAX_MATERIAL_NAME 20
/* /*
Abstract baseclass for modelexporters Abstract baseclass for modelexporters
the class collects all the data which then gets 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(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 { } else {
out << "\nusemtl " << mat.c_str(); 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"; outMtl << "# Material Count: " << (const Unsigned)materials.size() << "\n\n";
for(std::set<std::string>::const_iterator it(materials.begin()); it != materials.end(); ++it) for(std::set<std::string>::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 { } else {
outMtl << "newmtl " << it->c_str() << "\n"; outMtl << "newmtl " << it->c_str() << "\n";
} }

View File

@ -104,18 +104,18 @@ inline void aabb_testselect(const AABB& aabb, SelectionTest& test, SelectionInte
inline void aabb_draw_wire(const Vector3 points[8]) inline void aabb_draw_wire(const Vector3 points[8])
{ {
typedef std::size_t index_t; unsigned int indices[32] = {
index_t indices[24] = {
0, 1, 1, 2, 2, 3, 3, 0, 0, 1, 1, 2, 2, 3, 3, 0,
4, 5, 5, 6, 6, 7, 7, 4, 4, 5, 5, 6, 6, 7, 7, 4,
0, 4, 1, 5, 2, 6, 3, 7, 0, 4, 1, 5, 2, 6, 3, 7,
0, 6, 1, 7, 2, 4, 3, 5 // X cross
}; };
#if 1 #if 1
glVertexPointer(3, GL_FLOAT, 0, points); 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 #else
glBegin(GL_LINES); 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]]); glVertex3fv(points[indices[i]]);
} }

View File

@ -1421,6 +1421,7 @@ typedef struct
{ {
vec3_t dir; vec3_t dir;
vec3_t color; vec3_t color;
vec3_t ambient;
int style; int style;
} }
contribution_t; contribution_t;
@ -1514,6 +1515,7 @@ void TraceGrid( int num )
/* add a contribution */ /* add a contribution */
VectorCopy( trace.color, contributions[ numCon ].color ); VectorCopy( trace.color, contributions[ numCon ].color );
VectorCopy( trace.direction, contributions[ numCon ].dir ); VectorCopy( trace.direction, contributions[ numCon ].dir );
VectorClear( contributions[ numCon ].ambient );
contributions[ numCon ].style = trace.light->style; contributions[ numCon ].style = trace.light->style;
numCon++; numCon++;
@ -1535,21 +1537,19 @@ void TraceGrid( int num )
//do our floodlight ambient occlusion loop, and add a single contribution based on the brightest dir //do our floodlight ambient occlusion loop, and add a single contribution based on the brightest dir
if( floodlighty ) if( floodlighty )
{ {
int q; int k;
float addSize, f; float addSize, f;
vec3_t col,dir; vec3_t dir = { 0, 0, 1 };
col[0]=col[1]=col[2]=floodlightIntensity; float ambientFrac = 0.25f;
dir[0]=dir[1]=0;
dir[2]=1;
trace.testOcclusion = qtrue; trace.testOcclusion = qtrue;
trace.forceSunlight = qfalse; trace.forceSunlight = qfalse;
trace.inhibitRadius = DEFAULT_INHIBIT_RADIUS; trace.inhibitRadius = DEFAULT_INHIBIT_RADIUS;
trace.testAll = qtrue; trace.testAll = qtrue;
for (q=0;q<2;q++) for( k = 0; k < 2; k++ )
{ {
if (q==0) //upper hemisphere if( k == 0 ) // upper hemisphere
{ {
trace.normal[0] = 0; trace.normal[0] = 0;
trace.normal[1] = 0; trace.normal[1] = 0;
@ -1564,19 +1564,26 @@ void TraceGrid( int num )
f = FloodLightForSample( &trace, floodlightDistance, floodlight_lowquality ); f = FloodLightForSample( &trace, floodlightDistance, floodlight_lowquality );
contributions[ numCon ].color[0]=col[0]*f; /* add a fraction as pure ambient, half as top-down direction */
contributions[ numCon ].color[1]=col[1]*f; contributions[ numCon ].color[0]= floodlightRGB[0] * floodlightIntensity * f * ( 1.0f - ambientFrac );
contributions[ numCon ].color[2]=col[2]*f; 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[0] = dir[0];
contributions[ numCon ].dir[1] = dir[1]; contributions[ numCon ].dir[1] = dir[1];
contributions[ numCon ].dir[2] = dir[2]; contributions[ numCon ].dir[2] = dir[2];
contributions[ numCon ].style = 0; contributions[ numCon ].style = 0;
numCon++;
/* push average direction around */ /* push average direction around */
addSize = VectorLength( col ); addSize = VectorLength( contributions[ numCon ].color );
VectorMA( gp->dir, addSize, dir, gp->dir ); VectorMA( gp->dir, addSize, dir, gp->dir );
numCon++;
} }
} }
///////////////////// /////////////////////
@ -1632,6 +1639,8 @@ void TraceGrid( int num )
d = 0.25f * (1.0f - d); d = 0.25f * (1.0f - d);
VectorMA( gp->ambient[ j ], d, contributions[ i ].color, gp->ambient[ j ] ); VectorMA( gp->ambient[ j ], d, contributions[ i ].color, gp->ambient[ j ] );
VectorAdd( gp->ambient[ j ], contributions[ i ].ambient, gp->ambient[ j ] );
/* /*
* div0: * div0:
* the total light average = ambient value + 0.25 * sum of all directional values * the total light average = ambient value + 0.25 * sum of all directional values