Esempio n. 1
0
// 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();
}
Esempio n. 2
0
	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();		
}
Esempio n. 4
0
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);
	}
Esempio n. 6
0
// 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;
}
Esempio n. 7
0
	void* ParticleGroup::CreateParticle()
	{
		return CreateParticles(1);
	}