// 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
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();
}
outMtl << "# Material Count: " << (const Unsigned)materials.size() << "\n\n";
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 {
outMtl << "newmtl " << it->c_str() << "\n";
}
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]]);
}
{
vec3_t dir;
vec3_t color;
+ vec3_t ambient;
int style;
}
contribution_t;
/* 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++;
/////// 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 )\r
+ {\r
+ int k;\r
+ float addSize, f;\r
+ vec3_t dir = { 0, 0, 1 };\r
+ float ambientFrac = 0.25f;\r
+\r
+ trace.testOcclusion = qtrue;\r
+ trace.forceSunlight = qfalse;\r
+ trace.inhibitRadius = DEFAULT_INHIBIT_RADIUS;\r
+ trace.testAll = qtrue;\r
+\r
+ for( k = 0; k < 2; k++ )\r
+ {\r
+ if( k == 0 ) // upper hemisphere\r
+ {\r
+ trace.normal[0] = 0;\r
+ trace.normal[1] = 0;\r
+ trace.normal[2] = 1;\r
+ }\r
+ else //lower hemisphere\r
+ {\r
+ trace.normal[0] = 0;\r
+ trace.normal[1] = 0;\r
+ trace.normal[2] = -1;\r
+ }\r
+\r
+ f = FloodLightForSample( &trace, floodlightDistance, floodlight_lowquality );\r
+\r
+ /* add a fraction as pure ambient, half as top-down direction */\r
+ contributions[ numCon ].color[0]= floodlightRGB[0] * floodlightIntensity * f * ( 1.0f - ambientFrac );\r
+ contributions[ numCon ].color[1]= floodlightRGB[1] * floodlightIntensity * f * ( 1.0f - ambientFrac );\r
+ contributions[ numCon ].color[2]= floodlightRGB[2] * floodlightIntensity * f * ( 1.0f - ambientFrac );\r
+\r
+ contributions[ numCon ].ambient[0]= floodlightRGB[0] * floodlightIntensity * f * ambientFrac;\r
+ contributions[ numCon ].ambient[1]= floodlightRGB[1] * floodlightIntensity * f * ambientFrac;\r
+ contributions[ numCon ].ambient[2]= floodlightRGB[2] * floodlightIntensity * f * ambientFrac;\r
+\r
+ contributions[ numCon ].dir[0] = dir[0];\r
+ contributions[ numCon ].dir[1] = dir[1];\r
+ contributions[ numCon ].dir[2] = dir[2];\r
+\r
+ contributions[ numCon ].style = 0;\r
+\r
+ /* push average direction around */\r
+ addSize = VectorLength( contributions[ numCon ].color );\r
+ VectorMA( gp->dir, addSize, dir, gp->dir );\r
+\r
+ numCon++;\r
+ }\r
}
/////////////////////
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