Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 7546 in orxonox.OLD for branches


Ignore:
Timestamp:
May 6, 2006, 9:14:10 AM (19 years ago)
Author:
hdavid
Message:

branches/atmospheric_engine

Location:
branches/atmospheric_engine/src/lib/graphics/effects
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/atmospheric_engine/src/lib/graphics/effects/volfog_effect.cc

    r7532 r7546  
    3333    this->loadParams(root);
    3434
     35  this->init();
     36
     37  //if (! this->init())                        // Check And Enable Fog Extension If Available
     38    //return false;                         // Return False If Extension Not Supported
     39
     40  // Set Up Fog
     41  //glEnable(GL_FOG);                         // Enable Fog
     42  //glFogi(GL_FOG_MODE, GL_LINEAR);                   // Fog Fade Is Linear
     43  //glFogfv(GL_FOG_COLOR, fogColor);                  // Set The Fog Color
     44  //glFogf(GL_FOG_START,  1.0f);                    // Set The Fog Start
     45  //glFogf(GL_FOG_END,    0.0f);                    // Set The Fog End
     46  //glHint(GL_FOG_HINT, GL_NICEST);                   // Per-Pixel Fog Calculation
     47  //glFogi(GL_FOG_COORDINATE_SOURCE_EXT, GL_FOG_COORDINATE_EXT);    // Set Fog Based On Vertice Coordinates
     48
    3549  this->activate();
    3650}
     
    4559{
    4660  WeatherEffect::loadParams(root);
    47 
    48   //LoadParam(root, "fog-altitude", this, VolFogEffect, setFogAltitude);
    49   //LoadParam(root, "fog-color", this, VolFogEffect, startFogColor);
    50   LoadParam(root, "test", this, VolFogEffect, test);
    51 }
    52 
    53 void VolFogEffect::test(int t)
    54 {
    55   PRINTF(0)("Test: %i\n", t);
    5661}
    5762
     
    5964{
    6065  PRINTF(0)("Initalize VolFogEffect\n");
    61 };
     66
     67  fogColor[0] = 0.6f;
     68  fogColor[1] = 0.3f;
     69  fogColor[2] = 0.0f;
     70  fogColor[3] = 1.0f;
     71
     72  //glDepthFunc (GL_LEQUAL);                            // The Type Of Depth Testing
     73  //glEnable (GL_DEPTH_TEST);                           // Enable Depth Testing
     74  //glShadeModel (GL_SMOOTH);                           // Select Smooth Shading
     75  //glHint (GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Set Perspective Calculations To Most AccurateAbility
     76
     77  char extensions[ 16384 ];
     78  char Extension_Name[] = "GL_EXT_fog_coord";
     79  char *buf;
     80
     81  sprintf( extensions, "%s", (char *)glGetString( GL_EXTENSIONS ) );
     82  buf = strtok( extensions, " " );
     83  while( buf != NULL )
     84  {
     85    if( !strcmp( Extension_Name, buf ) )
     86    {
     87      PRINTF(0)( "%s found, great.\n", Extension_Name );
     88      return true;
     89    }
     90    buf = strtok( NULL, " " );
     91  }
     92
     93  PRINTF(0)( "%s\n", (char *)glGetString( GL_EXTENSIONS ) );
     94  PRINTF(0)( "%s not found, dammit.\n", Extension_Name );
     95  return false;
     96}
    6297
    6398
    6499bool VolFogEffect::activate()
    65100{
    66   //PRINTF(0)( "Enabling Volumetric Fog Effect, altitude: %i, color %f, %f, %f\n", this->fogAltitude, this->colorVector.x, this->colorVector.y, this->colorVector.z);
    67 
    68   PRINTF(0)("Activate VolFogEffect\n");
     101  PRINTF(0)("Activating VolFogEffect\n");
    69102}
    70103
    71104bool VolFogEffect::deactivate()
    72105{
    73   PRINTF(0)("Deactivate VolFogEffect\n");
    74 }
    75 
    76 /*
    77 void VolFogEffect::setFogColor(int v)
    78 {
    79         float z;       
    80         float f;       
    81 
    82         z = 0.0 - vertices[v].y;
    83         f = (60.0 - z) / (60.0 - 0.0); 
    84         glColor4f(this->colorVector.x, this->colorVector.y, this->colorVector.z, f);
    85 }
    86 */
     106  PRINTF(0)("Deactivating VolFogEffect\n");
     107}
     108
    87109
    88110/**
     
    91113void VolFogEffect::draw() const
    92114{
    93         // PRINTF(0)("DRAW VolFogEffect\n");
    94 
    95         glDepthMask(GL_TRUE);
    96         glEnable(GL_BLEND);
    97         glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA);
    98         // glDisable(GL_TEXTURE_2D);
    99         // draw the fog panels
    100        
    101         glBegin(GL_QUADS);
    102 
    103         glColor4f(0.6, 0.2, 0.0, (10.0 - (0.0 - -10.0f)) / (10.0 - 0.0));
    104         glVertex3f( 10.0f,-10.0f, 10.0f);       // Top Right Of The Quad (Bottom)
    105         glColor4f(0.6, 0.2, 0.0, (10.0 - (0.0 - -10.0f)) / (10.0 - 0.0));
    106         glVertex3f(-10.0f,-10.0f, 10.0f);       // Top Left Of The Quad (Bottom)
    107         glColor4f(0.6, 0.2, 0.0, (10.0 - (0.0 - -10.0f)) / (10.0 - 0.0));
    108         glVertex3f(-10.0f,-10.0f,-10.0f);       // Bottom Left Of The Quad (Bottom)
    109         glColor4f(0.6, 0.2, 0.0, (10.0 - (0.0 - -10.0f)) / (10.0 - 0.0));
    110         glVertex3f( 10.0f,-10.0f,-10.0f);       // Bottom Right Of The Quad (Bottom)
    111        
    112         glColor4f(0.6, 0.2, 0.0, (10.0 - (0.0 - 10.0f)) / (10.0 - 0.0));
    113         glVertex3f( 10.0f, 10.0f, 10.0f);       // Top Right Of The Quad (Front)
    114         glColor4f(0.6, 0.2, 0.0, (10.0 - (0.0 - 10.0f)) / (10.0 - 0.0));
    115         glVertex3f(-10.0f, 10.0f, 10.0f);       // Top Left Of The Quad (Front)
    116         glColor4f(0.6, 0.2, 0.0, (10.0 - (0.0 - -10.0f)) / (10.0 - 0.0));
    117         glVertex3f(-10.0f,-10.0f, 10.0f);       // Bottom Left Of The Quad (Front)
    118         glColor4f(0.6, 0.2, 0.0, (10.0 - (0.0 - -10.0f)) / (10.0 - 0.0));
    119         glVertex3f( 10.0f,-10.0f, 10.0f);       // Bottom Right Of The Quad (Front)
    120        
    121         glColor4f(0.6, 0.2, 0.0, (10.0 - (0.0 - -10.0f)) / (10.0 - 0.0));
    122         glVertex3f( 10.0f,-10.0f,-10.0f);       // Top Right Of The Quad (Back)
    123         glColor4f(0.6, 0.2, 0.0, (10.0 - (0.0 - -10.0f)) / (10.0 - 0.0));
    124         glVertex3f(-10.0f,-10.0f,-10.0f);       // Top Left Of The Quad (Back)
    125         glColor4f(0.6, 0.2, 0.0, (10.0 - (0.0 - 10.0f)) / (10.0 - 0.0));
    126         glVertex3f(-10.0f, 10.0f,-10.0f);       // Bottom Left Of The Quad (Back)
    127         glColor4f(0.6, 0.2, 0.0, (10.0 - (0.0 - 10.0f)) / (10.0 - 0.0));
    128         glVertex3f( 10.0f, 10.0f,-10.0f);       // Bottom Right Of The Quad (Back)
    129        
    130         glColor4f(0.6, 0.2, 0.0, (10.0 - (0.0 - 10.0f)) / (10.0 - 0.0));
    131         glVertex3f(-10.0f, 10.0f, 10.0f);       // Top Right Of The Quad (Left)
    132         glColor4f(0.6, 0.2, 0.0, (10.0 - (0.0 - 10.0f)) / (10.0 - 0.0));
    133         glVertex3f(-10.0f, 10.0f,-10.0f);       // Top Left Of The Quad (Left)
    134         glColor4f(0.6, 0.2, 0.0, (10.0 - (0.0 - -10.0f)) / (10.0 - 0.0));
    135         glVertex3f(-10.0f,-10.0f,-10.0f);       // Bottom Left Of The Quad (Left)
    136         glColor4f(0.6, 0.2, 0.0, (10.0 - (0.0 - -10.0f)) / (10.0 - 0.0));
    137         glVertex3f(-10.0f,-10.0f, 10.0f);       // Bottom Right Of The Quad (Left)
    138        
    139         glColor4f(0.6, 0.2, 0.0, (10.0 - (0.0 - 10.0f)) / (10.0 - 0.0));
    140         glVertex3f( 10.0f, 10.0f,-10.0f);       // Top Right Of The Quad (Right)
    141         glColor4f(0.6, 0.2, 0.0, (10.0 - (0.0 - 10.0f)) / (10.0 - 0.0));
    142         glVertex3f( 10.0f, 10.0f, 10.0f);       // Top Left Of The Quad (Right)
    143         glColor4f(0.6, 0.2, 0.0, (10.0 - (0.0 - -10.0f)) / (10.0 - 0.0));
    144         glVertex3f( 10.0f,-10.0f, 10.0f);       // Bottom Left Of The Quad (Right)
    145         glColor4f(0.6, 0.2, 0.0, (10.0 - (0.0 - -10.0f)) / (10.0 - 0.0));
    146         glVertex3f( 10.0f,-10.0f,-10.0f);       // Bottom Right Of The Quad (Right)
    147 
    148         glEnd();
    149 
    150         // restore rendering state
    151 
    152         // glEnable(GL_TEXTURE_2D);
    153         glDisable(GL_BLEND);
    154 
     115    glPushAttrib(GL_ENABLE_BIT);
     116
     117glClearDepth (1.0f);
     118  glDepthFunc (GL_LEQUAL);                            // The Type Of Depth Testing
     119  glEnable (GL_DEPTH_TEST);                           // Enable Depth Testing
     120  glShadeModel (GL_SMOOTH);                           // Select Smooth Shading
     121  glHint (GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Set Perspective Calculations To Most AccurateAbili
     122
     123
     124  // Set Up Fog
     125  glEnable(GL_FOG);                         // Enable Fog
     126  glFogi(GL_FOG_MODE, GL_LINEAR);                   // Fog Fade Is Linear
     127  glFogfv(GL_FOG_COLOR, fogColor);                  // Set The Fog Color
     128  glFogf(GL_FOG_START,  1.0f);                    // Set The Fog Start
     129  glFogf(GL_FOG_END,    0.0f);                    // Set The Fog End
     130  glHint(GL_FOG_HINT, GL_NICEST);                   // Per-Pixel Fog Calculation
     131  glFogi(GL_FOG_COORDINATE_SOURCE_EXT, GL_FOG_COORDINATE_EXT);    // Set Fog Based On Vertice Coordinates
     132
     133
     134
     135  //glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);        // Clear Screen And Depth Buffer
     136  //glLoadIdentity ();                          // Reset The Modelview Matrix
     137
     138  //glTranslatef(camx, 0.0f, camz);             // Move To Our Camera Z/X Position
     139
     140  // glFogCoordEXT is very similar to glVertex3f. If you understand
     141  // the way vertexs are applied in OpenGL, you will not have any dificulty
     142  // understanding glFogCoordEXT.
     143
     144  // In this tutorial we are applyng the fog in a corridor, so the fog
     145  // goes from the less density (the minor z) to a bigger density (the biggest z).
     146  // If you check the fog_start and fog_eng, it's 0 and 1.
     147
     148  // So, we will pass to the function glFogCoordEXT, the fog value corresponding
     149  // with the glVertex3f value.If we are drawing a quad from z minus to z major,
     150  // we do exactly the same with glFogCoord.
     151
     152  // For example, in the first quad, is vertex coordinates in the Z field are all
     153  // -15.0f. So we want the fog to completely fill this quad, so we assign 0 to all
     154  // the glFogCoordExt.
     155 
     156  glBegin(GL_QUADS);                          // Back Wall
     157    glFogCoordfEXT( 0.0f); glVertex3f(-2.5f,-2.5f,-15.0f);
     158    glFogCoordfEXT( 0.0f); glVertex3f( 2.5f,-2.5f,-15.0f);
     159    glFogCoordfEXT( 0.0f); glVertex3f( 2.5f, 2.5f,-15.0f);
     160    glFogCoordfEXT( 0.0f); glVertex3f(-2.5f, 2.5f,-15.0f);
     161  glEnd();
     162
     163  glBegin(GL_QUADS);                          // Floor
     164    glFogCoordfEXT( 0.0f); glVertex3f(-2.5f,-2.5f,-15.0f);
     165    glFogCoordfEXT( 0.0f); glVertex3f( 2.5f,-2.5f,-15.0f);
     166    glFogCoordfEXT( 1.0f); glVertex3f( 2.5f,-2.5f, 15.0f);
     167    glFogCoordfEXT( 1.0f); glVertex3f(-2.5f,-2.5f, 15.0f);
     168  glEnd();
     169
     170  glBegin(GL_QUADS);                          // Roof
     171    glFogCoordfEXT( 0.0f); glVertex3f(-2.5f, 2.5f,-15.0f);
     172    glFogCoordfEXT( 0.0f); glVertex3f( 2.5f, 2.5f,-15.0f);
     173    glFogCoordfEXT( 1.0f); glVertex3f( 2.5f, 2.5f, 15.0f);
     174    glFogCoordfEXT( 1.0f); glVertex3f(-2.5f, 2.5f, 15.0f);
     175  glEnd();
     176
     177  glBegin(GL_QUADS);                          // Right Wall
     178    glFogCoordfEXT( 1.0f); glVertex3f( 2.5f,-2.5f, 15.0f);
     179    glFogCoordfEXT( 1.0f); glVertex3f( 2.5f, 2.5f, 15.0f);
     180    glFogCoordfEXT( 0.0f); glVertex3f( 2.5f, 2.5f,-15.0f);
     181    glFogCoordfEXT( 0.0f); glVertex3f( 2.5f,-2.5f,-15.0f);
     182  glEnd();
     183
     184  glBegin(GL_QUADS);                          // Left Wall
     185    glFogCoordfEXT( 1.0f); glVertex3f(-2.5f,-2.5f, 15.0f);
     186    glFogCoordfEXT( 1.0f); glVertex3f(-2.5f, 2.5f, 15.0f);
     187    glFogCoordfEXT( 0.0f); glVertex3f(-2.5f, 2.5f,-15.0f);
     188    glFogCoordfEXT( 0.0f); glVertex3f(-2.5f,-2.5f,-15.0f);
     189  glEnd();
     190 
     191  //glFlush ();                             // Flush The GL Rendering Pipeline
     192  glPopAttrib();
    155193}
    156194
  • branches/atmospheric_engine/src/lib/graphics/effects/volfog_effect.h

    r7530 r7546  
    99
    1010#include "weather_effect.h"
     11
     12// Variables Necessary For FogCoordfEXT
     13#define GL_FOG_COORDINATE_SOURCE_EXT  0x8450
     14#define GL_FOG_COORDINATE_EXT         0x8451
    1115
    1216class VolFogEffect : public WeatherEffect
     
    2630    virtual void tick(float dt);
    2731
    28     //inline void startFogColor(float r, float g, float b) { this->colorVector = Vector(r, g, b); }
    29     //inline void setFogAltitude(float altitude) { this->fogAltitude = altitude; }
    30     void test(int t);
     32  private:
    3133
    32   private:
    33     //void setFogColor(int v);
    34     //GLfloat                 fogAltitude;
    35     //Vector                  colorVector;
     34    GLfloat fogColor[4];
     35
    3636};
    3737
Note: See TracChangeset for help on using the changeset viewer.