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); }
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; }