// Initialize OpenGL's rendering modes void OpenGLInit(void) { glShadeModel( GL_FLAT ); glClearColor( 0.0, 0.0, 0.0, 0.0 ); glClearDepth( 1.0 ); glEnable( GL_DEPTH_TEST ); CreateParticles(); }
void* ParticleGroup::GenerateParticles(unsigned int count) { void* ptr = CreateParticles(count); if (!ptr) return nullptr; ParticleMapper mapper(ptr, m_declaration); for (ParticleGenerator* generator : m_generators) generator->Generate(*this, mapper, 0, count - 1); return ptr; }
void M2EffectRender::CreateResources() { ExistParticle_ = Owner_->particleSystems != NULL; ExistRibbon_ = Owner_->ribbons != NULL; LoadShaders(); if (ExistParticle_) CreateParticles(); if (ExistRibbon_) CreateRibbons(); }
std::string ParticleEditor::DoEditor(SpritePtr pNextAppButton) { if (!m_manager) CreateParticles(); const VideoPtr& video = m_provider->GetVideo(); video->SetCameraPos(Vector2(0,0)); video->SetBGColor(m_background); if (m_backgroundSprite) m_backgroundSprite->DrawShaped(Vector2(0,0), video->GetScreenSizeF(), gs2d::constant::WHITE, gs2d::constant::WHITE, gs2d::constant::WHITE, gs2d::constant::WHITE); ParticlePanel(); DrawParticleSystem(); SetFileNameToTitle(video, WINDOW_TITLE); return "particle"; }
void CParticleSystem::SetBufferData() { if (m_pParticleSystem) g_PhysxManager->GetActiveScene()->removeActor(*m_pParticleSystem); if (!m_Emitter.m_useSkeleton) { m_pParticleSystem = g_PhysxManager->CreateParticleSystem(m_numParticles); } m_particles.initialize(m_numParticles); VEC3 offset = GetOffsetPosition(); PxVec3 pos = PxVec3(0, 0, 0); for (int i = 0; i < m_numParticles; i++) { m_particles.indexBuffer[i] = i; m_particles.maxLifeTimeBuffer[i] = *m_Emitter.GetLifeTime() + random(*m_Emitter.GetLifeTimeRandomMin(), *m_Emitter.GetLifeTimeRandomMax()); //max time pos = *m_Emitter.GetPosition() + PhysxConversion::Vec3ToPxVec3(offset); m_particles.positionBuffer[i] = pos; m_particles.velocityBuffer[i] = *m_Emitter.GetVelocity(); m_particles.negativeVelocityBuffer[i] = -*m_Emitter.GetVelocity(); m_particles.lifeTimeBuffer[i] = m_particles.maxLifeTimeBuffer[i]; dbg("Particle %d - max lifetime = %f\n", i, m_particles.lifeTimeBuffer[i]); m_particles.positionInitBuffer[i] = pos; m_particles.velocityInitBuffer[i] = m_initial_velocity; m_particles.colorBuffer[i] = PhysxConversion::PxVec4ToVec4(*m_Emitter.GetColor()); m_particles.colorOriginBuffer[i] = m_particles.colorBuffer[i]; } m_particles.speed_frame = frames_speed; m_particles.numParticles = m_numParticles; bool ret = true; //m_pParticleValidity = (PxU32*)PX_ALLOC(((m_pParticleSystem->getMaxParticles() + 31) >> 5) << 2, "validParticleBitmap"); if (!m_Emitter.m_useSkeleton) { m_pIndexPool = PxParticleExt::createIndexPool(m_numParticles); m_pParticleValidity = std::vector<PxU32>(((m_pParticleSystem->getMaxParticles() + 31) >> 5) << 2).data(); ret = CreateParticles(m_particles); }
// some unit tests of the macromesh code int TestPICAccumulate(void) { MacroMesh m; bool test=true; int param[]={4, 4, 4, 1, 1, 1, 0}; field f; init_empty_field(&f); // test gmsh file reading ReadMacroMesh(&(f.macromesh), "test/testmacromesh.msh"); BuildConnectivity(&(f.macromesh)); CheckMacroMesh(&(f.macromesh), param); //PrintMacroMesh(&m); PIC pic; InitPIC(&pic,1); CreateParticles(&pic,&(f.macromesh)); PlotParticles(&pic,&(f.macromesh)); f.model.m = 7; // num of conservative variables /* f.model.NumFlux = Maxwell2DNumFlux; */ /* f.model.BoundaryFlux = Maxwell2DBoundaryFlux; */ f.model.InitData = Maxwell2DConstInitData; /* f.model.ImposedData = Maxwell2DImposedData; */ f.varindex = GenericVarindex; f.interp.interp_param[0] = f.model.m; f.interp.interp_param[1] = 1; // x direction degree f.interp.interp_param[2] = 1; // y direction degree f.interp.interp_param[3] = 0; // z direction degree f.interp.interp_param[4] = 1; // x direction refinement f.interp.interp_param[5] = 1; // y direction refinement f.interp.interp_param[6] = 1; // z direction refinement Initfield(&f); // place the particle at (0,1,0) and v=(1,0,0) pic.xv[0]=0; pic.xv[1]=0; pic.xv[2]=0.5; real xref[3]; pic.cell_id[0]=NumElemFromPoint(&f.macromesh,pic.xv,xref); pic.xv[0]=xref[0]; pic.xv[1]=xref[1]; pic.xv[2]=xref[2]; pic.xv[3]=1; pic.xv[4]=0; pic.xv[5]=0; PlotParticles(&pic,&(f.macromesh)); int ie=2; int ipg=2; int iv=4; int imem=f.varindex(f.interp_param, ie, ipg, iv); AccumulateParticles(&pic,&f); printf("w=%f wex=%f\n",f.wn[imem],1/1.96); test = test && (fabs(f.wn[imem]-1/1.96) < 1e-8); Displayfield(&f); return test; }
void* ParticleGroup::CreateParticle() { return CreateParticles(1); }