Changeset 8255 in orxonox.OLD for trunk/src/lib/graphics
- Timestamp:
- Jun 8, 2006, 3:44:12 PM (19 years ago)
- Location:
- trunk/src/lib/graphics
- Files:
-
- 14 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/lib/graphics/effects/cloud_effect.cc
r7810 r8255 11 11 ### File Specific: 12 12 main-programmer: hdavid, amaechler 13 14 INSPIRED BY http://www.codesampler.com/usersrc/usersrc_6.htm#oglu_sky_dome_shader 13 15 */ 14 16 … … 17 19 #include "util/loading/load_param.h" 18 20 #include "util/loading/factory.h" 21 #include "util/loading/resource_manager.h" 19 22 20 23 #include "glincl.h" 21 //#include "graphics_engine.h"24 #include "material.h" 22 25 #include <math.h> 26 #include "state.h" 27 #include "p_node.h" 28 #include "shader.h" 29 #include "shell_command.h" 23 30 24 31 #include "parser/tinyxml/tinyxml.h" 25 32 33 #include "sglmodel.h" 34 26 35 using namespace std; 36 37 SHELL_COMMAND(activate, CloudEffect, activateCloud); 38 SHELL_COMMAND(deactivate, CloudEffect, deactivateCloud); 27 39 28 40 CREATE_FACTORY(CloudEffect, CL_CLOUD_EFFECT); … … 37 49 this->loadParams(root); 38 50 39 this->activate(); 51 if(cloudActivate) 52 this->activate(); 40 53 } 41 54 … … 43 56 { 44 57 this->deactivate(); 45 } 58 59 delete this->cloudMaterial; 60 61 cloudModel.Delete(); 62 Shader::unload(this->cloudShader); 63 64 } 65 66 67 bool CloudEffect::init() 68 { 69 PRINTF(1)("Initializing CloudEffect\n"); 70 71 // Default values 72 this->cloudActivate = false; 73 this->cloudTint[4] = ( 0.9f, 0.7f, 0.7f, 1.0f ); 74 this->cloudScroll = 1.0f; 75 this->time = 0.0f; 76 //g_cloud_texture = 0; 77 78 this->cloudTexture = "pictures/sky/cloud1.jpg"; 79 80 cloudModel.Load("sky.sgl"); 81 cloudModel.Unitize(); 82 83 // Get the bounding box of the sky dome 84 float bbox[3] = {0}; 85 cloudModel.GetDimensions(bbox[0], bbox[1], bbox[2]); 86 87 // Load Shaders 88 this->cloudShader = new Shader( ResourceManager::getInstance()->getDataDir() + "/shaders/sky.vert", ResourceManager::getInstance()->getDataDir() +"/shaders/sky.frag"); 89 90 // Tell the shader the bounding box of the sky dome 91 this->cloudShader->bindShader("bbox", bbox, 4); 92 93 // Initialze Cloud Material 94 this->cloudMaterial = new Material("Sky"); 95 this->cloudMaterial->setIllum(3); 96 this->cloudMaterial->setAmbient(1.0, 1.0, 1.0); 97 this->cloudMaterial->setDiffuseMap(this->cloudTexture); 98 99 } 100 46 101 47 102 void CloudEffect::loadParams(const TiXmlElement* root) … … 49 104 WeatherEffect::loadParams(root); 50 105 51 LoadParam(root, "animSpeed", this, CloudEffect, setCloudAnimation); 52 53 } 54 55 56 bool CloudEffect::init() 57 { 58 // default values 59 this->cloudAnimTimeStep = 0; 60 61 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 62 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 63 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 64 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 65 66 // Generate noise map a 67 CloudEffect::genNoiseMap(cloudMap32_a); 68 69 if (this->cloudAnimTimeStep > 0) { 70 // Generate noise map b 71 CloudEffect::genNoiseMap(cloudMap32_b); 106 // LoadParam(root, "speed", this, CloudEffect, setCloudAnimation); 107 // LoadParam(root, "texture", this, CloudEffect, setCloudTexture); 108 109 LOAD_PARAM_START_CYCLE(root, element); 110 { 111 LoadParam_CYCLE(element, "option", this, CloudEffect, setCloudOption); 72 112 } 73 } 113 LOAD_PARAM_END_CYCLE(element); 114 } 115 74 116 75 117 bool CloudEffect::activate() 76 118 { 77 PRINTF(0)( "Activating CloudEffect\n"); 78 if (this->cloudAnimTimeStep == 0) { 79 for (int i = 0; i < 32*32; i++) 80 cloudMap32_c[i] = cloudMap32_a[i]; 81 82 CloudEffect::overlapOctaves(); 83 CloudEffect::expFilter(); 84 CloudEffect::genCloudTexture(); 85 } 119 PRINTF(0)( "Activating CloudEffect with Material %s\n", this->cloudTexture.c_str()); 120 121 this->cloudActivate = true; 122 86 123 } 87 124 … … 89 126 { 90 127 PRINTF(0)("Deactivating CloudEffect\n"); 91 } 92 93 void CloudEffect::genCloudTexture() { 94 for(int i=0; i<256; i++) 95 for(int j=0; j<256; j++) 96 { 97 float color = cloudMap256[i*256+j]; 98 cloudTexture[i][j][0] = (char) color; 99 cloudTexture[i][j][1] = (char) color; 100 cloudTexture[i][j][2] = (char) color; 101 } 102 103 glGenTextures(2, &texID[0]); 104 glBindTexture(GL_TEXTURE_2D, texID[0]); 105 gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, 256, 256, GL_RGB, GL_UNSIGNED_BYTE, cloudTexture); 106 } 107 108 void CloudEffect::calcAnimMap(float timer) { 109 110 for (int x=0; x<32*32; x++) 111 cloudMap32_c[x] = (cloudMap32_a[x] * ((this->cloudAnimTimeStep - timer) / this->cloudAnimTimeStep)) + (cloudMap32_b[x] * (timer / this->cloudAnimTimeStep)); 112 128 129 this->cloudActivate = false; 113 130 } 114 131 115 132 void CloudEffect::draw() const 116 133 { 117 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 118 134 if (!this->cloudActivate) 135 return; 136 137 // glMatrixMode(GL_MODELVIEW); 138 // glPushMatrix(); 139 // 140 // // Move sphere along with the camera 141 // Vector r = State::getCameraNode()->getAbsCoor(); 142 // glTranslatef(r.x, r.y, r.z); 143 // 144 // // Sky movement 145 // glRotatef(mover, 0, 0, 1); 146 // 147 // cloudMaterial->select(); 148 // gluSphere(this->sphereObj, this->sphereRadius, 20, 20); 149 // glPopMatrix(); 150 151 // ****** 152 153 glMatrixMode(GL_MODELVIEW); 119 154 glPushMatrix(); 120 glEnable(GL_TEXTURE_2D); 121 122 glBindTexture(GL_TEXTURE_2D, texID[0]); 123 124 // FIXME : Bind this to the sky - how do I do this? 125 glBegin(GL_QUADS); 126 glTexCoord2f(0.0f, 0.0f); glVertex3f(20, 20, 60); // Bottom Left Of The Texture and Quad 127 glTexCoord2f(1.0f, 0.0f); glVertex3f(60, 20, 60); // Bottom Right Of The Texture and Quad 128 glTexCoord2f(1.0f, 1.0f); glVertex3f(60, 60, 60); // Top Right Of The Texture and Quad 129 glTexCoord2f(0.0f, 1.0f); glVertex3f(20, 60, 60); // Top Left Of The Texture and Quad 130 glEnd(); 155 156 // glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 157 // glShadeModel(GL_SMOOTH); 158 // glEnable(GL_DEPTH_TEST); 159 // glEnable(GL_CULL_FACE); 160 // glCullFace(GL_BACK); 161 // glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); 162 163 // glLineWidth(3.0f); 164 165 static float time = 0.0f; 166 // static vector3f eye = {0.0f, 0.0f, 0.0f}, look = {0.0f, 0.0f, 1.0f}, up = {0.0f, 1.0f, 0.0f}; 167 168 // glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 169 // glLoadIdentity(); 170 // gluLookAt(eye[x], eye[y], eye[z], look[x], look[y], look[z], up[x], up[y], up[z]); 171 172 // Turn off the depth buffer when rendering the background 173 // glDisable(GL_DEPTH_TEST); 174 175 this->cloudShader->activateShader(); 176 177 /* Select the shader program and update parameters. */ 178 /* The "time" parameter controls the cloud scrolling. */ 179 this->cloudShader->bindShader("time", &time, 1); 180 /* The "horizon" parameter controls the sky tinting. */ 181 this->cloudShader->bindShader("horizon", cloudTint, 4); 182 183 glActiveTexture(GL_TEXTURE0 + 0); 184 glActiveTexture(GL_TEXTURE0 + 1); 185 186 // Load the cloud texture 187 //glBindTexture(GL_TEXTURE_2D, g_cloud_texture); 188 this->cloudMaterial->select(); 189 190 // Render the sky dome 191 cloudModel.Render(); 192 193 // Unselect the shader 194 Shader::deactivateShader(); 195 196 /* Turn on the depth buffer when rendering the foreground. */ 197 // glEnable(GL_DEPTH_TEST); 198 199 /* Render the forground, for example, a teapot or bunny. */ 200 // glEnable(GL_LIGHTING); 201 // glColor3f(0.0f, 1.0f, 0.0f); 202 // glBegin(GL_QUADS); 203 // glNormal3f( 0.0f, 1.0f, 0.0f); 204 // glVertex3f( 20.0f, -1.0f, 20.0f); 205 // glVertex3f( 20.0f, -1.0f, -20.0f); 206 // glVertex3f(-20.0f, -1.0f, -20.0f); 207 // glVertex3f(-20.0f, -1.0f, 20.0f); 208 // glEnd(); 209 // glDisable(GL_LIGHTING); 131 210 132 211 glPopMatrix(); 212 133 213 } 134 214 135 215 void CloudEffect::tick (float dt) 136 216 { 137 if (this->cloudAnimTimeStep > 0) { 138 if (timer >= this->cloudAnimTimeStep) { 139 timer -= this->cloudAnimTimeStep; 140 for (int i = 0; i < 32*32; i++) 141 cloudMap32_a[i] = cloudMap32_b[i]; 142 CloudEffect::genNoiseMap(cloudMap32_b); 143 } 144 145 //map32anim = (map32a * (10 - timer)) + (map32b * timer); 146 CloudEffect::calcAnimMap(timer); 147 148 CloudEffect::overlapOctaves(); 149 CloudEffect::expFilter(); 150 CloudEffect::genCloudTexture(); 151 152 timer += dt; 153 } 154 } 155 156 /* 157 Random noise generator 158 */ 159 float CloudEffect::noise(int x, int y, int random) 160 { 161 int n = x + y * 57 + random * 131; 162 n = (n<<13) ^ n; 163 return (1.0f - ( (n * (n * n * 15731 + 789221) + 164 1376312589)&0x7fffffff)* 0.000000000931322574615478515625f); 165 } 166 167 /* 168 Set noise for the 32*32 noise map: 169 */ 170 void CloudEffect::genNoiseMap(float *map) 171 { 172 float temp[34][34]; 173 174 int random = rand() % 5000; 175 176 for (int y = 1; y < 33; y++) 177 for (int x = 1; x < 33; x++) 178 temp[x][y] = 128.0f + CloudEffect::noise(x, y, random) * 128.0f; 179 180 // Seamless cloud 181 for (int x=1; x<33; x++) 182 { 183 temp[0][x] = temp[32][x]; 184 temp[33][x] = temp[1][x]; 185 temp[x][0] = temp[x][32]; 186 temp[x][33] = temp[x][1]; 187 } 188 temp[0][0] = temp[32][32]; 189 temp[33][33] = temp[1][1]; 190 temp[0][33] = temp[32][1]; 191 temp[33][0] = temp[1][32]; 192 193 // We mirror the side and corner elements so our final cloud will be seamless without any ugly borders showing. 194 for (int y=1; y<33; y++) 195 for (int x=1; x<33; x++) 196 { 197 float center = temp[x][y]/4.0f; 198 float sides = (temp[x+1][y] + temp[x-1][y] + temp[x][y+1] + temp[x][y-1])/8.0f; 199 float corners = (temp[x+1][y+1] + temp[x+1][y-1] + temp[x-1][y+1] + temp[x-1][y-1])/16.0f; 200 201 map[((x-1)*32) + (y-1)] = center + sides + corners; 202 } 203 } 204 205 /* 206 Interpolation - average the value of each pixel value with that of its neighbors' values. 207 */ 208 float CloudEffect::interpolate(float x, float y, float *map) 209 { 210 int Xint = (int)x; 211 int Yint = (int)y; 212 213 float Xfrac = x - Xint; 214 float Yfrac = y - Yint; 215 216 int X0 = Xint % 32; 217 int Y0 = Yint % 32; 218 int X1 = (Xint + 1) % 32; 219 int Y1 = (Yint + 1) % 32; 220 221 float bot = map[X0*32 + Y0] + Xfrac * (map[X1*32 + Y0] - map[X0*32 + Y0]); 222 float top = map[X0*32 + Y1] + Xfrac * (map[X1*32 + Y1] - map[X0*32 + Y1]); 223 224 return (bot + Yfrac * (top - bot)); 225 } 226 227 228 /* 229 Octaves are overlapped together to give cloud more turbulence. We will use four octaves for our cloud. 230 */ 231 void CloudEffect::overlapOctaves() 232 { 233 for (int x=0; x<256*256; x++) 234 { 235 cloudMap256[x] = 0; 236 } 237 238 for (int octave=0; octave<4; octave++) 239 for (int x=0; x<256; x++) 240 for (int y=0; y<256; y++) 241 { 242 float scale = 1 / pow(2.0f, (float) 3-octave); 243 float noise = CloudEffect::interpolate(x*scale, y*scale , cloudMap32_c); 244 245 //The octaves are added together with the proper weight factors. 246 //You could replace pow(2, i) with 1<<i for faster computation 247 cloudMap256[(y*256) + x] += noise / pow(2.0f, (float) octave); 248 } 249 } 250 251 252 /* 253 Filter the noise with exponential function 254 */ 255 void CloudEffect::expFilter() 256 { 257 float cover = 20.0f; 258 float sharpness = 0.95f; 259 260 for (int x=0; x<256*256; x++) 261 { 262 float c = cloudMap256[x] - (255.0f-cover); 263 if (c<0) c = 0; 264 cloudMap256[x] = 255.0f - ((float)(pow(sharpness, c))*255.0f); 265 } 266 } 267 268 217 if (!this->cloudActivate) 218 return; 219 220 // Update the timer for scrolling the clouds 221 time = time + ((1.0f / 2000.0f) * cloudScroll); 222 } 223 -
trunk/src/lib/graphics/effects/cloud_effect.h
r7810 r8255 6 6 #define _CLOUD_EFFECT 7 7 8 #include "vector.h"9 #include "vector2D.h"10 11 8 #include "weather_effect.h" 12 9 13 10 #include "sound_buffer.h" 14 11 #include "sound_source.h" 12 13 #include "world_entity.h" 14 #include "glincl.h" 15 16 #include "sglmodel.h" 17 18 class Shader; 19 class Material; 20 class Vector; 15 21 16 22 class CloudEffect : public WeatherEffect … … 27 33 virtual bool deactivate(); 28 34 35 inline void activateCloud() { this->activate(); } 36 inline void deactivateCloud() { this->deactivate(); } 37 29 38 virtual void draw() const; 30 39 virtual void tick(float dt); 31 40 32 inline void setCloudAnimation(float timestep) { this->cloudAnimTimeStep = timestep; } 41 inline void setCloudOption(const std::string& option) { 42 if (option == "activate") this->cloudActivate = true; 43 } 44 33 45 34 46 private: 35 // Basic noise maps 32x32 36 float cloudMap32_a[32 * 32]; 37 float cloudMap32_b[32 * 32]; 38 float cloudMap32_c[32 * 32]; 47 void initialize(char* fileName); 39 48 40 // The cloud map 256x256 41 float cloudMap256[256 * 256]; 49 bool cloudActivate; 42 50 43 // Temporary array to hold texture RGB values 44 char cloudTexture[256][256][3]; 51 Material* cloudMaterial; // A Material for the Sphere. 45 52 46 GLuint texID[2]; 47 float timer; 53 std::string cloudTexture; 48 54 49 bool cloudAnimTimeStep; 55 Sglmodel_sgl cloudModel; 56 Shader* cloudShader; 50 57 51 float noise(int x, int y, int random); 52 float interpolate(float x, float y, float *map); 53 void overlapOctaves(); 54 void expFilter(); 58 GLfloat cloudTint[4]; 59 GLfloat cloudScroll; 55 60 56 void genNoiseMap(float *map); 57 void genCloudTexture(); 58 void calcAnimMap(float timer); 61 float time; 59 62 60 63 }; -
trunk/src/lib/graphics/effects/fog_effect.cc
r7810 r8255 20 20 #include "glincl.h" 21 21 22 /*#include "shell_command.h"23 SHELL_COMMAND(activateFog, FogEffect, FogEffect::activate) 24 ->setAlias("aFog");25 SHELL_COMMAND(deactivate Fog, FogEffect, FogEffect::deactivate)26 ->setAlias("dFog");*/ 22 #include "shell_command.h" 23 24 SHELL_COMMAND(activate, FogEffect, activateFog); 25 SHELL_COMMAND(deactivate, FogEffect, deactivateFog); 26 SHELL_COMMAND(startfogging, FogEffect, startFogging); 27 27 28 28 using namespace std; … … 39 39 this->loadParams(root); 40 40 41 this->activate(); 41 if (this->fogActivate) 42 this->activate(); 42 43 } 43 44 … … 57 58 LoadParam(root, "range", this, FogEffect, setFogRange); 58 59 LoadParam(root, "color", this, FogEffect, setFogColor); 60 61 LOAD_PARAM_START_CYCLE(root, element); 62 { 63 LoadParam_CYCLE(element, "option", this, FogEffect, setFogOption); 64 } 65 LOAD_PARAM_END_CYCLE(element); 59 66 } 60 67 … … 62 69 { 63 70 //default values 71 this->fogActivate = false; 72 this->fogFadeDuration = 0; 73 this->localTimer = 0; 74 64 75 this->fogMode = GL_EXP2; 65 76 this->fogDensity = 0.001; 66 77 this->fogStart = 0; 67 78 this->fogEnd = 5000; 68 this->colorVector = Vector(0.7, 0.7, 0.7); 79 this->colorVector = Vector(0.7, 0.7, 0.7); 80 69 81 } 70 71 82 72 83 … … 75 86 PRINTF(0)( "Enabling FogEffect, mode: %i, density: %f, start: %f, end: %f, color %f, %f, %f\n", this->fogMode, this->fogDensity, this->fogStart, this->fogEnd, this->colorVector.x, this->colorVector.y, this->colorVector.z); 76 87 88 this->fogActivate = true; 89 90 GLfloat fogColor[4] = { colorVector.x, colorVector.y, colorVector.z, 1.0}; 91 glFogi(GL_FOG_MODE, this->fogMode); 92 glFogfv(GL_FOG_COLOR, fogColor); 93 glFogf(GL_FOG_DENSITY, this->fogDensity); 94 glHint(GL_FOG_HINT, GL_DONT_CARE); 95 glFogf(GL_FOG_START, this->fogStart); 96 glFogf(GL_FOG_END, this->fogEnd); 97 77 98 glEnable(GL_FOG); 78 { 79 GLfloat fogColor[4] = { colorVector.x, colorVector.y, colorVector.z, 1.0}; 80 81 glFogi(GL_FOG_MODE, this->fogMode); 82 glFogfv(GL_FOG_COLOR, fogColor); 83 glFogf(GL_FOG_DENSITY, this->fogDensity); 84 glHint(GL_FOG_HINT, GL_DONT_CARE); 85 glFogf(GL_FOG_START, this->fogStart); 86 glFogf(GL_FOG_END, this->fogEnd); 87 } 88 glClearColor(0.5, 0.5, 0.5, 1.0); 99 // glClearColor(0.5, 0.5, 0.5, 1.0); 89 100 } 90 101 … … 93 104 { 94 105 PRINTF(0)("Deactivating FogEffect\n"); 106 107 this->fogActivate = false; 108 95 109 glDisable(GL_FOG); 110 } 111 112 void FogEffect::draw() const { 113 114 if (this->fogFadeDuration != 0 && this->localTimer < this->fogFadeDuration) 115 glFogf(GL_FOG_DENSITY, this->fogFadeDensity); 116 //else 117 // glFogf(GL_FOG_DENSITY, this->fogDensity); 118 119 } 120 void FogEffect::tick(float dt) 121 { 122 if (!this->fogActivate) 123 return; 124 125 126 if (this->fogFadeDuration != 0 && this->localTimer < this->fogFadeDuration) { 127 this->localTimer += dt; 128 float progress = this->localTimer / this->fogFadeDuration; 129 this->fogFadeDensity = progress * this->fogDensity; 130 } 131 } 132 133 void FogEffect::startFogging() { 134 135 if (this->fogActivate) 136 this->deactivate(); 137 138 this->fogFadeDuration = 10; 139 this->localTimer = 0; 140 this->activate(); 141 96 142 } 97 143 -
trunk/src/lib/graphics/effects/fog_effect.h
r7810 r8255 23 23 virtual bool deactivate(); 24 24 25 void activateFog() { this->activate(); } 26 void deactivateFog() { this->deactivate(); } 27 28 virtual void draw() const; 29 virtual void tick(float dt); 30 25 31 inline void setFogMode(const std::string& mode) { this->fogMode = this->stringToFogMode(mode); } 26 32 inline void setFogDensity(float density) { this->fogDensity = density; } 27 33 inline void setFogRange(float start, float end) { this->fogStart = start; this->fogEnd = end; } 28 34 inline void setFogColor(float r, float g, float b) { this->colorVector = Vector(r, g, b); } 35 inline void setFogOption(const std::string& option) { if (option == "activate") this->fogActivate = true; } 36 37 void startFogging(); 29 38 30 39 private: 31 40 GLint stringToFogMode(const std::string& mode); 32 41 33 private: 34 GLint fogMode; 35 GLfloat fogDensity; 36 GLfloat fogStart; 37 GLfloat fogEnd; 38 Vector colorVector; 42 bool fogActivate; 43 GLfloat fogFadeDuration; 44 float localTimer; 45 46 GLint fogMode; 47 GLfloat fogDensity; 48 GLfloat fogFadeDensity; 49 50 GLfloat fogStart; 51 GLfloat fogEnd; 52 Vector colorVector; 39 53 }; 40 54 -
trunk/src/lib/graphics/effects/lightening_effect.cc
r7810 r8255 18 18 #include "util/loading/load_param.h" 19 19 #include "util/loading/factory.h" 20 #include " render2D/image_plane.h"20 #include "effects/billboard.h" 21 21 22 22 #include "glincl.h" 23 23 #include "parser/tinyxml/tinyxml.h" 24 24 25 #include "shell_command.h" 26 #include "light.h" 27 28 SHELL_COMMAND(activate, LighteningEffect, activateLightening); 29 SHELL_COMMAND(deactivate, LighteningEffect, deactivateLightening); 30 25 31 using namespace std; 26 32 … … 30 36 { 31 37 this->setClassID(CL_LIGHTENING_EFFECT, "LighteningEffect"); 32 33 34 lightening = new ImagePlane(NULL);35 lightening->setTexture("maps/lightning_bolt.png");36 lightening->setSize(50, 50);37 lightening->setAbsCoor2D(10,10);38 lightening->setVisibility(true);39 40 38 41 39 this->init(); … … 44 42 this->loadParams(root); 45 43 46 this->activate(); 44 if(this->lighteningActivate) 45 this->activate(); 47 46 } 48 47 … … 50 49 { 51 50 this->deactivate(); 52 delete lightening;53 51 } 54 52 … … 56 54 { 57 55 WeatherEffect::loadParams(root); 56 57 LoadParam(root, "coord", this, LighteningEffect, coord); 58 LoadParam(root, "option", this, LighteningEffect, setLighteningOption); 59 LoadParam(root, "frequency", this, LighteningEffect, setFlashFrequency); 60 LoadParam(root, "const-time", this, LighteningEffect, setFlashConstTime); 61 LoadParam(root, "rising-time", this, LighteningEffect, setFlashRisingTime); 62 LoadParam(root, "size", this, LighteningEffect, setFlashSize); 63 LoadParam(root, "seed", this, LighteningEffect, setFlashSeed); 58 64 } 59 65 … … 61 67 bool LighteningEffect::init() 62 68 { 63 //Default values 69 lighteningActivate = false; 70 71 this->time = 0.0; 72 this->flashFrequency = 1.4f; 73 this->flashConstTime = 0.5f; 74 this->flashRisingTime = 0.1f; 75 76 this->width = 400.0f; 77 this->height = 100.0f; 78 this->seedWidth = 50; 79 this->seedHeight = 50; 80 this->bNewCoordinate = false; 81 82 this->seedX = 500.f; 83 this->seedZ = 1000.0f; 84 this->seedTime = 4.0f; 85 86 this->billboard[0] = new Billboard(NULL); 87 this->billboard[0]->setTexture("maps/lightning_bolt1.png"); 88 this->billboard[0]->setSize(this->width, this->height); 89 this->billboard[0]->setAbsCoor(3000,850,0); 90 this->billboard[0]->setVisibiliy(false); 91 92 this->billboard[1] = new Billboard(NULL); 93 this->billboard[1]->setTexture("maps/lightning_bolt2.png"); 94 this->billboard[1]->setSize(this->width, this->height); 95 this->billboard[1]->setAbsCoor(3000,850,0); 96 this->billboard[1]->setVisibiliy(false); 97 98 this->billboard[2] = new Billboard(NULL); 99 this->billboard[2]->setTexture("maps/lightning_bolt3.png"); 100 this->billboard[2]->setSize(this->width, this->height); 101 this->billboard[2]->setAbsCoor(3000,850,0); 102 this->billboard[2]->setVisibiliy(false); 103 104 this->billboard[3] = new Billboard(NULL); 105 this->billboard[3]->setTexture("maps/lightning_bolt4.png"); 106 this->billboard[3]->setSize(this->width, this->height); 107 this->billboard[3]->setAbsCoor(0.0f, 50.0f, 0.0f); 108 this->billboard[3]->setVisibiliy(false); 109 /* 110 this->soundSource = NULL; 111 this->thunderBuffer = NULL; 112 113 this->soundSource.setSourceNode(this); 114 115 //load sound 116 if (this->thunderBuffer != NULL) 117 ResourceManager::getInstance()->unload(this->thunderBuffer); 118 this->thunderBuffer = (OrxSound::SoundBuffer*)ResourceManager::getInstance()->load("sound/thunder.wav", WAV);*/ 119 } 120 121 void LighteningEffect::coord(float x, float y, float z) 122 { 123 this->billboard[0]->setAbsCoor(x, y, z); 124 this->billboard[1]->setAbsCoor(x, y, z); 125 this->billboard[2]->setAbsCoor(x, y, z); 126 this->billboard[3]->setAbsCoor(x, y, z); 127 this->mainPosX = x; 128 this->mainPosY = y; 129 this->mainPosZ = z; 130 } 131 132 133 void LighteningEffect::setFlashSize(float width, float height, float seedWidth, float seedHeight) 134 { 135 this->width = width; 136 this->height = height; 137 this->seedWidth = seedWidth; 138 this->seedHeight = seedHeight; 139 this->billboard[0]->setSize(this->width, this->height); 140 this->billboard[1]->setSize(this->width, this->height); 141 this->billboard[2]->setSize(this->width, this->height); 142 this->billboard[3]->setSize(this->width, this->height); 64 143 } 65 144 … … 68 147 { 69 148 PRINTF(0)( "Activating LighteningEffect\n" ); 70 149 this->time = 0; 150 lighteningActivate = true; 71 151 } 72 152 … … 75 155 { 76 156 PRINTF(0)("Deactivating LighteningEffect\n"); 157 this->billboard[0]->setVisibiliy(false); 158 this->billboard[1]->setVisibiliy(false); 159 this->billboard[2]->setVisibiliy(false); 160 this->billboard[3]->setVisibiliy(false); 161 lighteningActivate = false; 77 162 } 78 163 79 164 void LighteningEffect::tick (float dt) 80 165 { 81 82 } 166 if(!lighteningActivate) 167 return; 168 169 this->time += dt; 170 171 /*if( flashLight != NULL) 172 { 173 if((int)(100*time)%2) 174 this->flashLight->setDiffuseColor(0,0,0); 175 else 176 this->flashLight->setDiffuseColor(100,100,100); 177 178 //PRINTF(0)("100*time: %f %i\n", 100*time, (int)(100*time)); 179 }*/ 180 181 if( this->time > this->flashFrequency) 182 { 183 this->billboard[0]->setVisibiliy(true); 184 this->time = 0.0f; 185 186 this->flashLight = new Light(); 187 this->flashLight->setAbsCoor(this->billboard[0]->getAbsCoor().x, this->billboard[0]->getAbsCoor().y, this->billboard[0]->getAbsCoor().z); 188 this->flashLight->setDiffuseColor(100,100,100); 189 190 //this->soundSource.play(this->thunderBuffer); 191 } 192 else if( this->billboard[3]->isVisible() && this->time > this->flashConstTime) 193 { 194 this->billboard[3]->setVisibiliy(false); 195 this->time = 0.0f; 196 this->bNewCoordinate = true; 197 198 if(flashLight != NULL) 199 { 200 delete this->flashLight; 201 flashLight = NULL; 202 } 203 } 204 205 if( this->billboard[2]->isVisible() && this->time > this->flashRisingTime) 206 { 207 this->billboard[2]->setVisibiliy(false); 208 this->billboard[3]->setVisibiliy(true); 209 this->flashLight->setDiffuseColor(100,100,100); 210 } 211 else if( this->billboard[1]->isVisible() && this->time > this->flashRisingTime*2/3 ) 212 { 213 this->billboard[1]->setVisibiliy(false); 214 this->billboard[2]->setVisibiliy(true); 215 this->flashLight->setDiffuseColor(0,0,0); 216 } 217 else if( this->billboard[0]->isVisible() && this->time > this->flashRisingTime*1/3 ) 218 { 219 this->billboard[0]->setVisibiliy(false); 220 this->billboard[1]->setVisibiliy(true); 221 this->flashLight->setDiffuseColor(100,100,100); 222 } 223 224 if( this->bNewCoordinate) 225 { 226 float posX = this->mainPosX - this->seedX * (float)rand()/(float)RAND_MAX; 227 float posZ = this->mainPosZ + this->seedZ * (float)rand()/(float)RAND_MAX; 228 this->billboard[0]->setAbsCoor(posX, this->mainPosY, posZ); 229 this->billboard[1]->setAbsCoor(posX, this->mainPosY, posZ); 230 this->billboard[2]->setAbsCoor(posX, this->mainPosY, posZ); 231 this->billboard[3]->setAbsCoor(posX, this->mainPosY, posZ); 232 this->bNewCoordinate = false; 233 } 234 } 235 236 void LighteningEffect::draw() const 237 { 238 } -
trunk/src/lib/graphics/effects/lightening_effect.h
r7810 r8255 15 15 16 16 17 class ImagePlane; 17 class Billboard; 18 class Light; 18 19 19 20 class LighteningEffect : public WeatherEffect … … 30 31 virtual bool deactivate(); 31 32 32 virtual void tick(float dt); 33 virtual void draw() const; 34 virtual void tick(float dt); 35 36 void coord(float x, float y, float z); 37 void setFlashSize(float width, float height, float seedWidth, float seedHeight); 38 39 inline void setLighteningOption(const std::string& option) { if (option == "activate") this->lighteningActivate = true;} 40 inline void setFlashFrequency(float flashFrequency) { this->flashFrequency = flashFrequency; } 41 inline void setFlashConstTime(float flashConstTime) { this->flashConstTime = flashConstTime; } 42 inline void setFlashRisingTime(float flashRisingTime) { if(flashRisingTime > this->flashConstTime) 43 this->flashRisingTime = this->flashConstTime/2; 44 else 45 this->flashRisingTime = flashRisingTime; } 46 inline void setFlashSeed(float seedX, float seedZ, float seedTime) { this->seedX = seedX; 47 this->seedZ = seedZ; 48 this->seedTime = seedTime; } 33 49 50 void activateLightening() { this->activate(); } 51 void deactivateLightening() { this->deactivate(); } 52 34 53 private: 35 ImagePlane* lightening; 54 Billboard* billboard[4]; 55 bool lighteningActivate; 56 57 float flashFrequency; 58 float flashConstTime; 59 float flashRisingTime; 60 61 float time; 62 63 bool bNewCoordinate; 64 float width; 65 float height; 66 float seedWidth; 67 float seedHeight; 68 69 float seedX; 70 float seedZ; 71 float seedTime; 72 73 float mainPosX; 74 float mainPosY; 75 float mainPosZ; 76 77 Light* flashLight; 78 79 //OrxSound::SoundSource soundSource; 80 //OrxSound::SoundBuffer* thunderBuffer; 36 81 37 82 }; -
trunk/src/lib/graphics/effects/rain_effect.cc
r7810 r8255 1 1 /* 2 3 4 5 6 7 8 9 2 orxonox - the future of 3D-vertical-scrollers 3 4 Copyright (C) 2004 orx 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 2, or (at your option) 9 any later version. 10 10 11 11 ### File Specific: 12 12 main-programmer: hdavid, amaechler 13 13 */ 14 14 … … 25 25 #include "plane_emitter.h" 26 26 #include "shell_command.h" 27 #include "light.h" 27 28 28 29 #include "parser/tinyxml/tinyxml.h" … … 31 32 SHELL_COMMAND(deactivate, RainEffect, deactivateRain); 32 33 34 SHELL_COMMAND(startRaining, RainEffect, startRaining); 35 33 36 using namespace std; 34 37 35 38 CREATE_FACTORY(RainEffect, CL_RAIN_EFFECT); 39 40 // TODO: Dim Light with Rain, Finish preCaching, check out if multiple rain emitters work, Think about what happens with building poss. to hang movewithcam off, benchmark, possible to activate lightening, turn off visibility when in a building, variable emitter size depending on playable, also rain velocity 36 41 37 42 RainEffect::RainEffect(const TiXmlElement* root) … … 50 55 51 56 //load wind sound 52 if (this->rainWindForce >0) {57 if (this->rainWindForce != 0) { 53 58 if (this->windBuffer != NULL) 54 59 ResourceManager::getInstance()->unload(this->windBuffer); … … 56 61 } 57 62 58 this->activate(); 63 if(rainActivate) 64 this->activate(); 59 65 } 60 66 … … 80 86 LoadParam(root, "life", this, RainEffect, setRainLife); 81 87 LoadParam(root, "wind", this, RainEffect, setRainWind); 82 LoadParam(root, "option", this, RainEffect, setRainOption); 88 LoadParam(root, "startraining", this, RainEffect, setRainStart); 89 90 LOAD_PARAM_START_CYCLE(root, element); 91 { 92 LoadParam_CYCLE(element, "option", this, RainEffect, setRainOption); 93 } 94 LOAD_PARAM_END_CYCLE(element); 95 83 96 } 84 97 … … 87 100 { 88 101 //Default values 102 this->rainActivate = false; 103 this->rainMove = false; 89 104 this->rainCoord = Vector(500, 500, 500); 90 105 this->rainSize = Vector2D(1000, 1000); … … 94 109 this->rainMaxParticles = this->rainRate * this->rainLife; 95 110 this->rainWindForce = 0; 111 this->rainStartDuration = 0; 112 this->localTimer = 0; 113 this->soundRainVolume = 0.8f; 96 114 97 115 this->emitter = new PlaneEmitter(this->rainSize); 116 117 lightMan = LightManager::getInstance(); 118 this->rainAmbient = lightMan->getAmbientColor(); 98 119 } 99 120 … … 104 125 { 105 126 PRINTF(0)( "Activating RainEffect, coord: %f, %f, %f, size: %f, %f, rate: %f, velocity: %f, moveRain: %s\n", this->rainCoord.x, this->rainCoord.y, this->rainCoord.z, this->rainSize.x, this-> rainSize.y, this->rainRate, this->rainVelocity, this->rainMove ? "true" : "false" ); 127 128 this->rainActivate = true; 106 129 107 130 if (unlikely(RainEffect::rainParticles == NULL)) … … 114 137 RainEffect::rainParticles->setRadius(0.2, 0.02); 115 138 RainEffect::rainParticles->setRadius(1, 0.01); 116 RainEffect::rainParticles->setColor(0, 0.3, 0.3, 0.5, 0.2); 117 RainEffect::rainParticles->setColor(0.5, 0.4, 0.4, 0.5, 0.2); 118 RainEffect::rainParticles->setColor(1, 0.7, 0.7, 0.7, 0.2); 139 RainEffect::rainParticles->setColor(0, 0.3, 0.3, 0.5, 0.2); // grey blue 1 140 RainEffect::rainParticles->setColor(0.5, 0.4, 0.4, 0.5, 0.2); // grey blue 2 141 RainEffect::rainParticles->setColor(1, 0.7, 0.7, 0.7, 0.2); // light grey 119 142 } 120 143 … … 128 151 this->emitter->setSpread(this->rainWindForce / 50, 0.2); 129 152 130 this->soundSource.loop(this->rainBuffer); 131 if (this->rainWindForce > 0) 132 this->soundSource.loop(this->windBuffer); 153 this->soundSource.loop(this->rainBuffer, this->soundRainVolume); 154 if (this->rainWindForce != 0) this->soundSource.loop(this->windBuffer, 0.1f * this->rainWindForce); 155 156 lightMan->setAmbientColor(.1,.1,.1); 133 157 } 134 158 … … 137 161 { 138 162 PRINTF(0)("Deactivating RainEffect\n"); 163 164 this->rainActivate = false; 139 165 this->emitter->setSystem(NULL); 140 166 167 // Stop Sound 141 168 this->soundSource.stop(); 142 } 143 144 void RainEffect::activateRain() 145 { 146 this->activate(); 147 } 148 149 void RainEffect::deactivateRain() 150 { 151 this->deactivate(); 152 } 153 169 170 // Restore Light Ambient 171 lightMan->setAmbientColor(this->rainAmbient, this->rainAmbient, this->rainAmbient); 172 } 154 173 155 174 void RainEffect::tick (float dt) 156 175 { 176 if (!this->rainActivate) 177 return; 178 157 179 if (this->rainMove) { 158 180 this->rainCoord = State::getCameraNode()->getAbsCoor(); 159 181 this->emitter->setRelCoor(this->rainCoord.x , this->rainCoord.y+800, this->rainCoord.z); 160 182 } 161 } 183 184 if (this->rainStartDuration != 0 && this->localTimer < this->rainStartDuration) { 185 this->localTimer += dt; 186 float progress = this->localTimer / this->rainStartDuration; 187 188 // Dim Light 189 lightMan->setAmbientColor(1.1 - progress, 1.1 - progress, 1.1 - progress); 190 191 // use alpha in color to fade in 192 RainEffect::rainParticles->setColor(0, 0.3, 0.3, 0.5, 0.2 * progress); // grey blue 1 193 RainEffect::rainParticles->setColor(0.5, 0.4, 0.4, 0.5, 0.2 * progress); // grey blue 2 194 RainEffect::rainParticles->setColor(1, 0.7, 0.7, 0.7, 0.2 * progress); // light grey 195 196 // increase radius for more "heavy" rain 197 RainEffect::rainParticles->setRadius(0, 0.03 * progress); 198 RainEffect::rainParticles->setRadius(0.2, 0.02 * progress); 199 RainEffect::rainParticles->setRadius(1, 0.01 * progress); 200 201 // increase sound volume 202 // this->soundSource.fadein(this->rainBuffer, 10); 203 } 204 205 } 206 207 void RainEffect::startRaining() { 208 209 if (this->rainActivate) 210 this->deactivate(); 211 212 this->rainStartDuration = 10; 213 this->localTimer = 0; 214 this->activate(); 215 216 } -
trunk/src/lib/graphics/effects/rain_effect.h
r7810 r8255 14 14 class SparkParticles; 15 15 class PlainEmitter; 16 class LightManager; 16 17 17 18 #include "weather_effect.h" … … 34 35 virtual bool deactivate(); 35 36 36 void activateRain(); 37 void deactivateRain(); 37 virtual void tick(float dt); 38 38 39 virtual void tick(float dt); 39 inline void activateRain() { this->activate(); } 40 inline void deactivateRain() { this->deactivate(); } 41 void startRaining(); 40 42 41 43 inline void setRainCoord(float x, float y, float z) { this->rainCoord = Vector(x, y, z); } … … 45 47 inline void setRainLife(float life) { this->rainLife = life; } 46 48 inline void setRainWind(int force) { this->rainWindForce = force; } 47 inline void setRainOption(const std::string& option) { if (option == "moverain") this->rainMove = true; } 49 inline void setRainStart(float duration) { this->rainStartDuration = duration; } 50 51 inline void setRainOption(const std::string& option) { 52 if (option == "moverain") this->rainMove = true; 53 if (option == "activate") this->rainActivate = true; 54 } 48 55 49 56 50 57 private: 51 static SparkParticles* 52 ParticleEmitter* 58 static SparkParticles* rainParticles; 59 ParticleEmitter* emitter; 53 60 54 Vector rainCoord; 55 Vector2D rainSize; 56 GLfloat rainRate; 57 GLfloat rainVelocity; 58 GLfloat rainLife; 59 GLfloat rainMaxParticles; 60 int rainWindForce; 61 bool rainMove; 61 float localTimer; 62 63 Vector rainCoord; 64 Vector2D rainSize; 65 GLfloat rainRate; 66 GLfloat rainVelocity; 67 GLfloat rainLife; 68 GLfloat rainMaxParticles; 69 int rainWindForce; 70 GLfloat rainStartDuration; 71 bool rainMove; 72 bool rainActivate; 62 73 63 74 OrxSound::SoundSource soundSource; 64 75 OrxSound::SoundBuffer* rainBuffer; 65 76 OrxSound::SoundBuffer* windBuffer; 77 78 float soundRainVolume; 79 80 LightManager* lightMan; 81 GLfloat rainAmbient; 82 66 83 }; 67 84 68 69 85 #endif /* _RAIN_EFFECT */ -
trunk/src/lib/graphics/effects/snow_effect.cc
r7810 r8255 53 53 } 54 54 55 this->activate(); 55 if(snowActivate) 56 this->activate(); 56 57 } 57 58 … … 75 76 LoadParam(root, "emissionRate", this, SnowEffect, emissionRate); 76 77 LoadParam(root, "emissionVelocity", this, SnowEffect, emissionVelocity); 77 78 LoadParam(root, "wind", this, SnowEffect, wind); 78 79 LoadParam(root, "size", this, SnowEffect, size); 79 80 LoadParam(root, "coord", this, SnowEffect, coord); 81 82 LOAD_PARAM_START_CYCLE(root, element); 83 { 84 LoadParam_CYCLE(element, "option", this, SnowEffect, setSnowOption); 85 } 86 LOAD_PARAM_END_CYCLE(element); 80 87 } 81 88 … … 85 92 86 93 // Default values 94 this->snowActivate = false; 95 this->snowMove = false; 87 96 this->particles = 12000; 88 97 this->texture = "maps/snow_flake_01_32x32.png"; … … 100 109 this->alpha = 0.5; 101 110 this->snowSize = Vector2D(2500, 2500); 102 111 this->snowCoord = Vector(100,450,400); 103 112 this->snowWindForce = 1; 104 105 this->activated = false;106 113 } 107 114 … … 109 116 { 110 117 PRINTF(0)("Activating SnowEffect\n"); 111 activated = true; 118 119 this->snowActivate = true; 112 120 113 121 SnowEffect::snowParticles = new SpriteParticles(particles); … … 131 139 this->emitter->setSize(snowSize); 132 140 133 //SnowEffect::snowParticles->precache(8);141 // SnowEffect::snowParticles->precache(8); 134 142 135 143 if (this->snowWindForce > 1) … … 141 149 { 142 150 PRINTF(0)("Deactivating SnowEffect\n"); 143 activated = false; 144 151 152 this->snowActivate = false; 145 153 this->emitter->setSystem(NULL); 146 154 … … 150 158 } 151 159 152 void SnowEffect::activateSnow() 153 { 160 void SnowEffect::draw() const 161 { 162 if (!this->snowActivate) 163 return; 164 } 165 166 void SnowEffect::tick(float dt) 167 { 168 if (!this->snowActivate) 169 return; 170 171 /* 172 float distance = (State::getCameraNode()->getAbsCoor() - Vector(snowCoord.x, State::getCameraNode()->getAbsCoor().y, snowCoord.z)).len(); 173 174 if(activated) 175 { 176 if(distance > 0.3*snowSize.x || distance > 0.3*snowSize.y) 177 this->deactivate(); 178 else if(distance > 0.25*snowSize.x || distance > 0.25*snowSize.y) 179 this->alpha = 0.15; 180 else if(distance > 0.2*snowSize.x || distance > 0.2*snowSize.y) 181 this->alpha = 0.25; 182 else if(distance > 0.1*snowSize.x || distance > 0.1*snowSize.y) 183 this->alpha = 0.4; 184 185 SnowEffect::snowParticles->setColor(0,1, 1, 1, alpha); 186 SnowEffect::snowParticles->setColor(.5, .6, .6, .6, alpha/2); 187 SnowEffect::snowParticles->setColor(1, .0, .0, .0, .0); 188 } 189 else 190 { 191 if(distance < 0.3*snowSize.x || distance < 0.3*snowSize.y ) 154 192 this->activate(); 155 } 156 157 void SnowEffect::deactivateSnow() 158 { 159 this->deactivate(); 160 } 161 162 void SnowEffect::draw() const 163 { 164 } 165 166 void SnowEffect::tick(float dt) 167 { 168 float distance = (State::getCameraNode()->getAbsCoor() - Vector(snowCoord.x, State::getCameraNode()->getAbsCoor().y, snowCoord.z)).len(); 169 170 if(activated) 171 { 172 if(distance > 0.3*snowSize.x || distance > 0.3*snowSize.y) 173 this->deactivate(); 174 else if(distance > 0.25*snowSize.x || distance > 0.25*snowSize.y) 175 this->alpha = 0.15; 176 else if(distance > 0.2*snowSize.x || distance > 0.2*snowSize.y) 177 this->alpha = 0.25; 178 else if(distance > 0.1*snowSize.x || distance > 0.1*snowSize.y) 179 this->alpha = 0.4; 180 181 SnowEffect::snowParticles->setColor(0,1, 1, 1, alpha); 182 SnowEffect::snowParticles->setColor(.5, .6, .6, .6, alpha/2); 183 SnowEffect::snowParticles->setColor(1, .0, .0, .0, .0); 184 } 185 else 186 { 187 if(distance < 0.3*snowSize.x || distance < 0.3*snowSize.y ) 188 this->activate(); 189 if( distance < 0.25*snowSize.x || distance < 0.25*snowSize.y ) 190 this->alpha = 0.25; 191 else if( distance < 0.2*snowSize.x || distance < 0.2*snowSize.y ) 192 this->alpha = 0.4; 193 else if( distance < 0.1*snowSize.x || distance < 0.1*snowSize.y ) 194 this->alpha = 0.5; 195 196 SnowEffect::snowParticles->setColor(0,1, 1, 1, alpha); 197 SnowEffect::snowParticles->setColor(.5, .6, .6, .6, alpha/2); 198 SnowEffect::snowParticles->setColor(1, .0, .0, .0, .0); 199 } 200 } 201 193 if( distance < 0.25*snowSize.x || distance < 0.25*snowSize.y ) 194 this->alpha = 0.25; 195 else if( distance < 0.2*snowSize.x || distance < 0.2*snowSize.y ) 196 this->alpha = 0.4; 197 else if( distance < 0.1*snowSize.x || distance < 0.1*snowSize.y ) 198 this->alpha = 0.5; 199 200 SnowEffect::snowParticles->setColor(0,1, 1, 1, alpha); 201 SnowEffect::snowParticles->setColor(.5, .6, .6, .6, alpha/2); 202 SnowEffect::snowParticles->setColor(1, .0, .0, .0, .0); 203 }*/ 204 205 if (this->snowMove) { 206 this->snowCoord = State::getCameraNode()->getAbsCoor(); 207 this->emitter->setRelCoor(this->snowCoord.x , this->snowCoord.y+300, this->snowCoord.z); 208 } 209 } -
trunk/src/lib/graphics/effects/snow_effect.h
r7810 r8255 33 33 virtual bool deactivate(); 34 34 35 inline void activateSnow() { this->activate(); } 36 inline void deactivateSnow() { this->deactivate(); } 37 35 38 virtual void draw() const; 36 39 virtual void tick(float dt); 37 40 38 void activateSnow();39 void deactivateSnow();40 41 41 42 inline void numParticles(int n) { this->particles = n; } … … 48 49 inline void size(float sizeX, float sizeY) { this->snowSize = Vector2D(sizeX, sizeY); } 49 50 inline void coord(float x, float y, float z) { this->snowCoord = Vector(x, y, z); } 50 inline void wind(int force) { this->snowWindForce = force; } 51 inline void wind(int force) { this->snowWindForce = force; } 52 53 inline void setSnowOption(const std::string& option) { 54 /*if (option == "fade") this->snowFade = true;*/ 55 if (option == "movesnow") this->snowMove = true; 56 if (option == "activate") this->snowActivate = true; 57 } 51 58 52 59 53 60 private: 54 int 55 std::string 56 float 57 float 58 float 59 float 60 float 61 float 62 float 63 Vector 64 Vector2D 65 int 61 int particles; 62 std::string texture; 63 float life, randomLife; 64 float snowRadius, randomRadius; 65 float snowMass, randomMass; 66 float rate; 67 float velocity, randomVelocity; 68 float angle, randomAngle; 69 float alpha; 70 Vector snowCoord; 71 Vector2D snowSize; 72 int snowWindForce; 66 73 67 bool activated; 74 bool snowMove; 75 bool snowActivate; 68 76 69 PlaneEmitter* 77 PlaneEmitter* emitter; 70 78 71 static SpriteParticles* 72 OrxSound::SoundSource 73 OrxSound::SoundBuffer* 79 static SpriteParticles* snowParticles; 80 OrxSound::SoundSource soundSource; 81 OrxSound::SoundBuffer* windBuffer; 74 82 75 83 }; -
trunk/src/lib/graphics/effects/weather_effect.cc
r7810 r8255 15 15 */ 16 16 17 // TODO: descriptions to loadparams, movealong unified, start activation 17 18 18 19 #include "weather_effect.h" -
trunk/src/lib/graphics/light.h
r6512 r8255 1 1 /*! 2 3 2 * @file light.h 3 * Handles Lights. 4 4 5 6 7 5 A Light is one of the more important things in a 3D-environment, 6 without it one sees nothing :) 7 It is here for diffuse-, specular- and Bump-Mappings. 8 8 */ 9 9 … … 25 25 class Light : public PNode 26 26 { 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 27 public: 28 Light(const TiXmlElement* root = NULL); 29 virtual ~Light(); 30 31 virtual void loadParams(const TiXmlElement* root); 32 33 void setDiffuseColor(GLfloat r, GLfloat g, GLfloat b); 34 void setSpecularColor(GLfloat r, GLfloat g, GLfloat b); 35 void setAttenuation(float constantAttenuation, float linearAttenuation, float quadraticAttenuation); 36 void setSpotDirection(const Vector& direction); 37 void setSpotDirection(float x, float y, float z) { setSpotDirection(Vector(x,y,z)); }; 38 void setSpotCutoff(GLfloat cutoff); 39 40 /** @returns the lightNumber*/ 41 int getLightNumber() const {return this->lightNumber;} 42 43 virtual void draw() const; 44 45 void debug() const; 46 47 // attributes 48 private: 49 int lightNumber; //!< The number of this Light. 50 GLfloat diffuseColor[4]; //!< The Diffuse Color this Light emmits. 51 GLfloat specularColor[4]; //!< The specular Color of this Light. 52 float constantAttenuation; //!< The Factor of the the Constant Attenuation. 53 float linearAttenuation; //!< The Factor of the the Linear Attenuation. 54 float quadraticAttenuation; //!< The Factor of the the Quadratic Attenuation. 55 GLfloat spotDirection[4]; //!< The direction of the Spot Light. 56 GLfloat spotCutoff; //!< The cutoff Angle of the Light Source 57 57 }; 58 59 60 58 59 60 61 61 //! A class that handles Lights 62 62 /** 63 63 A Light is a source that emits light rays (photons) 64 64 65 66 67 68 69 65 <b>Usage:</b>\n 66 First you have to get the Light Manager up and running by using LightManager::getInstance(). 67 This automatically initiates the GL_LIGHTING, and sets some default stuff about the light.\n 68 Then you will create a new light using: 69 \li new Light(); 70 70 71 72 71 if you want to operate on this Light just apply the following functions onto it. 72 (You can also optain the Light-pointer with LightManager::getInstance()->getLight(lightNumber)) 73 73 74 75 76 77 78 79 80 74 now you can operate on the light as follows: 75 \li void setDiffuseColor(GLfloat r, GLfloat g, GLfloat b); 76 \li void setSpecularColor(GLfloat r, GLfloat g, GLfloat b); 77 \li void setAttenuation(float constantAttenuation, float linearAttenuation, float quadraticAttenuation); 78 \li void setSpotDirection(Vector direction); 79 \li void setSpotCutoff(GLfloat cutoff); 80 \li all PNode stuff also works 81 81 82 83 82 To redraw the light use 83 \li void draw() const; (this is automatically done by the LightManager) 84 84 85 86 85 for some nice output just use: 86 \li void debug() const; (either on LightManager for a resume or on any Light for single information.) 87 87 */ 88 88 class LightManager : public BaseObject 89 {90 89 { 90 friend class Light; 91 91 92 93 94 95 92 public: 93 virtual ~LightManager(); 94 /** @returns a Pointer to the only object of this Class */ 95 inline static LightManager* getInstance() { if (!singletonRef) singletonRef = new LightManager(); return singletonRef; }; 96 96 97 98 97 virtual void loadParams(const TiXmlElement* root); 98 void loadLights(const TiXmlElement* root); 99 99 100 void setAmbientColor(GLfloat r, GLfloat g, GLfloat b); 100 void setAmbientColor(GLfloat r, GLfloat g, GLfloat b); 101 // HACK: Assuming r = g = b values 102 inline GLfloat getAmbientColor() { return this->ambientColor[0]; } 101 103 102 103 104 Light* getLight(int lightNumber) const; 105 inline Light* getLight() const { return this->currentLight; }; 104 106 105 107 void draw() const; 106 108 107 109 void debug() const; 108 110 109 110 111 private: 112 LightManager(); 111 113 112 113 114 int registerLight(Light* light); 115 void unregisterLight(Light* light); 114 116 115 116 117 117 private: 118 static LightManager* singletonRef; //!< This is the LightHandlers Reference. 119 GLfloat ambientColor[4]; //!< The ambient Color of the scene. 118 120 119 120 121 Light** lights; //!< An array of Lenght NUMBEROFLIGHTS, that holds pointers to all LightValues. 122 Light* currentLight; //!< The current Light, we are working with. 121 123 122 124 }; -
trunk/src/lib/graphics/shader.cc
r8037 r8255 201 201 } 202 202 203 void Shader::bindShader(const char* name, const float* value, size_t size) 204 { 205 if (likely (this->shaderProgram != 0)) { 206 glUseProgramObjectARB(this->shaderProgram); 207 208 unsigned int location = glGetUniformLocationARB(this->shaderProgram, name); 209 /* This is EXPENSIVE and should be avoided. */ 210 211 if (size == 1) glUniform1fvARB(location, 1, value); 212 else if (size == 2) glUniform2fvARB(location, 1, value); 213 else if (size == 3) glUniform3fvARB(location, 1, value); 214 else if (size == 4) glUniform4fvARB(location, 1, value); 215 else if (size == 9) glUniformMatrix3fvARB(location, 1, false, value); 216 else if (size == 16) glUniformMatrix4fvARB(location, 1, false, value); 217 218 } 219 } 220 203 221 void Shader::deactivateShader() 204 222 { -
trunk/src/lib/graphics/shader.h
r8037 r8255 96 96 static bool checkShaderAbility(); 97 97 void activateShader(); 98 void bindShader(const char* name, const float* value, size_t size); 98 99 static void deactivateShader(); 99 100
Note: See TracChangeset
for help on using the changeset viewer.