void ParticleSystem::render() { // render the emitters for (int e = 0; e < MAX_EMITTERS; e++) { if (_emitter[e].active) { if (_emitter[e].showingBaseParticle) { glColor4f(_particle[0].color.r, _particle[0].color.g, _particle[0].color.b, _particle[0].color.a); glPushMatrix(); glTranslatef(_emitter[e].position.x, _emitter[e].position.y, _emitter[e].position.z); glutSolidSphere(_particle[0].radius, _emitter[e].particleResolution, _emitter[e].particleResolution); glPopMatrix(); } } if (_emitter[e].visible) { renderEmitter(e, DEFAULT_EMITTER_RENDER_LENGTH); } }; // render the particles for (int p = 0; p < MAX_PARTICLES; p++) { if (_particle[p].alive) { if (_emitter[_particle[p].emitterIndex].particleLifespan > 0.0) { renderParticle(p); } } } }
static void renderBase(Particle *p, RenderConf *rc) { const GLfloat *col; switch(p->type) { case BASE_A: col = A_col; break; case BASE_T: col = T_col; break; case BASE_C: col = C_col; break; case BASE_G: col = G_col; break; case BASE_X: col = X_col; break; case BASE_Y: col = Y_col; break; default: /* not a base */ assert(false); col = gray; } glLightfv(GL_LIGHT0, GL_DIFFUSE, col); renderParticle(p, rc); }
/* render Objects in list */ void bucketRenderCurrentList(void) { std::sort(bucketArray.begin(), bucketArray.end()); pie_MatBegin(true); for (std::vector<BUCKET_TAG>::const_iterator thisTag = bucketArray.begin(); thisTag != bucketArray.end(); ++thisTag) { switch(thisTag->objectType) { case RENDER_PARTICLE: renderParticle((ATPART*)thisTag->pObject); break; case RENDER_EFFECT: renderEffect((EFFECT*)thisTag->pObject); break; case RENDER_DROID: renderDroid((DROID*)thisTag->pObject); break; case RENDER_SHADOW: renderShadow((DROID*)thisTag->pObject, getImdFromIndex(MI_SHADOW)); break; case RENDER_STRUCTURE: renderStructure((STRUCTURE*)thisTag->pObject); break; case RENDER_FEATURE: renderFeature((FEATURE*)thisTag->pObject); break; case RENDER_PROXMSG: renderProximityMsg((PROXIMITY_DISPLAY*)thisTag->pObject); break; case RENDER_PROJECTILE: renderProjectile((PROJECTILE*)thisTag->pObject); break; case RENDER_ANIMATION: renderAnimComponent((COMPONENT_OBJECT*)thisTag->pObject); break; case RENDER_DELIVPOINT: renderDeliveryPoint((FLAG_POSITION*)thisTag->pObject, false); break; } } pie_MatEnd(); //reset the bucket array as we go bucketArray.resize(0); }
void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glPushMatrix(); glTranslated(0., 0., -2); glRotatef(rx, 1.0, 0.0, 0.0); glRotatef(rz, 0.0, 1.0, 0.0); glTranslated(0., 0., 10); glTranslated(0., 0., -10); //rendering each particle for (int i = 0; i < partCount; i++) { renderParticle(particles[i], radius); } //draw bounding sphere if drawSphere==1 if (drawSphere == 1) glutWireSphere(sphereRadius, 15, 15); glPopMatrix(); glutSwapBuffers(); }
/* render Objects in list */ void bucketRenderCurrentList(const glm::mat4 &viewMatrix) { std::sort(bucketArray.begin(), bucketArray.end()); for (std::vector<BUCKET_TAG>::const_iterator thisTag = bucketArray.begin(); thisTag != bucketArray.end(); ++thisTag) { switch (thisTag->objectType) { case RENDER_PARTICLE: renderParticle((ATPART *)thisTag->pObject, viewMatrix); break; case RENDER_EFFECT: renderEffect((EFFECT *)thisTag->pObject, viewMatrix); break; case RENDER_DROID: displayComponentObject((DROID *)thisTag->pObject, viewMatrix); break; case RENDER_STRUCTURE: renderStructure((STRUCTURE *)thisTag->pObject, viewMatrix); break; case RENDER_FEATURE: renderFeature((FEATURE *)thisTag->pObject, viewMatrix); break; case RENDER_PROXMSG: renderProximityMsg((PROXIMITY_DISPLAY *)thisTag->pObject, viewMatrix); break; case RENDER_PROJECTILE: renderProjectile((PROJECTILE *)thisTag->pObject, viewMatrix); break; case RENDER_DELIVPOINT: renderDeliveryPoint((FLAG_POSITION *)thisTag->pObject, false, viewMatrix); break; } } //reset the bucket array as we go bucketArray.resize(0); }
void atmosDrawParticles() { UDWORD i; if (weather == WT_NONE) { return; } /* Traverse the list */ for (i = 0; i < MAX_ATMOS_PARTICLES; i++) { /* Don't bother unless it's active */ if (asAtmosParts[i].status == APS_ACTIVE) { /* Is it on the grid */ if (clipXY(asAtmosParts[i].position.x, asAtmosParts[i].position.z)) { renderParticle(&asAtmosParts[i]); } } } }
void atmosDrawParticles(const glm::mat4 &viewMatrix) { UDWORD i; if (weather == WT_NONE) { return; } /* Traverse the list */ for (i = 0; i < MAX_ATMOS_PARTICLES; i++) { /* Don't bother unless it's active */ if (asAtmosParts[i].status == APS_ACTIVE) { /* Is it visible on the screen? */ if (clipXYZ(asAtmosParts[i].position.x, asAtmosParts[i].position.z, asAtmosParts[i].position.y, viewMatrix)) { renderParticle(&asAtmosParts[i], viewMatrix); } } } }
/** * \fn int gameLoop(sInterface *p_interface, sMap *p_map) * \brief Fonction de rendu de l'enigme et d'interfacage avec l'utilisateur * * \param *p_interface pointeur vers une structure de type sInterface * \param *p_map pointeur vers une structure de type sMap * \return int représentant le déroulement de la fonction */ int gameLoop(sInterface *p_interface, sMap *p_map) { bool l_loop = TRUE, l_solve = FALSE; char txtCmpt[32] = ""; SDL_Rect l_posText = {(WINDOW_WIDTH / CASE_COLUMN_AMOUNT)/2, (WINDOW_HEIGHT / CASE_LINE_AMOUNT)/2, 50, 50}; SDL_Color l_color = {255, 0, 0}; p_interface->player.mapPosition.x = p_map->starting.x; p_interface->player.mapPosition.y = p_map->starting.y; p_interface->player.realPosition = getRealPosition(p_interface->player.mapPosition); p_interface->player.realDestination = getRealPosition(p_interface->player.mapPosition); displayMap(p_interface, p_map); while (l_loop){ if(SDL_PollEvent(&(p_interface->event))) { switch (p_interface->event.type) { case(SDL_KEYDOWN): switch (p_interface->event.key.keysym.sym) { case(SDLK_z): updateGoal(p_interface, p_map, DUP); break; case(SDLK_d): updateGoal(p_interface, p_map, DRIGHT); break; case(SDLK_s): updateGoal(p_interface, p_map, DDOWN); break; case(SDLK_q): updateGoal(p_interface, p_map, DLEFT); break; case(SDLK_x): l_solve = !l_solve; break; case(SDLK_ESCAPE): l_loop = FALSE; break; } break; case(SDL_MOUSEBUTTONDOWN): break; } while (SDL_PollEvent(&(p_interface->event))); } SDL_RenderClear(p_interface->renderer); SDL_RenderCopy(p_interface->renderer, p_interface->backgroundSprite, NULL, NULL); if(l_solve) showSolution(p_interface, p_interface->solution); renderParticle(&(p_interface->effect.particle), p_interface, p_map, TRUE); updateVision(p_interface, p_map); sprintf_s(txtCmpt, 30, "%d", p_interface->compteur); displayText(p_interface->renderer, txtCmpt, l_color, l_posText); SDL_RenderPresent(p_interface->renderer); if (WinOrNot(p_interface, p_map)) { l_loop = FALSE; } SDL_Delay(SDL_ANIMATION_FRAMETIME); } return 0; }
void loop(void *passedEmit) { //runs long enough and something is getting gced and x and y get off //change dead routine to use local copy of emitter Particles * emit = (Particles *)passedEmit; //make a local copy of the emitter Particles lemit = *emit; double angle = 0.0; SDL_Rect *clip = NULL; //variable maybe getting optimized out //printf("wind %f x = %f y = %f\n", lemit.m_windVelocity, lemit.particles[1].m_x, lemit.particles[1].m_y); //Event handler SDL_Event ev; //Handle events on queue while ( SDL_PollEvent( &ev ) != 0 ) { //User requests quit if ( ev.type == SDL_QUIT ) { quit = TRUE; } } //emitter->m_speed = 0.02; lemit.m_windVelocity += (r01() - 0.5) * 0.0015; if (lemit.m_windVelocity > 0.015) { lemit.m_windVelocity = 0.015; } if (lemit.m_windVelocity < 0.0) { lemit.m_windVelocity = 0.0; } SDL_RenderClear(renderer); SDL_RenderCopyEx(renderer, bgTexture, clip, &bg, angle, NULL, SDL_FLIP_NONE); for (int i = 0; i < PART_COUNT; i++) { //Particle *cparticle = &emitter->particles[i]; update(&lemit, &(lemit.particles[i]), i); renderParticle(&(lemit.particles[i]), i); } //lastmill = getMilliCount(); SDL_RenderPresent(renderer); //Update the surface SDL_UpdateWindowSurface( gWindow ); lemit.m_lastRender = getMilliCount(); //save the local copy back into the main emitter *((Particles *)passedEmit) = lemit; //logEmitter( emitter, 0 ); }
static void renderParticles(int num, Particle *ps, RenderConf *rc) { for (int i = 0; i < num; i++) renderParticle(&ps[i], rc); }