Merge branch 'master' of ssh://git.xonotic.org/netradiant
authorRudolf Polzer <divverent@alientrap.org>
Fri, 30 Jul 2010 13:47:54 +0000 (15:47 +0200)
committerRudolf Polzer <divverent@alientrap.org>
Fri, 30 Jul 2010 13:47:54 +0000 (15:47 +0200)
contrib/brushexport/export.cpp
libs/entitylib.h
tools/quake3/q3map2/light.c

index a83f7ebcbaf521efb22162c0bb9148f6192a5a42..0407432e35d6c4b56589b07d9c1b72b64ac3dc4a 100644 (file)
@@ -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<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";
                        }
index 6b63174dcfd6f8bab4db59fe9f5203fe51038d5f..2612ac2bd9f553e86f1b69da8fb39fa70a243b62 100644 (file)
@@ -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]]);
   }
index aaaa224762580ef5772e475bad0fc17198fe1737..977fa32f28fbbe4dae12893fec306c30fd81dacf 100644 (file)
@@ -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 )\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
        }
        /////////////////////
 
@@ -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