Esempio n. 1
0
NxFluidEmitter* CreateFluidEmitter(const NxReal dimX, const NxReal dimY)
{
	fluid = CreateFluid();
	assert(fluid);

	NxQuat q;
	q.fromAngleAxis(90,NxVec3(1,0,0));
	NxMat34 mat;
	mat.M.fromQuat(q);
	mat.t = NxVec3(0,4.5,0);
	// Create emitter
	NxFluidEmitterDesc emitterDesc;
	emitterDesc.setToDefault();
	emitterDesc.frameShape = NULL;
	emitterDesc.dimensionX = dimX;
	emitterDesc.dimensionY = dimY;
	emitterDesc.relPose = mat;
	emitterDesc.rate = 100;
	emitterDesc.randomAngle = 0.0f;
	emitterDesc.randomPos = NxVec3(0.0f,0.0f,0.0f);
	emitterDesc.fluidVelocityMagnitude = 2.5f;
	emitterDesc.repulsionCoefficient = 0.02f;
	emitterDesc.maxParticles = 0;
	emitterDesc.particleLifetime = 0.0f;
	emitterDesc.type = NX_FE_CONSTANT_PRESSURE;
	emitterDesc.shape = NX_FE_ELLIPSE;
	return fluid->createEmitter(emitterDesc);
}
Esempio n. 2
0
pFluidEmitter*pFluid::createEmitter(const pFluidEmitterDesc& desc)
{

	NxFluidEmitterDesc eDesc ;
	eDesc.setToDefault();

	pFactory::Instance()->copyToEmitterDesc(eDesc,desc);

	int valid = eDesc.isValid();
	if (!valid)
	{
		xLogger::xLog(XL_START,ELOGERROR,E_LI_MANAGER,"Emitter Description not Valid !");
		return NULL;
	}

	CK3dEntity*entityReference = (CK3dEntity*)ctx()->GetObject(desc.entityReference);
	if (!entityReference)
	{
		xLogger::xLog(XL_START,ELOGERROR,E_LI_MANAGER,"You must set a reference object ID in .referenceEntity");
		return NULL;
	}


	eDesc.relPose.M.id();
	eDesc.relPose.M.rotX(-NxHalfPiF32);
	eDesc.relPose.t = NxVec3(0,1.1f,0);

	////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////

	NxFluidEmitter *emitter   = getFluid()->createEmitter(eDesc);

	if (!emitter)
		return NULL;
	
	pFluidEmitter * result  = new pFluidEmitter();
	result->setEmitter(emitter);
	result->setFluid(this);
	result->setEntityReference(entityReference->GetID());
	VxVector pos;
	if (desc.frameShape)
	{
		desc.frameShape->GetPosition(&pos);
	}
	emitter->setGlobalPosition(getFrom(pos));
	emitter->userData = result;

	//////////////////////////////////////////////////////////////////////////
	//
	//		Render Settings    :  
	//

	pFluidRenderSettings *rSettings  =  new pFluidRenderSettings(ctx(),desc.entityReference,"pFluidEmitter");
	rSettings->setToDefault();
	rSettings->setEmitter(result);

	return result;
	
}