#include <ps_tail_dot.h>
Inheritance diagram for NL3D::CPSTailDot:
Definition at line 41 of file ps_tail_dot.h.
Vertex buffers & their corresponding index buffers. We keep a map of pretextured vertex buffer (with or without colors). | |
Vb for ribbons that have the same size are shared. | |
typedef std::hash_map< uint, CVBnPB > | TVBMap |
uint | getNumRibbonsInVB () const |
get the number of ribbons contained in a vb for a given length. (e.g the number of ribbons that can be batched) | |
CVBnPB & | getVBnPB () |
get a vertex buffer and a primitive suited for the current ribbon | |
TVBMap | _ColoredVBMap |
TVBMap | _FadedColoredVBMap |
TVBMap | _FadedVBMap |
TVBMap | _VBMap |
Public Types | |
enum | TBlendingMode { add, modulate, alphaBlend, alphaTest } |
this enum summarize the useful modes for blending to the framebuffer More... | |
enum | TInterpolationMode { Linear = 0, Hermitte, InterpModeLast } |
enum | TRibbonMode { VariableSize = 0, FixedSize, RibbonModeLast } |
Public Member Functions | |
virtual void | basisChanged (TPSMatrixMode systemBasis) |
virtual bool | completeBBox (NLMISC::CAABBox &box) const |
NLMISC::CVector | computeI (void) const |
NLMISC::CVector | computeJ (void) const |
NLMISC::CVector | computeK (void) const |
void | disableAutoLOD (bool disable=true) |
Force the Auto-LOD to be disbaled. When set to false, the default behaviour set in the system is used. | |
virtual bool | doesProduceBBox (void) const |
virtual void | draw (bool opaque) |
derivers draw the particles here | |
void | enableGlobalColorLighting (bool enabled) |
void | enableZTest (bool enabled) |
=================================================================================== | |
virtual void | enumTexs (std::vector< NLMISC::CSmartPtr< ITexture > > &dest, IDriver &drv) |
void | forceModulateConstantColor (bool force, const NLMISC::CRGBA &col=NLMISC::CRGBA::White) |
=================================================================================== | |
void | forceTexturedMaterialStages (uint numStages) |
=================================================================================== | |
CPSMaterial::TBlendingMode | getBlendingMode (void) const |
=================================================================================== | |
virtual std::string | getClassName ()=0 |
NLMISC::CRGBA | getColor (void) const |
Get the color. | |
const CPSAttribMaker< CRGBA > * | getColorScheme (void) const |
get the color scheme (NULL if none) const version | |
CPSAttribMaker< CRGBA > * | getColorScheme (void) |
get the color scheme (NULL if none) | |
IDriver * | getDriver () const |
shortcut to get an instance of the driver | |
uint32 | getExternID (void) const |
get the extern ID of this located bindable | |
const CFontGenerator * | getFontGenerator (void) const |
Shortcut to get the font generator if one was set (const version). | |
CFontGenerator * | getFontGenerator (void) |
Shortcut to get the font generator if one was set. | |
const CFontManager * | getFontManager (void) const |
Shortcut to get the font manager if one was set (const version). | |
CFontManager * | getFontManager (void) |
*************************************************************************************** | |
const NLMISC::CMatrix & | getInvertedSysMat (void) const |
shortcut to get the inverted matrix of the system | |
const NLMISC::CMatrix & | getInvertedViewMat (void) const |
shortcut to get the inverted view matrix | |
const NLMISC::CMatrix & | getLocalToWorldMatrix () const |
Shortcut to get the local to world matrix. | |
TPSLod | getLOD (void) const |
get the valid lods for that object | |
float | getLODDegradation () const |
virtual uint32 | getMaxNumFaces (void) const |
return the max number of faces needed for display. This is needed for LOD balancing | |
std::string | getName (void) const |
get the located bindable name (edition purpose) | |
const CPSLocated * | getOwner (void) const |
get the located that owns this bindable (const version) | |
CPSLocated * | getOwner (void) |
get the located that owns this bindable | |
virtual uint32 | getPriority (void) const |
return priority | |
const NLMISC::CMatrix & | getSysMat (void) const |
*************************************************************************************** | |
uint32 | getType (void) const |
return this bindable type | |
virtual bool | getUserMatrixUsageCount () const |
const NLMISC::CMatrix & | getViewMat (void) const |
shortcut to get the view matrix | |
virtual bool | hasEmitters (void) const |
tells wether there are alive emitters | |
virtual bool | hasLightableFaces () |
from CPSParticle : return true if there are lightable faces in the object | |
virtual bool | hasOpaqueFaces (void) |
return true if there are Opaque faces in the object | |
virtual bool | hasParticles (void) const |
return true if this located bindable derived class holds alive particles | |
virtual bool | hasTransparentFaces (void) |
return true if there are transparent faces in the object | |
bool | isActive () const |
bool | isAutoLODDisabled () const |
Test wether Auto-LOD is disabled. | |
bool | isZTestEnabled () const |
=================================================================================== | |
virtual void | notifyTargetRemoved (CPSLocated *ptr) |
*************************************************************************************** | |
virtual void | releaseAllRef () |
*************************************************************************************** | |
virtual void | releaseRefTo (const CParticleSystemProcess *other) |
void | serialColorScheme (NLMISC::IStream &f) throw (NLMISC::EStream) |
serialization. | |
void | serialMaterial (NLMISC::IStream &f) throw (NLMISC::EStream) |
=================================================================================== | |
void | setActive (bool active) |
Activate / Deactivate this object. When not active, the owning system won't try to call the 'step' method. | |
void | setBlendingMode (CPSMaterial::TBlendingMode mode) |
=================================================================================== | |
void | setColor (NLMISC::CRGBA col) |
Set a constant color for the particles. remove any previous scheme. | |
void | setColorScheme (CPSAttribMaker< CRGBA > *col) |
void | setExternID (uint32 id) |
*************************************************************************************** | |
void | setLOD (TPSLod lod) |
void | setLODDegradation (float percent) |
void | setName (const std::string &name) |
set the located bindable name (edition purpose) | |
void | setupDriverModelMatrix (void) |
shortcut to setup the model matrix (system basis or world basis) | |
virtual void | setZBias (float value) |
virtual void | showTool () |
draw the particles for edition mode. The default behaviour just draw a wireframe model | |
virtual void | step (TPSProcessPass pass, TAnimationTime ellapsedTime, TAnimationTime realEt) |
inherited from CPSParticle | |
virtual bool | supportGlobalColorLighting () const |
bool | usesGlobalColorLighting () |
Object | |
virtual void | finalize (void) |
*************************************************************************************** | |
Object | |
virtual void | finalize (void) |
*************************************************************************************** | |
Object | |
virtual void | finalize (void) |
*************************************************************************************** | |
Object | |
virtual void | finalize (void) |
*************************************************************************************** | |
Object | |
virtual void | finalize (void) |
*************************************************************************************** | |
Object | |
virtual void | finalize (void) |
*************************************************************************************** | |
Object | |
virtual void | finalize (void) |
*************************************************************************************** | |
Object | |
virtual void | finalize (void) |
*************************************************************************************** | |
Object | |
virtual void | finalize (void) |
*************************************************************************************** | |
Object | |
virtual void | finalize (void) |
*************************************************************************************** | |
Object | |
virtual void | finalize (void) |
*************************************************************************************** | |
Object | |
virtual void | finalize (void) |
*************************************************************************************** | |
Object | |
virtual void | finalize (void) |
*************************************************************************************** | |
Object | |
virtual void | finalize (void) |
*************************************************************************************** | |
Object | |
virtual void | finalize (void) |
*************************************************************************************** | |
Object | |
virtual void | finalize (void) |
*************************************************************************************** | |
Behaviour | |
TInterpolationMode | getInterpolationMode () const |
TRibbonMode | getRibbonMode () const |
void | setInterpolationMode (TInterpolationMode mode) |
void | setRibbonMode (TRibbonMode mode) |
NB : a fixed size isn't applied with parametric motion. | |
Geometry | |
float | getRibbonLength () const |
TAnimationTime | getSegDuration (void) const |
uint32 | getTailNbSeg (void) const |
get the number of segments used with this particle | |
void | setRibbonLength (float length) |
void | setSegDuration (TAnimationTime ellapsedTime) |
void | setTailNbSeg (uint32 nbSegs) |
set the number of segments used with this particle. In this case, it can't be lower than 2 | |
Object | |
virtual void | finalize (void) |
*************************************************************************************** | |
Behaviour | |
TInterpolationMode | getInterpolationMode () const |
TRibbonMode | getRibbonMode () const |
void | setInterpolationMode (TInterpolationMode mode) |
void | setRibbonMode (TRibbonMode mode) |
NB : a fixed size isn't applied with parametric motion. | |
Geometry | |
float | getRibbonLength () const |
TAnimationTime | getSegDuration (void) const |
uint32 | getTailNbSeg (void) const |
get the number of segments used with this particle | |
void | setRibbonLength (float length) |
void | setSegDuration (TAnimationTime ellapsedTime) |
void | setTailNbSeg (uint32 nbSegs) |
set the number of segments used with this particle. In this case, it can't be lower than 2 | |
Object | |
virtual void | finalize (void) |
*************************************************************************************** | |
Behaviour | |
TInterpolationMode | getInterpolationMode () const |
TRibbonMode | getRibbonMode () const |
void | setInterpolationMode (TInterpolationMode mode) |
void | setRibbonMode (TRibbonMode mode) |
NB : a fixed size isn't applied with parametric motion. | |
Geometry | |
float | getRibbonLength () const |
TAnimationTime | getSegDuration (void) const |
uint32 | getTailNbSeg (void) const |
get the number of segments used with this particle | |
void | setRibbonLength (float length) |
void | setSegDuration (TAnimationTime ellapsedTime) |
void | setTailNbSeg (uint32 nbSegs) |
set the number of segments used with this particle. In this case, it can't be lower than 2 | |
Object | |
virtual void | finalize (void) |
*************************************************************************************** | |
Object | |
virtual void | finalize (void) |
*************************************************************************************** | |
Object | |
virtual void | finalize (void) |
*************************************************************************************** | |
Object | |
CPSTailDot () | |
ctor | |
NLMISC_DECLARE_CLASS (CPSTailDot) | |
ctor | |
virtual void | serial (NLMISC::IStream &f) throw (NLMISC::EStream) |
serialisation. Derivers must override this, and call their parent version | |
~CPSTailDot () | |
dtor | |
Object | |
virtual void | finalize (void) |
*************************************************************************************** | |
Behaviour | |
virtual bool | getColorFading (void) const |
virtual bool | isInSystemBasis (void) const |
return true if the tails are in the system basis | |
virtual void | setColorFading (bool onOff=true) |
virtual void | setSystemBasis (bool yes) |
Behaviour | |
TInterpolationMode | getInterpolationMode () const |
TRibbonMode | getRibbonMode () const |
void | setInterpolationMode (TInterpolationMode mode) |
void | setRibbonMode (TRibbonMode mode) |
NB : a fixed size isn't applied with parametric motion. | |
Geometry | |
float | getRibbonLength () const |
TAnimationTime | getSegDuration (void) const |
uint32 | getTailNbSeg (void) const |
get the number of segments used with this particle | |
void | setRibbonLength (float length) |
void | setSegDuration (TAnimationTime ellapsedTime) |
void | setTailNbSeg (uint32 nbSegs) |
set the number of segments used with this particle. In this case, it can't be lower than 2 | |
Protected Types | |
typedef CPSVector< float >::V | TFloatVect |
typedef CPSVector< NLMISC::CVector >::V | TPosVect |
Protected Member Functions | |
virtual void | bounceOccured (uint32 index) |
void | computeRibbon (uint index, NLMISC::CVector *dest, uint stride=sizeof(NLMISC::CVector)) |
void | computeSrcStep (uint32 &step, uint &numToProcess) |
void | deleteColorElement (uint32 index) |
virtual void | deleteElement (uint32 index) |
inherited from CPSLocatedBindable | |
void | displayIcon2d (const NLMISC::CVector tab[], uint nbSegs, float scale) |
*************************************************************************************** | |
virtual CPSLocated * | getColorOwner (void) |
deriver must return their owner there | |
uint32 | getRibbonIndex () const |
const TFloatVect & | getSamplingDate () const |
virtual CPSLocated * | getSizeOwner (void) |
void | initDateVect () |
virtual void | motionTypeChanged (bool parametric) |
called when the motion type has changed, this allow us to draw smoother ribbons when parametric anim is used | |
void | newColorElement (CPSLocated *emitterLocated, uint32 emitterIndex) |
virtual void | newElement (CPSLocated *emitterLocated, uint32 emitterIndex) |
inherited from CPSLocatedBindable | |
void | notifyOwnerMaxNumFacesChanged (void) const |
void | resetFromOwner () |
virtual void | resize (uint32 size) |
inherited from CPSLocatedBindable | |
void | resizeColor (uint32 size) |
virtual void | setOwner (CPSLocated *psl) |
*************************************************************************************** | |
void | updateGlobals (float realET) |
Called each time the time of the system change in order to update the ribbons positions. | |
void | updateLOD () |
must be called for the lod to apply (updates UsedNbSegs) | |
Protected Attributes | |
bool | _Active |
CRGBA | _Color |
CPSAttribMaker< CRGBA > * | _ColorScheme |
uint32 | _ExternID |
TPSLod | _LOD |
tells when this object must be dealt with | |
CMaterial | _Mat |
std::string | _Name |
uint32 | _NbSegs |
CPSLocated * | _Owner |
bool | _Parametric |
TAnimationTime | _SegDuration |
uint32 | _UsedNbSegs |
value to use after lod computation | |
TAnimationTime | _UsedSegDuration |
float | _UsedSegLength |
Private Member Functions | |
void | displayRibbons (uint32 nbRibbons, uint32 srcStep) |
display a set of ribbons | |
void | setupGlobalColor () |
void | touch () |
virtual void | updateMatAndVbForColor (void) |
update the material and the vb so that they match the color scheme. Inherited from CPSColoredParticle | |
void | updateMaterial () |
Private Attributes | |
bool | _ColorFading: 1 |
bool | _ForceLighted: 1 |
bool | _GlobalColor: 1 |
bool | _Lighted: 1 |
bool | _Touch: 1 |
Friends | |
class | CPSLocated |
|
Definition at line 99 of file ps_ribbon_base.h. Referenced by NL3D::CPSRibbonBase::getSamplingDate(). |
|
Definition at line 98 of file ps_ribbon_base.h. |
|
Definition at line 151 of file ps_tail_dot.h. |
|
this enum summarize the useful modes for blending to the framebuffer
Definition at line 809 of file ps_particle_basic.h.
00809 { add, modulate, alphaBlend, alphaTest }; |
|
Definition at line 49 of file ps_ribbon_base.h. Referenced by NL3D::CPSRibbonBase::getInterpolationMode().
00049 { Linear = 0, Hermitte, InterpModeLast }; |
|
Definition at line 48 of file ps_ribbon_base.h. Referenced by NL3D::CPSRibbonBase::getRibbonMode().
00048 { VariableSize = 0, FixedSize, RibbonModeLast }; |
|
ctor
Definition at line 66 of file ps_tail_dot.cpp. References NL3D::CPSRibbonBase::setInterpolationMode(), and NL3D::CPSRibbonBase::setSegDuration().
00066 : _ColorFading(false), 00067 _GlobalColor(false), 00068 _Lighted(false), 00069 _ForceLighted(false), 00070 _Touch(true) 00071 { 00072 setInterpolationMode(Linear); 00073 setSegDuration(0.06f); 00074 if (CParticleSystem::getSerializeIdentifierFlag()) _Name = std::string("TailDot"); 00075 } |
|
dtor
Definition at line 78 of file ps_tail_dot.cpp.
00079 {
00080 // delete _DyingRibbons;
00081 }
|
|
Called when the basis of the owner changed. the default behaviour does nothing
Reimplemented in NL3D::CPSForce. Definition at line 968 of file ps_located.h.
00968 {} |
|
a bounce occured, so some action could be done. The default behaviour does nothing
Reimplemented in NL3D::CPSEmitter. Definition at line 1011 of file ps_located.h.
01011 {} |
|
Reimplemented in NL3D::CPSFanLight, NL3D::CPSQuad, and NL3D::CPSShockWave. Definition at line 884 of file ps_located.h.
00884 { return false ;} |
|
Compute a vector that will map to (1 0 0) after view and model transform. This allow to have object that always faces the user, whatever basis they are in Definition at line 931 of file ps_located.h. References NL3D::CPSLocated::computeI(). Referenced by NL3D::CPSLocatedBindable::displayIcon2d(), NL3D::CPSFanLightHelper::drawFanLight(), NL3D::CPSFaceLookAtHelper::drawLookAt(), NL3D::CPSFaceLookAtHelper::drawLookAtAlignOnMotion(), NL3D::CPSGravity::show(), and NL3D::CPSEmitter::showTool().
00931 { return _Owner->computeI(); } |
|
Compute a vector that will map to (0 1 0) after view and model transform. This allow to have object that always faces the user, whatever basis they are in Definition at line 936 of file ps_located.h. References NL3D::CPSLocated::computeJ(). Referenced by NL3D::CPSFaceLookAtHelper::drawLookAt().
00936 { return _Owner->computeJ(); } |
|
Compute a vector that will map to (0 0 1) after view and model transform. This allow to have object that always faces the user, whatever basis they are in Definition at line 940 of file ps_located.h. References NL3D::CPSLocated::computeK(). Referenced by NL3D::CPSLocatedBindable::displayIcon2d(), NL3D::CPSFanLightHelper::drawFanLight(), NL3D::CPSFaceLookAtHelper::drawLookAt(), NL3D::CPSFaceLookAtHelper::drawLookAtAlignOnMotion(), and NL3D::CPSEmitter::showTool().
00940 { return _Owner->computeK(); } |
|
Get position of the i-th ribbon and store them in a table of vector. It uses the interpolation setting of this object. The dest tab must have at least nbSegs + 1 entries. Definition at line 455 of file ps_ribbon_base.cpp. References NL3D::CPSRibbonBase::_InterpolationMode, NL3D::CPSRibbonBase::_RibbonMode, NL3D::CPSRibbonBase::computeHermitteCstSizeRibbon(), NL3D::CPSRibbonBase::computeHermitteRibbon(), NL3D::CPSRibbonBase::computeLinearCstSizeRibbon(), NL3D::CPSRibbonBase::computeLinearRibbon(), NL3D::CPSRibbonBase::Hermitte, index, NL3D::CPSRibbonBase::Linear, nlassert, stride, uint, and NL3D::CPSRibbonBase::VariableSize. Referenced by displayRibbons(), NL3D::CPSRibbonLookAt::displayRibbons(), and NL3D::CPSRibbon::displayRibbons().
00456 { 00457 switch (_InterpolationMode) 00458 { 00459 case Linear: 00460 if (_RibbonMode == VariableSize) 00461 { 00462 computeLinearRibbon(index, dest, stride); 00463 } 00464 else 00465 { 00466 computeLinearCstSizeRibbon(index, dest, stride); 00467 } 00468 break; 00469 case Hermitte: 00470 if (_RibbonMode == VariableSize) 00471 { 00472 computeHermitteRibbon(index, dest, stride); 00473 00474 } 00475 else 00476 { 00477 computeHermitteCstSizeRibbon(index, dest, stride); 00478 } 00479 break; 00480 default: 00481 nlassert(0); 00482 break; 00483 } 00484 00485 } |
|
System may have hand-tuned LOD, or auto LOD. This compute the number of particles that must really be displayed, and the src step that allow to go through the whole collection. The step in the source is in a fixed point 16:16 format Definition at line 82 of file ps_particle_basic.cpp. References NL3D::CPSParticle::_DisableAutoLOD, NLMISC::clamp(), NL3D::CParticleSystem::getAutoLODDegradationExponent(), NL3D::CParticleSystem::getAutoLODMode(), NL3D::CParticleSystem::getAutoLODStartDistPercent(), NL3D::CParticleSystem::getOneMinusCurrentLODRatio(), NL3D::CParticleSystemProcess::getOwner(), NL3D::CPSLocated::getSize(), NL3D::CParticleSystem::isAutoLODEnabled(), NL3D::CParticleSystem::isSharingEnabled(), nlassert, r, uint, and uint32. Referenced by NL3D::CPSShockWave::draw(), NL3D::CPSConstraintMesh::draw(), NL3D::CPSFanLight::draw(), NL3D::CPSFaceLookAt::draw(), NL3D::CPSDot::draw(), step(), NL3D::CPSRibbonLookAt::step(), NL3D::CPSRibbon::step(), and NL3D::CPSFace::step().
00083 { 00084 nlassert(_Owner && _Owner->getOwner()); 00085 const CParticleSystem &ps = *(_Owner->getOwner()); 00086 if (_DisableAutoLOD || !ps.isAutoLODEnabled() || !ps.isSharingEnabled() || _Owner->getSize() == 0) // Should Auto-LOD be used ? 00087 { 00088 step = (1 << 16); 00089 numToProcess = _Owner->getSize(); 00090 } 00091 else 00092 { 00093 float oneMinusLODRatio = ps.getOneMinusCurrentLODRatio(); 00094 float LODRatio = 1.f - oneMinusLODRatio; 00095 if (LODRatio > ps.getAutoLODStartDistPercent()) 00096 { 00097 float factor = (LODRatio - 1.f) / (ps.getAutoLODStartDistPercent() - 1.f); 00098 NLMISC::clamp(factor, 0.f, 1.f); 00099 float r = factor; 00100 for (uint k = 1; k < ps.getAutoLODDegradationExponent(); ++k) 00101 { 00102 r *= factor; 00103 } 00104 numToProcess = (uint) (_Owner->getSize() * r); 00105 if (numToProcess < 1) { numToProcess = 1; } 00106 00107 step = ps.getAutoLODMode() ? // skip or limit number, depending on the mode 00108 (_Owner->getSize() << 16) / numToProcess : // skip particles 00109 (1 << 16); // just display less particles 00110 } 00111 else 00112 { 00113 step = (1 << 16); 00114 numToProcess = _Owner->getSize(); 00115 } 00116 } 00117 00118 } |
|
Definition at line 237 of file ps_particle_basic.h. References NL3D::CPSAttribMaker< CRGBA >::deleteElement(), NL3D::CPSAttribMaker< CRGBA >::hasMemory(), index, and uint32. Referenced by deleteElement(), NL3D::CPSShockWave::deleteElement(), NL3D::CPSRibbonLookAt::deleteElement(), NL3D::CPSRibbon::deleteElement(), NL3D::CPSQuad::deleteElement(), NL3D::CPSConstraintMesh::deleteElement(), NL3D::CPSFanLight::deleteElement(), and NL3D::CPSDot::deleteElement().
00238 { 00239 if (_ColorScheme && _ColorScheme->hasMemory()) _ColorScheme->deleteElement(index); 00240 } |
|
inherited from CPSLocatedBindable
Reimplemented from NL3D::CPSRibbonBase. Definition at line 220 of file ps_tail_dot.cpp. References NL3D::CPSColoredParticle::deleteColorElement(), index, and uint32.
00221 { 00222 CPSRibbonBase::deleteElement(index); 00223 deleteColorElement(index); 00224 } |
|
Force the Auto-LOD to be disbaled. When set to false, the default behaviour set in the system is used.
Definition at line 137 of file ps_particle_basic.h. References NL3D::CPSParticle::_DisableAutoLOD.
00137 { _DisableAutoLOD = disable; } |
|
*************************************************************************************** show an drawing to represent the object, and in red if it is selected
Definition at line 2038 of file ps_located.cpp. References NL3D::CPSLocatedBindable::computeI(), NL3D::CPSLocatedBindable::computeK(), NL3D::CParticleSystem::getCurrentEditedElement(), NL3D::CPSLocatedBindable::getDriver(), NL3D::CParticleSystemProcess::getOwner(), NL3D::CPSLocated::getPos(), NL3D::CPSLocated::getSize(), index, NL3D::CMaterial::setBlend(), NL3D::CMaterial::setBlendFunc(), NL3D::CMaterial::setColor(), NL3D::CMaterial::setLighting(), NL3D::CPSLocatedBindable::setupDriverModelMatrix(), NL3D::CMaterial::setZFunc(), NL3D::CMaterial::setZWrite(), size, uint, uint32, NLMISC::CLine::V0, NLMISC::CLine::V1, NLMISC::CVector::x, and NLMISC::CVector::y. Referenced by NL3D::CPSSpring::show(), NL3D::CPSCentralGravity::show(), and NL3D::CPSParticle::showTool().
02039 { 02040 uint32 size = _Owner->getSize(); 02041 if (!size) return; 02042 setupDriverModelMatrix(); 02043 02044 const CVector I = computeI(); 02045 const CVector K = computeK(); 02046 02047 static std::vector<NLMISC::CLine> lines; 02048 02049 lines.clear(); 02050 02051 // ugly slow code, but not for runtime 02052 for (uint k = 0; k < size; ++k) 02053 { 02054 // center of the current particle 02055 const CVector p = _Owner->getPos()[k]; 02056 02057 02058 02059 for (uint l = 0; l < nbSegs; ++l) 02060 { 02061 NLMISC::CLine li; 02062 li.V0 = p + scale * (tab[l << 1].x * I + tab[l << 1].y * K); 02063 li.V1 = p + scale * (tab[(l << 1) + 1].x * I + tab[(l << 1) + 1].y * K); 02064 lines.push_back(li); 02065 } 02066 02067 CMaterial mat; 02068 02069 mat.setBlendFunc(CMaterial::one, CMaterial::one); 02070 mat.setZWrite(false); 02071 mat.setLighting(false); 02072 mat.setBlend(true); 02073 mat.setZFunc(CMaterial::less); 02074 02075 02076 02077 CPSLocated *loc; 02078 uint32 index; 02079 CPSLocatedBindable *lb; 02080 _Owner->getOwner()->getCurrentEditedElement(loc, index, lb); 02081 02082 mat.setColor((lb == NULL || this == lb) && loc == _Owner && index == k ? CRGBA::Red : CRGBA(127, 127, 127)); 02083 02084 02085 CDRU::drawLinesUnlit(lines, mat, *getDriver() ); 02086 } 02087 02088 } |
|
display a set of ribbons compute colors Definition at line 242 of file ps_tail_dot.cpp. References NL3D::IDriver::activeVertexBuffer(), NL3D::CPSRibbonBase::computeRibbon(), NL3D::CParticleSystem::getColorAttenuationScheme(), NL3D::CVertexBuffer::getColorOff(), NL3D::CPSLocatedBindable::getDriver(), NL3D::CParticleSystem::getForceGlobalColorLightingFlag(), getNumRibbonsInVB(), NL3D::CParticleSystemProcess::getOwner(), NL3D::CParticleSystem::getSystemDate(), getVBnPB(), NL3D::CVertexBuffer::getVertexCoordPointer(), NL3D::CVertexBuffer::getVertexSize(), NL3D::CPSLocated::incrementNbDrawnParticles(), NL3D::CPSLocated::integrateSingle(), NL3D::CParticleSystem::isUserColorUsed(), NL3D::CPSAttribMaker< CRGBA >::makeN(), min, nlassert, NL3D::CPSTailDot::CVBnPB::PB, NL3D::IDriver::render(), NL3D::CPrimitiveBlock::setNumLine(), NL3D::CPSLocatedBindable::setupDriverModelMatrix(), setupGlobalColor(), touch(), uint, uint32, uint8, updateMaterial(), NL3D::CPSParticle::usesGlobalColorLighting(), and NL3D::CPSTailDot::CVBnPB::VB. Referenced by step().
00243 { 00244 if (!nbRibbons) return; 00245 nlassert(_Owner); 00246 CPSRibbonBase::updateLOD(); 00247 if (_UsedNbSegs < 2) return; 00248 const float date = _Owner->getOwner()->getSystemDate(); 00249 uint8 *currVert; 00250 CVBnPB &VBnPB = getVBnPB(); // get the appropriate vb (built it if needed) 00251 CVertexBuffer &VB = VBnPB.VB; 00252 CPrimitiveBlock &PB = VBnPB.PB; 00253 const uint32 vertexSize = VB.getVertexSize(); 00254 uint colorOffset=0; 00255 00256 IDriver *drv = this->getDriver(); 00257 setupDriverModelMatrix(); 00258 drv->activeVertexBuffer(VB); 00259 _Owner->incrementNbDrawnParticles(nbRibbons); // for benchmark purpose 00260 const uint numRibbonBatch = getNumRibbonsInVB(); // number of ribons to process at once 00261 if (_UsedNbSegs == 0) return; 00262 00264 // Material setup // 00266 CParticleSystem &ps = *(_Owner->getOwner()); 00267 bool useGlobalColor = ps.getColorAttenuationScheme() != NULL || ps.isUserColorUsed(); 00268 if (useGlobalColor != _GlobalColor) 00269 { 00270 _GlobalColor = useGlobalColor; 00271 touch(); 00272 } 00273 if (usesGlobalColorLighting() != _Lighted) 00274 { 00275 _Lighted = usesGlobalColorLighting(); 00276 touch(); 00277 } 00278 if (ps.getForceGlobalColorLightingFlag() != _ForceLighted) 00279 { 00280 _ForceLighted = ps.getForceGlobalColorLightingFlag(); 00281 touch(); 00282 } 00283 updateMaterial(); 00284 setupGlobalColor(); 00285 // 00286 if (_ColorScheme) 00287 { 00288 colorOffset = VB.getColorOff(); 00289 } 00290 00292 // Compute ribbons // 00294 00295 uint toProcess; 00296 uint ribbonIndex = 0; // index of the first ribbon in the batch being processed 00297 uint32 fpRibbonIndex = 0; // fixed point index in source 00298 do 00299 { 00300 toProcess = std::min((uint) (nbRibbons - ribbonIndex) /* = left to do */, numRibbonBatch); 00301 currVert = (uint8 *) VB.getVertexCoordPointer(); 00302 00304 if (_ColorScheme) 00305 { 00306 _ColorScheme->makeN(this->_Owner, ribbonIndex, currVert + colorOffset, vertexSize, toProcess, _UsedNbSegs + 1, srcStep); 00307 } 00308 uint k = toProcess; 00310 // interpolate and project points the result is directly setup in the vertex buffer // 00312 if (!_Parametric) 00313 { 00314 00316 // INCREMENTAL CASE // 00318 do 00319 { 00320 // the parent class has a method to get the ribbons positions 00321 computeRibbon((uint) (fpRibbonIndex >> 16), (CVector *) currVert, vertexSize); 00322 currVert += vertexSize * (_UsedNbSegs + 1); 00323 fpRibbonIndex += srcStep; 00324 } 00325 while (--k); 00326 } 00327 else 00328 { 00330 // PARAMETRIC CASE // 00332 do 00333 { 00334 // we compute each pos thanks to the parametric curve 00335 _Owner->integrateSingle(date - _UsedSegDuration * (_UsedNbSegs + 1), _UsedSegDuration, _UsedNbSegs + 1, (uint) (fpRibbonIndex >> 16), 00336 (NLMISC::CVector *) currVert, vertexSize); 00337 currVert += vertexSize * (_UsedNbSegs + 1); 00338 fpRibbonIndex += srcStep; 00339 } 00340 while (--k); 00341 00342 } 00343 PB.setNumLine(_UsedNbSegs * toProcess); 00344 // display the result 00345 drv->render(PB, _Mat); 00346 ribbonIndex += toProcess; 00347 } 00348 while (ribbonIndex != nbRibbons); 00349 } |
|
Reimplemented in NL3D::CPSForce. Definition at line 888 of file ps_located.h.
00888 { return true; } |
|
derivers draw the particles here
Reimplemented in NL3D::CPSDot, NL3D::CPSFaceLookAt, NL3D::CPSFanLight, and NL3D::CPSShockWave. Definition at line 110 of file ps_particle_basic.h. Referenced by NL3D::CPSParticle::step().
00110 {} |
|
Definition at line 105 of file ps_particle_basic.h. References NL3D::CPSParticle::_UsesGlobalColorLighting.
00105 { _UsesGlobalColorLighting = enabled; } |
|
===================================================================================
Definition at line 508 of file ps_particle_basic.cpp. References NL3D::CMaterial::setZFunc().
00509 { 00510 _Mat.setZFunc(enabled ? CMaterial::less : CMaterial::always); 00511 } |
|
Reimplemented in NL3D::CPSFanLight, NL3D::CPSQuad, NL3D::CPSRibbon, NL3D::CPSRibbonLookAt, and NL3D::CPSShockWave. Definition at line 977 of file ps_located.h.
00977 {} |
|
*************************************************************************************** this should be called before to delete any bindable inserted in a system, but this is done by the system, so you should never need calling it. This has been introduced because calls in dtor are not polymorphic to derived class (which are already destroyed anyway), and some infos are needed in some dtor. The default behaviour does nothing Reimplemented in NL3D::CPSTargetLocatedBindable. Definition at line 1975 of file ps_located.cpp. References NL3D::CParticleSystemProcess::getOwner(), NL3D::CPSLocatedBindable::getUserMatrixUsageCount(), and NL3D::CParticleSystem::releaseRefForUserSysCoordInfo().
01976 { 01977 if (_Owner && _Owner->getOwner()) 01978 { 01979 _Owner->getOwner()->releaseRefForUserSysCoordInfo(getUserMatrixUsageCount()); 01980 } 01981 } |
|
=================================================================================== Force the material to have one texture that is modulated by diffuse, and a constant color and its diffuse color. This is not compatible with multitextureing, however.
Definition at line 573 of file ps_particle_basic.cpp. References NL3D::CPSMaterial::forceTexturedMaterialStages(), NL3D::CMaterial::getTexture(), NL3D::CMaterial::setTexture(), NL3D::CMaterial::texConstantColor(), NL3D::CMaterial::texEnvArg0Alpha(), NL3D::CMaterial::texEnvArg0RGB(), NL3D::CMaterial::texEnvArg1Alpha(), NL3D::CMaterial::texEnvArg1RGB(), NL3D::CMaterial::texEnvOpAlpha(), and NL3D::CMaterial::texEnvOpRGB(). Referenced by NL3D::CPSRibbonLookAt::displayRibbons(), NL3D::CPSShockWave::draw(), and NL3D::CPSQuad::updateMatBeforeRendering().
00574 { 00575 if (force) 00576 { 00578 _Mat.texConstantColor(1, col); 00579 _Mat.texEnvOpRGB(1, CMaterial::Modulate); 00580 _Mat.texEnvOpAlpha(1, CMaterial::Modulate); 00581 _Mat.texEnvArg0RGB(1, CMaterial::Previous, CMaterial::SrcColor); 00582 _Mat.texEnvArg1RGB(1, CMaterial::Constant, CMaterial::SrcColor); 00583 _Mat.texEnvArg0Alpha(1, CMaterial::Previous, CMaterial::SrcAlpha); 00584 _Mat.texEnvArg1Alpha(1, CMaterial::Constant, CMaterial::SrcAlpha); 00585 forceTexturedMaterialStages(2); 00586 } 00587 else 00588 { 00589 if (_Mat.getTexture(1) != NULL) 00590 { 00591 _Mat.setTexture(1, NULL); 00592 } 00593 } 00594 } |
|
=================================================================================== This setup n stage of a material with at least texture.
Definition at line 598 of file ps_particle_basic.cpp. References NL3D::CMaterial::getTexture(), NL3D::IDRV_MAT_MAXTEXTURES, NL3D::CMaterial::setTexture(), and uint. Referenced by NL3D::CPSDot::draw(), NL3D::CPSMaterial::forceModulateConstantColor(), and NL3D::CPSFanLight::setupMaterial().
00599 { 00600 ITexture *blankTex = NULL; 00601 uint k; 00602 for (k = 0; k < numStages; ++k) 00603 { 00604 if (_Mat.getTexture(k) == NULL) 00605 { 00606 if (!blankTex) 00607 { 00608 blankTex = CTextureMem::Create1x1WhiteTex(); 00609 } 00610 _Mat.setTexture(k, blankTex); 00611 } 00612 } 00613 for (; k < IDRV_MAT_MAXTEXTURES; ++k) 00614 { 00615 if (_Mat.getTexture(k) != NULL) 00616 { 00617 _Mat.setTexture(k, NULL); 00618 } 00619 } 00620 } |
|
===================================================================================
Definition at line 551 of file ps_particle_basic.cpp. References NL3D::CPSMaterial::alphaBlend, NL3D::CPSMaterial::alphaTest, NL3D::CMaterial::getBlend(), NL3D::CMaterial::getDstBlend(), NL3D::CMaterial::getSrcBlend(), and nlassert. Referenced by hasTransparentFaces(), NL3D::CPSShockWave::hasTransparentFaces(), NL3D::CPSRibbonLookAt::hasTransparentFaces(), NL3D::CPSRibbon::hasTransparentFaces(), NL3D::CPSQuad::hasTransparentFaces(), NL3D::CPSFanLight::hasTransparentFaces(), and NL3D::CPSDot::hasTransparentFaces().
00552 { 00553 if (_Mat.getBlend()) 00554 { 00555 CMaterial::TBlend srcBlend = _Mat.getSrcBlend(); 00556 CMaterial::TBlend destBlend = _Mat.getDstBlend(); 00557 00558 if (srcBlend == CMaterial::one && destBlend == CMaterial::one) return add; 00559 if (srcBlend == CMaterial::zero && destBlend == CMaterial::srccolor) return modulate; 00560 if (srcBlend == CMaterial::srcalpha && destBlend == CMaterial::invsrcalpha) return alphaBlend; 00561 00562 // unrecognized mode 00563 nlassert(0); 00564 return alphaTest; // to avoid a warning only ... 00565 } 00566 else 00567 { 00568 return alphaTest; 00569 } 00570 } |
|
Implemented in NLAIAGENT::CNumericIndex, NLAIC::IPointerGestion, NLAIC::CIdentType, and CAutomataDesc. Referenced by NLMISC::CClassRegistry::checkObject(), and NL3D::GetTextureSize(). |
|
Get the color.
Definition at line 211 of file ps_particle_basic.h.
00211 { return _Color; } |
|
Test wether color fading is activated. Implements NL3D::CPSTailParticle. Definition at line 70 of file ps_tail_dot.h.
00071 { 00072 return _ColorFading; 00073 } |
|
deriver must return their owner there
Implements NL3D::CPSColoredParticle. Definition at line 126 of file ps_tail_dot.h.
00126 { return _Owner; } |
|
get the color scheme (NULL if none) const version
Definition at line 205 of file ps_particle_basic.h.
00205 { return _ColorScheme; } |
|
get the color scheme (NULL if none)
Definition at line 202 of file ps_particle_basic.h.
00202 { return _ColorScheme; } |
|
|
get the extern ID of this located bindable
Definition at line 964 of file ps_located.h. References NL3D::CPSLocatedBindable::_ExternID, and uint32. Referenced by NL3D::CPSLocated::bind(), and NL3D::CParticleSystem::unregisterLocatedBindableExternID().
00964 { return _ExternID; } |
|
Shortcut to get the font generator if one was set (const version).
Definition at line 904 of file ps_located.h. References NL3D::CParticleSystemProcess::getFontGenerator(), and nlassert.
|
|
Shortcut to get the font generator if one was set.
Definition at line 897 of file ps_located.h. References NL3D::CParticleSystemProcess::getFontGenerator(), and nlassert. Referenced by NL3D::CPSZoneRectangle::show(), NL3D::CPSZoneCylinder::show(), NL3D::CPSZoneDisc::show(), NL3D::CPSZonePlane::show(), NL3D::CPSCylindricVortex::show(), NL3D::CPSGravity::show(), and NL3D::CPSEmitterRectangle::showTool().
|
|
Shortcut to get the font manager if one was set (const version).
Definition at line 2099 of file ps_located.cpp. References NL3D::CParticleSystemProcess::getFontManager(), and nlassert.
|
|
***************************************************************************************
Definition at line 2091 of file ps_located.cpp. References NL3D::CParticleSystemProcess::getFontManager(), and nlassert. Referenced by NL3D::CPSZoneRectangle::show(), NL3D::CPSZoneCylinder::show(), NL3D::CPSZoneDisc::show(), NL3D::CPSZonePlane::show(), NL3D::CPSCylindricVortex::show(), NL3D::CPSGravity::show(), and NL3D::CPSEmitterRectangle::showTool().
|
|
Definition at line 64 of file ps_ribbon_base.h. References NL3D::CPSRibbonBase::_InterpolationMode, and NL3D::CPSRibbonBase::TInterpolationMode.
00064 { return _InterpolationMode; }
|
|
shortcut to get the inverted matrix of the system
Definition at line 2116 of file ps_located.cpp. References NL3D::CParticleSystem::getInvertedSysMat(), NL3D::CParticleSystemProcess::getOwner(), and nlassert.
|
|
shortcut to get the inverted view matrix
Definition at line 2134 of file ps_located.cpp. References NL3D::CParticleSystem::getInvertedViewMat(), NL3D::CParticleSystemProcess::getOwner(), and nlassert.
|
|
Shortcut to get the local to world matrix.
Definition at line 1144 of file ps_located.h. References NL3D::CPSLocated::getLocalToWorldMatrix(), and nlassert. Referenced by NL3D::CPSRibbonLookAt::displayRibbons(), NL3D::CPSSound::newElement(), NL3D::CPSZoneRectangle::show(), NL3D::CPSZoneCylinder::show(), NL3D::CPSZoneDisc::show(), NL3D::CPSZonePlane::show(), NL3D::CPSLight::show(), NL3D::CPSGravity::show(), NL3D::CPSEmitterRectangle::showTool(), NL3D::CPSLight::step(), and NL3D::CPSMesh::updatePos().
|
|
get the valid lods for that object
Definition at line 954 of file ps_located.h. References NL3D::CPSLocatedBindable::_LOD, and NL3D::TPSLod.
00954 { return _LOD; } |
|
Definition at line 95 of file ps_ribbon_base.h.
00095 { return _LODDegradation; }
|
|
return the max number of faces needed for display. This is needed for LOD balancing
Implements NL3D::CPSParticle. Definition at line 365 of file ps_tail_dot.cpp. References NL3D::CPSLocated::getMaxSize(), nlassert, and uint32.
|
|
get the located bindable name (edition purpose)
Definition at line 948 of file ps_located.h.
00948 { return _Name; } |
|
get the number of ribbons contained in a vb for a given length. (e.g the number of ribbons that can be batched) approximation of the max number of vertices we want in a vb Definition at line 434 of file ps_tail_dot.cpp. References uint. Referenced by displayRibbons(), and getVBnPB().
|
|
get the located that owns this bindable (const version)
Definition at line 944 of file ps_located.h.
00944 { return _Owner; } |
|
get the located that owns this bindable
Definition at line 942 of file ps_located.h. Referenced by NL3D::CPSLocated::deleteElement(), NL3D::CParticleSystemInstanceUser::emit(), NL3D::CPSFaceLookAt::CSecondSize::getSizeOwner(), NL3D::CPSSound::newElement(), NL3D::CPSLocated::registerIntegrableForce(), NL3D::CParticleSystem::registerLocatedBindableExternID(), NL3D::CParticleSystemInstanceUser::removeByID(), NL3D::CPSSound::resize(), NL3D::CPSLight::resize(), NL3D::CPSSound::step(), NL3D::CPSLocated::unregisterIntegrableForce(), and NL3D::CParticleSystem::unregisterLocatedBindableExternID().
00942 { return _Owner; } |
|
return priority
Implements NL3D::CPSLocatedBindable. Definition at line 66 of file ps_particle_basic.h. References uint32.
00066 { return 1000; }
|
|
Definition at line 131 of file ps_ribbon_base.h. References NL3D::CPSRibbonBase::_RibbonIndex, and uint32.
00131 { return _RibbonIndex; }
|
|
Definition at line 84 of file ps_ribbon_base.h. References NL3D::CPSRibbonBase::_RibbonLength.
00084 { return _RibbonLength; }
|
|
Definition at line 62 of file ps_ribbon_base.h. References NL3D::CPSRibbonBase::_RibbonMode, and NL3D::CPSRibbonBase::TRibbonMode.
00062 { return _RibbonMode; }
|
|
Definition at line 133 of file ps_ribbon_base.h. References NL3D::CPSRibbonBase::_SamplingDate, and NL3D::CPSRibbonBase::TFloatVect.
00133 { return _SamplingDate; }
|
|
Definition at line 77 of file ps_ribbon_base.h. References NL3D::CPSRibbonBase::_SegDuration, and NL3D::TAnimationTime.
00077 { return _SegDuration; } |
|
Definition at line 125 of file ps_tail_dot.h.
00125 { return _Owner; } |
|
***************************************************************************************
Definition at line 2108 of file ps_located.cpp. References NL3D::CParticleSystemProcess::getOwner(), NL3D::CParticleSystem::getSysMat(), and nlassert.
|
|
get the number of segments used with this particle
Implements NL3D::CPSTailParticle. Definition at line 72 of file ps_ribbon_base.h. References NL3D::CPSRibbonBase::_NbSegs, and uint32.
00072 { return _NbSegs; } |
|
return this bindable type
Implements NL3D::CPSLocatedBindable. Definition at line 63 of file ps_particle_basic.h. References NL3D::PSParticle, and uint32.
00063 { return PSParticle; } |
|
Reimplemented in NL3D::CPSEmitter. Definition at line 974 of file ps_located.h. Referenced by NL3D::CPSLocatedBindable::finalize(), and NL3D::CPSLocatedBindable::setOwner().
00974 { return 0; }
|
|
get a vertex buffer and a primitive suited for the current ribbon choose the right vb Setup the pb and vb parts. Not very fast but executed only once add 1 line in the primitive block set the vb format & size In the case of a ribbon with color and fading, we encode the fading in a texture If the ribbon has fading, but only a global color, we encode it in the primary color Definition at line 374 of file ps_tail_dot.cpp. References getNumRibbonsInVB(), NL3D::CPSTailDot::CVBnPB::PB, NL3D::CVertexBuffer::setColor(), NL3D::CPrimitiveBlock::setLine(), NL3D::CPrimitiveBlock::setNumLine(), NL3D::CVertexBuffer::setNumVertices(), NL3D::CVertexBuffer::setTexCoord(), NL3D::CVertexBuffer::setVertexFormat(), uint, uint8, and NL3D::CPSTailDot::CVBnPB::VB. Referenced by displayRibbons().
00375 { 00377 TVBMap &map = _ColorScheme ? (_ColorFading ? _FadedColoredVBMap : _ColoredVBMap) // per ribbon coloçr 00378 : (_ColorFading ? _FadedVBMap : _VBMap); // global color 00379 TVBMap::iterator it = map.find(_UsedNbSegs + 1); 00380 if (it != map.end()) 00381 { 00382 return it->second; 00383 } 00384 else // must create this vb, with few different size, it is still interseting, though they are only destroyed at exit 00385 { 00386 const uint numRibbonInVB = getNumRibbonsInVB(); 00387 CVBnPB &VBnPB = map[_UsedNbSegs + 1]; // make an entry 00388 00392 CVertexBuffer &vb = VBnPB.VB; 00393 vb.setVertexFormat(CVertexBuffer::PositionFlag 00394 |(_ColorScheme || _ColorFading ? CVertexBuffer::PrimaryColorFlag : 0) 00395 | (_ColorScheme && _ColorFading ? CVertexBuffer::TexCoord0Flag : 0)); 00396 00397 vb.setNumVertices((_UsedNbSegs + 1) * numRibbonInVB ); // 1 seg = 1 line + terminal vertices 00398 00399 // set the primitive block size 00400 CPrimitiveBlock &pb = VBnPB.PB; 00401 pb.setNumLine(_UsedNbSegs * numRibbonInVB); 00403 uint vbIndex = 0; 00404 uint pbIndex = 0; 00405 for (uint i = 0; i < numRibbonInVB; ++i) 00406 { 00407 for (uint k = 0; k < (_UsedNbSegs + 1); ++k) 00408 { 00409 00410 if (_ColorScheme && _ColorFading) 00411 { 00412 vb.setTexCoord(vbIndex, 0, 0.5f - 0.5f * ((float) k / _UsedNbSegs), 0); 00413 } 00414 else if (_ColorFading) 00415 { 00416 uint8 intensity = (uint8) (255 * (1.f - ((float) k / _UsedNbSegs))); 00417 NLMISC::CRGBA col(intensity, intensity, intensity, intensity); 00418 vb.setColor(vbIndex, col); 00419 } 00420 00422 if (k != _UsedNbSegs) 00423 { 00424 pb.setLine(pbIndex ++, vbIndex, vbIndex + 1); 00425 } 00426 ++vbIndex; 00427 } 00428 } 00429 return VBnPB; 00430 } 00431 } |
|
shortcut to get the view matrix
Definition at line 2125 of file ps_located.cpp. References NL3D::CParticleSystemProcess::getOwner(), NL3D::CParticleSystem::getViewMat(), and nlassert. Referenced by NL3D::CPSRibbonLookAt::displayRibbons(), and NL3D::CPSFaceLookAtHelper::drawLookAt().
|
|
tells wether there are alive emitters
Definition at line 958 of file ps_located.h.
00958 { return false; } |
|
from CPSParticle : return true if there are lightable faces in the object
Implements NL3D::CPSParticle. Definition at line 105 of file ps_tail_dot.h.
00105 { return false; } |
|
return true if there are Opaque faces in the object
Implements NL3D::CPSParticle. Definition at line 359 of file ps_tail_dot.cpp. References hasTransparentFaces(). Referenced by step().
00360 { 00361 return !hasTransparentFaces(); 00362 } |
|
return true if this located bindable derived class holds alive particles
Reimplemented from NL3D::CPSLocatedBindable. Definition at line 69 of file ps_particle_basic.h. References NL3D::CPSLocated::getSize(), and nlassert.
|
|
return true if there are transparent faces in the object
Implements NL3D::CPSParticle. Definition at line 352 of file ps_tail_dot.cpp. References NL3D::CPSMaterial::getBlendingMode(). Referenced by hasOpaqueFaces(), and step().
00353 { 00354 return getBlendingMode() != CPSMaterial::alphaTest ; 00355 } |
|
Definition at line 568 of file ps_ribbon_base.cpp. References NL3D::CPSRibbonBase::_NbSegs, NL3D::CPSRibbonBase::_SamplingDate, and NL3D::EndRibbonStorage. Referenced by NL3D::CPSRibbonBase::CPSRibbonBase(), NL3D::CPSRibbonBase::motionTypeChanged(), and NL3D::CPSRibbonBase::setTailNbSeg().
00569 { 00570 _SamplingDate.resize( _NbSegs + 1 + EndRibbonStorage); 00571 std::fill(_SamplingDate.begin(), _SamplingDate.begin() + (_NbSegs + 1 + EndRibbonStorage), 0.f); 00572 } |
|
Definition at line 844 of file ps_located.h. References NL3D::CPSLocatedBindable::_Active. Referenced by NL3D::CParticleSystem::hasActiveEmitters().
00844 { return _Active; } |
|
Test wether Auto-LOD is disabled.
Definition at line 140 of file ps_particle_basic.h. References NL3D::CPSParticle::_DisableAutoLOD.
00140 { return _DisableAutoLOD; }
|
|
return true if the tails are in the system basis
Implements NL3D::CPSTailParticle. Definition at line 82 of file ps_tail_dot.h.
00082 { return true; } |
|
===================================================================================
Definition at line 514 of file ps_particle_basic.cpp. References NL3D::CMaterial::getZFunc().
00515 { 00516 return _Mat.getZFunc() != CMaterial::always; 00517 } |
|
called when the motion type has changed, this allow us to draw smoother ribbons when parametric anim is used
Reimplemented from NL3D::CPSLocatedBindable. Definition at line 550 of file ps_ribbon_base.cpp. References NL3D::CPSRibbonBase::_Parametric, NL3D::CPSRibbonBase::_Ribbons, NLMISC::contReset(), NL3D::CPSLocated::getMaxSize(), NL3D::CPSRibbonBase::initDateVect(), nlassert, NL3D::CPSRibbonBase::resetFromOwner(), and NL3D::CPSRibbonBase::resize().
00551 { 00552 _Parametric = parametric; 00553 if (parametric) 00554 { 00555 NLMISC::contReset(_Ribbons); // kill the vector 00556 } 00557 else 00558 { 00559 nlassert(_Owner); 00560 resize(_Owner->getMaxSize()); 00561 initDateVect(); 00562 resetFromOwner(); 00563 } 00564 } |
|
Definition at line 233 of file ps_particle_basic.h. References NL3D::CPSAttribMaker< CRGBA >::hasMemory(), NL3D::CPSAttribMaker< CRGBA >::newElement(), and uint32. Referenced by newElement(), NL3D::CPSShockWave::newElement(), NL3D::CPSRibbonLookAt::newElement(), NL3D::CPSRibbon::newElement(), NL3D::CPSQuad::newElement(), NL3D::CPSConstraintMesh::newElement(), NL3D::CPSFanLight::newElement(), and NL3D::CPSDot::newElement().
00234 { 00235 if (_ColorScheme && _ColorScheme->hasMemory()) _ColorScheme->newElement(emitterLocated, emitterIndex); 00236 } |
|
inherited from CPSLocatedBindable
Reimplemented from NL3D::CPSRibbonBase. Definition at line 212 of file ps_tail_dot.cpp. References NL3D::CPSColoredParticle::newColorElement(), and uint32.
00213 { 00214 CPSRibbonBase::newElement(emitterLocated, emitterIndex); 00215 newColorElement(emitterLocated, emitterIndex); 00216 } |
|
ctor
|
|
Shortcut to notify that the max number of faces has changed This must be called when a geometric property of the particle has been modified This needn't to be called during CPSParticle::resize overrides Definition at line 151 of file ps_particle_basic.h. References NL3D::CPSLocated::notifyMaxNumFacesChanged(). Referenced by NL3D::CPSFanLight::setNbFans(), NL3D::CPSShockWave::setNbSegs(), and NL3D::CPSConstraintMesh::update().
|
|
*************************************************************************************** Can be used by located bindable that have located as targets (emitter, collision zone, forces) to be notified that one of their target has been removed. To do this : The object that focus the target must call registerDTorObserver on the target, with himself as a parameter When the target is removed, this target will call this method for all registered CPSLocated The default behaviour remove this object as an observer
Reimplemented in NL3D::CPSEmitter, and NL3D::CPSTargetLocatedBindable. Definition at line 1996 of file ps_located.cpp. References NL3D::CPSLocated::unregisterDtorObserver(). Referenced by NL3D::CPSLocated::releaseRefTo().
01997 {
01998 ptr->unregisterDtorObserver(this);
01999 }
|
|
*************************************************************************************** Release any reference this obj may have to other process of the system For example, this is used when detaching a located bindable from a system. Reimplemented in NL3D::CPSEmitter, NL3D::CPSLight, NL3D::CPSTargetLocatedBindable, and NL3D::CPSMesh. Definition at line 2170 of file ps_located.cpp. Referenced by NL3D::CPSLocatedBindable::setOwner().
02171 { 02172 } |
|
Release any reference this obj may have on the given process. For example, this is used when detaching a located bindable from a system. Reimplemented in NL3D::CPSEmitter, and NL3D::CPSTargetLocatedBindable. Definition at line 871 of file ps_located.h.
00871 {} |
|
Definition at line 538 of file ps_ribbon_base.cpp. References NL3D::CPSRibbonBase::_Parametric, NL3D::CPSAttrib< T >::begin(), NL3D::CPSAttrib< T >::end(), NL3D::CPSLocated::getPos(), nlassert, NL3D::CPSRibbonBase::resetSingleRibbon(), and uint. Referenced by NL3D::CPSRibbonBase::motionTypeChanged(), and NL3D::CPSRibbonBase::resize().
00539 { 00540 nlassert(!_Parametric); 00541 TPSAttribVector::iterator posIt = _Owner->getPos().begin(); 00542 TPSAttribVector::iterator endPosIt = _Owner->getPos().end(); 00543 for (uint k = 0; posIt != endPosIt; ++posIt, ++k) 00544 { 00545 resetSingleRibbon(k, *posIt); 00546 } 00547 } |
|
inherited from CPSLocatedBindable
Reimplemented from NL3D::CPSRibbonBase. Definition at line 228 of file ps_tail_dot.cpp. References nlassert, NL3D::CPSColoredParticle::resizeColor(), size, and uint32.
00229 { 00230 nlassert(size < (1 << 16)); 00231 CPSRibbonBase::resize(size); 00232 resizeColor(size); 00233 } |
|
Definition at line 241 of file ps_particle_basic.h. References NL3D::CPSColoredParticle::getColorOwner(), NL3D::CPSAttribMaker< CRGBA >::hasMemory(), nlassert, NL3D::CPSAttribMaker< CRGBA >::resize(), size, and uint32. Referenced by resize(), NL3D::CPSShockWave::resize(), NL3D::CPSRibbonLookAt::resize(), NL3D::CPSRibbon::resize(), NL3D::CPSQuad::resize(), NL3D::CPSConstraintMesh::resize(), NL3D::CPSFanLight::resize(), and NL3D::CPSDot::resize().
00242 { 00243 nlassert(size < (1 << 16)); 00244 if (_ColorScheme && _ColorScheme->hasMemory()) _ColorScheme->resize(size, getColorOwner()->getSize()); 00245 } |
|
serialisation. Derivers must override this, and call their parent version
we had CPSParticle::serial(f), but this is not the base class anymore, so we emulate this... version 2 : auto-lod saved Reimplemented from NL3D::CPSRibbonBase. Definition at line 84 of file ps_tail_dot.cpp. References nlassert, sint, and uint32.
00085 { 00086 00087 sint ver = f.serialVersion(3); 00088 if (ver == 1) 00089 { 00090 nlassert(f.isReading()); 00091 00094 sint ver2 = f.serialVersion(2); 00095 00096 // here is CPSLocatedBindable::serial(f) 00097 sint ver3 = f.serialVersion(4); 00098 f.serialPtr(_Owner); 00099 if (ver3 > 1) f.serialEnum(_LOD); 00100 if (ver3 > 2) f.serial(_Name); 00101 if (ver3 > 3) 00102 { 00103 if (f.isReading()) 00104 { 00105 uint32 id; 00106 f.serial(id); 00107 setExternID(id); 00108 } 00109 else 00110 { 00111 f.serial(_ExternID); 00112 } 00113 } 00114 00115 if (ver2 >= 2) 00116 { 00117 bool bDisableAutoLOD; 00118 f.serial(bDisableAutoLOD); 00119 disableAutoLOD(bDisableAutoLOD); 00120 } 00121 00122 uint32 tailNbSegs; 00123 bool colorFading; 00124 bool systemBasisEnabled; 00125 00126 CPSColoredParticle::serialColorScheme(f); 00127 f.serial(tailNbSegs, colorFading, systemBasisEnabled); 00128 00129 _ColorFading = colorFading; 00130 _NbSegs = tailNbSegs >> 1; 00131 if (_NbSegs < 2) _NbSegs = 2; 00132 setInterpolationMode(Linear); 00133 serialMaterial(f); 00134 00135 00136 nlassert(_Owner); 00137 resize(_Owner->getMaxSize()); 00138 initDateVect(); 00139 resetFromOwner(); 00140 } 00141 00142 if (ver >= 2) 00143 { 00144 CPSRibbonBase::serial(f); 00145 CPSColoredParticle::serialColorScheme(f); 00146 CPSMaterial::serialMaterial(f); 00147 bool colorFading = _ColorFading; 00148 f.serial(colorFading); 00149 _ColorFading = colorFading; 00150 if (ver >= 3) 00151 { 00152 uint32 tailNbSegs = _NbSegs; 00153 f.serial(tailNbSegs); 00154 } 00155 if (f.isReading()) 00156 { 00157 setTailNbSeg(_NbSegs); 00158 touch(); 00159 } 00160 } 00161 } |
|
serialization.
Definition at line 155 of file ps_particle_basic.cpp.
00156 { 00157 f.serialVersion(1); 00158 if (f.isReading()) 00159 { 00160 if (_ColorScheme) 00161 { 00162 delete _ColorScheme; 00163 _ColorScheme = NULL; 00164 } 00165 } 00166 bool useColorScheme = _ColorScheme != NULL; 00167 f.serial(useColorScheme); 00168 if (useColorScheme) 00169 { 00170 f.serialPolyPtr(_ColorScheme); 00171 } 00172 else 00173 { 00174 f.serial(_Color); 00175 } 00176 } |
|
===================================================================================
Definition at line 493 of file ps_particle_basic.cpp. References sint.
00494 { 00495 sint ver = f.serialVersion(2); 00496 TBlendingMode m = getBlendingMode(); 00497 f.serialEnum(m); 00498 setBlendingMode(m); 00499 if (ver >= 2) 00500 { 00501 bool zTest = isZTestEnabled(); 00502 f.serial(zTest); 00503 enableZTest(zTest); 00504 } 00505 } |
|
Activate / Deactivate this object. When not active, the owning system won't try to call the 'step' method.
Definition at line 843 of file ps_located.h. References NL3D::CPSLocatedBindable::_Active. Referenced by NL3D::CParticleSystem::activateEmitters(), and NL3D::CParticleSystemInstanceUser::setActive().
00843 { _Active = active; } |
|
===================================================================================
Definition at line 520 of file ps_particle_basic.cpp. References NL3D::CPSMaterial::alphaBlend, NL3D::CPSMaterial::alphaTest, NL3D::CMaterial::setAlphaTest(), NL3D::CMaterial::setBlend(), NL3D::CMaterial::setBlendFunc(), and NL3D::CMaterial::setZWrite().
00521 { 00522 switch (mode) 00523 { 00524 case add: 00525 _Mat.setBlend(true); 00526 _Mat.setBlendFunc(CMaterial::one, CMaterial::one); 00527 _Mat.setZWrite(false); 00528 _Mat.setAlphaTest(false); 00529 break; 00530 case modulate: 00531 _Mat.setBlend(true); 00532 _Mat.setBlendFunc(CMaterial::zero, CMaterial::srccolor); 00533 _Mat.setZWrite(false); 00534 _Mat.setAlphaTest(false); 00535 break; 00536 case alphaBlend: 00537 _Mat.setBlend(true); 00538 _Mat.setBlendFunc(CMaterial::srcalpha, CMaterial::invsrcalpha); 00539 _Mat.setZWrite(false); 00540 _Mat.setAlphaTest(false); 00541 break; 00542 case alphaTest: 00543 _Mat.setBlend(false); 00544 _Mat.setZWrite(true); 00545 _Mat.setAlphaTest(true); 00546 break; 00547 } 00548 } |
|
Set a constant color for the particles. remove any previous scheme.
Definition at line 135 of file ps_particle_basic.cpp. References NL3D::CPSColoredParticle::updateMatAndVbForColor().
00136 { 00137 delete _ColorScheme; 00138 _ColorScheme = NULL; 00139 _Color = col; 00140 updateMatAndVbForColor(); 00141 } |
|
(de)activate color fading when its done, colors fades to black along the tail. Implements NL3D::CPSTailParticle. Definition at line 62 of file ps_tail_dot.h. References touch().
00063 { 00064 _ColorFading = onOff; 00065 touch(); 00066 } |
|
Set an attribute maker that produce a color It must have been allocated by new It will be deleted by this object Definition at line 125 of file ps_particle_basic.cpp. References NL3D::CPSColoredParticle::getColorOwner(), nlassert, NL3D::CPSAttribMaker< T >::resize(), and NL3D::CPSColoredParticle::updateMatAndVbForColor().
00126 { 00127 nlassert(col); 00128 delete _ColorScheme; 00129 _ColorScheme = col; 00130 if (getColorOwner() && col->hasMemory()) col->resize(getColorOwner()->getMaxSize(), getColorOwner()->getSize()); 00131 updateMatAndVbForColor(); 00132 } |
|
*************************************************************************************** set the extern ID of this located bindable. 0 means no extern access. The map of ID-locatedBindable. Is in th particle system, so this located bindable must have been attached to a particle system, otherwise an assertion is raised Definition at line 2149 of file ps_located.cpp. References NL3D::CPSLocatedBindable::_ExternID, NL3D::CParticleSystemProcess::getOwner(), NL3D::CParticleSystem::registerLocatedBindableExternID(), uint32, and NL3D::CParticleSystem::unregisterLocatedBindableExternID().
02150 { 02151 if (id == _ExternID) return; 02152 CParticleSystem *ps = NULL; 02153 if (_Owner && _Owner->getOwner()) 02154 { 02155 ps = _Owner->getOwner(); 02156 } 02157 if (ps) 02158 { 02159 ps->unregisterLocatedBindableExternID(this); 02160 _ExternID = 0; 02161 } 02162 if (id != 0) 02163 { 02164 if (ps) ps->registerLocatedBindableExternID(id, this); 02165 _ExternID = id; 02166 } 02167 } |
|
Definition at line 111 of file ps_ribbon_base.cpp. References NL3D::CPSRibbonBase::_InterpolationMode, NL3D::CPSRibbonBase::InterpModeLast, and nlassert. Referenced by NL3D::CPSRibbon::CPSRibbon(), and CPSTailDot().
00112 { 00113 nlassert(mode < InterpModeLast); 00114 _InterpolationMode = mode; 00115 } |
|
set the LODs that apply to that object (warning : it is based on the position of the system, and don't act on a per instance basis ...) To have per instance precision, you must use an attribute maker that has LOD as its input Definition at line 952 of file ps_located.h. References NL3D::CPSLocatedBindable::_LOD.
00952 { _LOD = lod; } |
|
Allow degradation of ribbons with distance of the system (may not be suited when theit paths have wicked angles)
Definition at line 90 of file ps_ribbon_base.h. References nlassert.
00091 { 00092 nlassert(percent >= 0 && percent <= 1); 00093 _LODDegradation = percent; 00094 } |
|
set the located bindable name (edition purpose)
Definition at line 946 of file ps_located.h.
00946 { _Name = name; } |
|
***************************************************************************************
Reimplemented in NL3D::CPSEmitter. Definition at line 1948 of file ps_located.cpp. References NL3D::CParticleSystem::addRefForUserSysCoordInfo(), NL3D::CPSLocatedBindable::deleteElement(), NL3D::CParticleSystemProcess::getOwner(), NL3D::CPSLocated::getSize(), NL3D::CPSLocatedBindable::getUserMatrixUsageCount(), NL3D::CPSLocatedBindable::releaseAllRef(), NL3D::CParticleSystem::releaseRefForUserSysCoordInfo(), and uint. Referenced by NL3D::CPSLocated::bind(), and NL3D::CPSLocated::unbind().
01949 { 01950 if (psl == _Owner) return; 01951 if (psl == NULL) 01952 { 01953 releaseAllRef(); 01954 if (_Owner) 01955 { 01956 // empty this located bindable. Need to be empty if it must be rebound to another located. 01957 for (uint k = 0; k < _Owner->getSize(); ++k) 01958 { 01959 deleteElement(0); 01960 } 01961 } 01962 } 01963 if (_Owner && _Owner->getOwner()) 01964 { 01965 _Owner->getOwner()->releaseRefForUserSysCoordInfo(getUserMatrixUsageCount()); 01966 } 01967 _Owner = psl; 01968 if (_Owner && _Owner->getOwner()) 01969 { 01970 _Owner->getOwner()->addRefForUserSysCoordInfo(getUserMatrixUsageCount()); 01971 } 01972 } |
|
The the length in meter of the ribbon. This is used only if the ribbon mode is set to FixedSize. These kind of ribbon are usually slower than variable size ribbons. The default is one metter. Definition at line 95 of file ps_ribbon_base.cpp. References NL3D::CPSRibbonBase::_NbSegs, NL3D::CPSRibbonBase::_RibbonLength, NL3D::CPSRibbonBase::_SegLength, and nlassert.
|
|
NB : a fixed size isn't applied with parametric motion.
Definition at line 103 of file ps_ribbon_base.cpp. References NL3D::CPSRibbonBase::_RibbonMode, nlassert, and NL3D::CPSRibbonBase::RibbonModeLast.
00104 { 00105 nlassert(mode < RibbonModeLast); 00106 _RibbonMode = mode; 00107 } |
|
Set how many seconds need a seg to be traversed. Long times will create longer ribbons. Default is 0.02. It gives the sampling rate for each type of ribbon Definition at line 132 of file ps_ribbon_base.cpp. References NL3D::CPSRibbonBase::_SegDuration, and NL3D::TAnimationTime. Referenced by NL3D::CPSRibbon::CPSRibbon(), and CPSTailDot().
00133 { 00134 _SegDuration = ellapsedTime; 00135 00136 } |
|
tells in which basis is the tail It requires one transform per particle if it is not the same as the located that hold that particle The default is false. With that you can control if a rotation of the system will rotate the tail Implements NL3D::CPSTailParticle. Definition at line 79 of file ps_tail_dot.h.
00079 {} |
|
set the number of segments used with this particle. In this case, it can't be lower than 2
Implements NL3D::CPSTailParticle. Definition at line 118 of file ps_ribbon_base.cpp. References NL3D::CPSRibbonBase::_NbSegs, NL3D::CPSRibbonBase::_RibbonIndex, NL3D::CPSLocated::getMaxSize(), NL3D::CPSRibbonBase::initDateVect(), nlassert, NL3D::CPSRibbonBase::resize(), and uint32.
|
|
|
setup the global color if it is used Definition at line 508 of file ps_tail_dot.cpp. References NL3D::CParticleSystem::getColorAttenuationScheme(), NL3D::CParticleSystem::getForceGlobalColorLightingFlag(), NL3D::CParticleSystem::getGlobalColor(), NL3D::CParticleSystem::getGlobalColorLighted(), NL3D::CParticleSystemProcess::getOwner(), NL3D::CParticleSystem::isUserColorUsed(), NLMISC::CRGBA::modulateFromColor(), NL3D::CMaterial::setColor(), NL3D::CMaterial::texConstantColor(), and NL3D::CPSParticle::usesGlobalColorLighting(). Referenced by displayRibbons().
00509 { 00511 CParticleSystem &ps = *(_Owner->getOwner()); 00512 if (_ColorScheme) 00513 { 00514 if (ps.getForceGlobalColorLightingFlag() || usesGlobalColorLighting()) 00515 { 00516 _Mat.texConstantColor(0, ps.getGlobalColorLighted()); 00517 } 00518 else 00519 { 00520 _Mat.texConstantColor(0, ps.getGlobalColor()); 00521 } 00522 } 00523 else // GLOBAL COLOR with / without fading 00524 { 00525 if (ps.getForceGlobalColorLightingFlag() || usesGlobalColorLighting()) 00526 { 00527 NLMISC::CRGBA col; 00528 col.modulateFromColor(ps.getGlobalColorLighted(), _Color); 00529 if (_ColorFading) 00530 { 00531 _Mat.texConstantColor(0, col); 00532 } 00533 else // color attenuation, no fading : 00534 { 00535 _Mat.setColor(col); 00536 } 00537 } 00538 else 00539 if (ps.getColorAttenuationScheme() || ps.isUserColorUsed()) 00540 { 00541 NLMISC::CRGBA col; 00542 col.modulateFromColor(ps.getGlobalColor(), _Color); 00543 if (_ColorFading) 00544 { 00545 _Mat.texConstantColor(0, col); 00546 } 00547 else // color attenuation, no fading : 00548 { 00549 _Mat.setColor(col); 00550 } 00551 } 00552 else 00553 { 00554 if (_ColorFading) 00555 { 00556 _Mat.texConstantColor(0, _Color); 00557 } 00558 else // constant color 00559 { 00560 _Mat.setColor(_Color); 00561 } 00562 } 00563 } 00564 } |
|
Reimplemented from NL3D::CPSMaterial. Definition at line 110 of file ps_tail_dot.h. References value.
00110 { CPSMaterial::setZBias(value); } |
|
draw the particles for edition mode. The default behaviour just draw a wireframe model
Definition at line 55 of file ps_particle_basic.cpp. References NL3D::CPSLocatedBindable::displayIcon2d(), PARTICLES_CHECK_MEM, and uint. Referenced by NL3D::CPSParticle::step(), NL3D::CPSConstraintMesh::step(), NL3D::CPSMesh::step(), and NL3D::CPSFace::step().
00056 { 00057 PARTICLES_CHECK_MEM; 00058 00059 CVector I = CVector::I; 00060 CVector J = CVector::J; 00061 00062 const CVector tab[] = { 2 * J, I + J 00063 , I + J, 2 * I + J 00064 , 2 * I + J, I 00065 , I, 2 * I - J 00066 , 2 * I - J, - .5f * J 00067 , - .5f * J, -2 * I - J 00068 , -2 * I - J, - I 00069 , - I, -2 * I + J 00070 , -2 * I + J, - I + J 00071 , - I + J, 2 * J 00072 }; 00073 const uint tabSize = sizeof(tab) / (2 * sizeof(CVector)); 00074 00075 const float sSize = 0.1f; 00076 displayIcon2d(tab, tabSize, sSize); 00077 00078 PARTICLES_CHECK_MEM; 00079 } |
|
inherited from CPSParticle return true if the ribbon light persist after death
We support Auto-LOD for ribbons, although there is a built-in LOD (that change the geometry rather than the number of ribbons) that gives better result (both can be used simultaneously) Reimplemented from NL3D::CPSParticle. Definition at line 165 of file ps_tail_dot.cpp. References NL3D::CPSParticle::computeSrcStep(), displayRibbons(), NL3D::CParticleSystem::getForceGlobalColorLightingFlag(), NL3D::CParticleSystem::getGlobalColor(), NL3D::CParticleSystem::getGlobalColorLighted(), NL3D::CParticleSystemProcess::getOwner(), hasOpaqueFaces(), hasTransparentFaces(), NL3D::PSBlendRender, NL3D::PSMotion, NL3D::PSSolidRender, NL3D::PSToolRender, NL3D::CMaterial::setColor(), NL3D::TAnimationTime, uint, uint32, NL3D::CPSRibbonBase::updateGlobals(), and NL3D::CPSParticle::usesGlobalColorLighting().
00166 { 00167 if (pass == PSMotion) 00168 { 00169 if (!_Parametric) 00170 { 00171 updateGlobals(realET); 00172 } 00173 } 00174 else 00175 if ( 00176 (pass == PSBlendRender && hasTransparentFaces()) 00177 || (pass == PSSolidRender && hasOpaqueFaces()) 00178 ) 00179 { 00180 uint32 step; 00181 uint numToProcess; 00182 computeSrcStep(step, numToProcess); 00183 if (!numToProcess) return; 00184 00186 CParticleSystem &ps = *(_Owner->getOwner()); 00187 if (ps.getForceGlobalColorLightingFlag() || usesGlobalColorLighting()) 00188 { 00189 _Mat.setColor(ps.getGlobalColorLighted()); 00190 } 00191 else 00192 { 00193 _Mat.setColor(ps.getGlobalColor()); 00194 } 00195 00200 displayRibbons(numToProcess, step); 00201 00202 } 00203 else 00204 if (pass == PSToolRender) // edition mode only 00205 { 00206 //showTool(); 00207 } 00208 } |
|
Implements NL3D::CPSParticle. Definition at line 107 of file ps_tail_dot.h.
00107 { return true; } |
|
Definition at line 172 of file ps_tail_dot.h. Referenced by displayRibbons(), setColorFading(), and updateMatAndVbForColor().
00172 { _Touch = true; } |
|
Called each time the time of the system change in order to update the ribbons positions. decal date save current date updating ribbons positions Definition at line 139 of file ps_ribbon_base.cpp. References NL3D::CPSRibbonBase::_NbSegs, NL3D::CPSRibbonBase::_Parametric, NL3D::CPSRibbonBase::_RibbonIndex, NL3D::CPSRibbonBase::_Ribbons, NL3D::CPSRibbonBase::_SamplingDate, NL3D::CPSRibbonBase::_SegDuration, NL3D::CPSAttrib< T >::begin(), NL3D::EndRibbonStorage, NL3D::CParticleSystemProcess::getOwner(), NL3D::CPSLocated::getPos(), NL3D::CPSLocated::getSize(), NL3D::CParticleSystem::getSystemDate(), nlassert, size, NL3D::TAnimationTime, and uint. Referenced by step(), NL3D::CPSRibbonLookAt::step(), and NL3D::CPSRibbon::step().
00140 { 00141 nlassert(!_Parametric); 00142 nlassert(_Owner); 00143 const uint size = _Owner->getSize(); 00144 if (!size) return; 00145 const TAnimationTime currDate = _Owner->getOwner()->getSystemDate() + realET; 00146 if (currDate - _LastUpdateDate >= _SegDuration) 00147 { 00148 if (_RibbonIndex == 0) _RibbonIndex = _NbSegs + EndRibbonStorage; 00149 else --_RibbonIndex; 00150 00152 ::memmove(&_SamplingDate[1], &_SamplingDate[0], sizeof(float) * (_NbSegs + EndRibbonStorage)); 00153 _LastUpdateDate = currDate; 00154 } 00155 00157 _SamplingDate[0] = currDate; 00158 00160 TPSAttribVector::iterator posIt = _Owner->getPos().begin(); 00161 NLMISC::CVector *currIt = &_Ribbons[_RibbonIndex]; 00162 uint k = size; 00163 for (;;) 00164 { 00165 *currIt = *posIt; 00166 --k; 00167 if (!k) break; 00168 ++posIt; 00169 currIt += (_NbSegs + 1 + EndRibbonStorage); 00170 } 00171 } |
|
must be called for the lod to apply (updates UsedNbSegs)
Definition at line 610 of file ps_ribbon_base.cpp. References NL3D::CPSRibbonBase::_NbSegs, NL3D::CPSRibbonBase::_SegDuration, NL3D::CPSRibbonBase::_SegLength, NL3D::CPSRibbonBase::_UsedNbSegs, NL3D::CPSRibbonBase::_UsedSegDuration, NL3D::CPSRibbonBase::_UsedSegLength, NLMISC::clamp(), NL3D::CParticleSystem::getOneMinusCurrentLODRatio(), NL3D::CParticleSystemProcess::getOwner(), nlassert, and uint.
00611 { 00612 nlassert(_Owner); 00613 float ratio = _Owner->getOwner()->getOneMinusCurrentLODRatio(); 00614 float squaredRatio = ratio * ratio; 00615 float lodRatio = _LODDegradation + (1.f - _LODDegradation ) * squaredRatio * squaredRatio * squaredRatio; 00616 00617 _UsedNbSegs = (uint) (_NbSegs * lodRatio); 00618 NLMISC::clamp(_UsedNbSegs, 0u, _NbSegs); 00619 const float epsilon = 10E-4f; 00620 _UsedSegDuration = _SegDuration / std::max(epsilon, lodRatio); 00621 _UsedSegLength = _SegLength / std::max(epsilon, lodRatio); 00622 00623 } |
|
update the material and the vb so that they match the color scheme. Inherited from CPSColoredParticle
Implements NL3D::CPSColoredParticle. Definition at line 236 of file ps_tail_dot.cpp. References touch().
00237 { 00238 touch(); 00239 } |
|
Definition at line 443 of file ps_tail_dot.cpp. References NL3D::CreateGradientTexture(), NL3D::CParticleSystem::getColorAttenuationScheme(), NL3D::CParticleSystem::getForceGlobalColorLightingFlag(), NL3D::CParticleSystemProcess::getOwner(), NL3D::CParticleSystem::isUserColorUsed(), NL3D::CMaterial::setTexture(), NL3D::SetupModulatedStage(), and NL3D::CPSParticle::usesGlobalColorLighting(). Referenced by displayRibbons().
00444 { 00445 if (!_Touch) return; 00446 00447 static NLMISC::CRefPtr<ITexture> ptGradTexture; 00448 00449 CParticleSystem &ps = *(_Owner->getOwner()); 00450 if (_ColorScheme) 00451 { // PER RIBBON COLOR 00452 if (ps.getForceGlobalColorLightingFlag() || usesGlobalColorLighting() || ps.getColorAttenuationScheme() || ps.isUserColorUsed()) 00453 { 00454 if (_ColorFading) // global color + fading + per ribbon color 00455 { 00456 // the first stage is used to get fading * global color 00457 // the second stage multiply the result by the diffuse colot 00458 if (ptGradTexture == NULL) // have we got a gradient texture ? 00459 { 00460 ptGradTexture = CreateGradientTexture(); 00461 } 00462 _Mat.setTexture(0, ptGradTexture); 00463 CPSMaterial::forceTexturedMaterialStages(2); // use constant color 0 * diffuse, 1 stage needed 00464 SetupModulatedStage(_Mat, 0, CMaterial::Texture, CMaterial::Constant); 00465 SetupModulatedStage(_Mat, 1, CMaterial::Previous, CMaterial::Diffuse); 00466 } 00467 else // per ribbon color with global color 00468 { 00469 CPSMaterial::forceTexturedMaterialStages(1); // use constant color 0 * diffuse, 1 stage needed 00470 SetupModulatedStage(_Mat, 0, CMaterial::Diffuse, CMaterial::Constant); 00471 } 00472 } 00473 else 00474 { 00475 if (_ColorFading) // per ribbon color, fading 00476 { 00477 if (ptGradTexture == NULL) // have we got a gradient texture ? 00478 { 00479 ptGradTexture = CreateGradientTexture(); 00480 } 00481 _Mat.setTexture(0, ptGradTexture); 00482 CPSMaterial::forceTexturedMaterialStages(1); 00483 SetupModulatedStage(_Mat, 0, CMaterial::Texture, CMaterial::Diffuse); 00484 } 00485 else // per color ribbon with no fading, and no global color 00486 { 00487 CPSMaterial::forceTexturedMaterialStages(0); // no texture use constant diffuse only 00488 } 00489 } 00490 } 00491 else // GLOBAL COLOR 00492 { 00493 if (_ColorFading) 00494 { 00495 CPSMaterial::forceTexturedMaterialStages(1); // use constant color 0 * diffuse, 1 stage needed 00496 SetupModulatedStage(_Mat, 0, CMaterial::Diffuse, CMaterial::Constant); 00497 } 00498 else // constant color 00499 { 00500 CPSMaterial::forceTexturedMaterialStages(0); // no texture use constant diffuse only 00501 } 00502 } 00503 00504 _Touch = false; 00505 } |
|
Returns true if the object can use global lighting color. (example : 'lookat' particle do not have normals, so they use global lighting color instead Definition at line 103 of file ps_particle_basic.h. References NL3D::CPSParticle::_UsesGlobalColorLighting. Referenced by displayRibbons(), NL3D::CPSRibbonLookAt::displayRibbons(), NL3D::CPSRibbon::displayRibbons(), NL3D::CPSShockWave::draw(), NL3D::CPSDot::draw(), setupGlobalColor(), NL3D::CPSFanLight::setupMaterial(), NL3D::CPSRibbon::setupTexturedGlobalColor(), NL3D::CPSRibbon::setupUntexturedGlobalColor(), step(), NL3D::CPSRibbonLookAt::step(), NL3D::CPSRibbon::step(), NL3D::CPSQuad::updateMatBeforeRendering(), updateMaterial(), NL3D::CPSRibbon::updateTexturedMaterial(), and NL3D::CPSRibbon::updateUntexturedMaterial().
00103 { return _UsesGlobalColorLighting; }
|
|
Reimplemented in NL3D::CPSForce. Definition at line 986 of file ps_located.h. |
|
Definition at line 1033 of file ps_located.h. Referenced by NL3D::CPSLocatedBindable::isActive(), and NL3D::CPSLocatedBindable::setActive(). |
|
Definition at line 226 of file ps_particle_basic.h. |
|
Definition at line 62 of file ps_tail_dot.cpp. |
|
Definition at line 166 of file ps_tail_dot.h. |
|
Definition at line 228 of file ps_particle_basic.h. Referenced by NL3D::CPSFanLightHelper::drawFanLight(), NL3D::CPSConstraintMeshHelper::drawMeshs(), and NL3D::CPSConstraintMeshHelper::drawPrerotatedMeshs(). |
|
Definition at line 1027 of file ps_located.h. Referenced by NL3D::CPSLocatedBindable::getExternID(), NL3D::CPSLocatedBindable::setExternID(), and NL3D::CPSLocatedBindable::~CPSLocatedBindable(). |
|
Definition at line 63 of file ps_tail_dot.cpp. |
|
Definition at line 61 of file ps_tail_dot.cpp. |
|
Definition at line 169 of file ps_tail_dot.h. |
|
Definition at line 167 of file ps_tail_dot.h. |
|
Definition at line 168 of file ps_tail_dot.h. |
|
tells when this object must be dealt with
Definition at line 1029 of file ps_located.h. Referenced by NL3D::CPSLocatedBindable::getLOD(), and NL3D::CPSLocatedBindable::setLOD(). |
|
Definition at line 844 of file ps_particle_basic.h. Referenced by NL3D::CPSFaceHelper::drawFaces(), NL3D::CPSFanLightHelper::drawFanLight(), NL3D::CPSFaceLookAtHelper::drawLookAt(), and NL3D::CPSFaceLookAtHelper::drawLookAtAlignOnMotion(). |
|
Definition at line 1031 of file ps_located.h. |
|
|
|
|
Definition at line 102 of file ps_ribbon_base.h. Referenced by NL3D::CPSRibbonBase::getSegDuration(), NL3D::CPSRibbonBase::setSegDuration(), NL3D::CPSRibbonBase::updateGlobals(), and NL3D::CPSRibbonBase::updateLOD(). |
|
Definition at line 170 of file ps_tail_dot.h. |
|
value to use after lod computation
Definition at line 136 of file ps_ribbon_base.h. Referenced by NL3D::CPSRibbonBase::computeHermitteCstSizeRibbon(), NL3D::CPSRibbonBase::computeHermitteRibbon(), NL3D::CPSRibbonBase::computeLinearCstSizeRibbon(), NL3D::CPSRibbonBase::computeLinearRibbon(), and NL3D::CPSRibbonBase::updateLOD(). |
|
Definition at line 137 of file ps_ribbon_base.h. Referenced by NL3D::CPSRibbonBase::computeHermitteRibbon(), NL3D::CPSRibbonBase::computeLinearRibbon(), and NL3D::CPSRibbonBase::updateLOD(). |
|
Definition at line 138 of file ps_ribbon_base.h. Referenced by NL3D::CPSRibbonBase::computeHermitteCstSizeRibbon(), NL3D::CPSRibbonBase::computeLinearCstSizeRibbon(), and NL3D::CPSRibbonBase::updateLOD(). |
|
Definition at line 60 of file ps_tail_dot.cpp. |