泛型粒子系統的設計5 (轉)
:namespace prefix = o ns = "urn:schemas--com::office" />
// 一維向量隨機初始化器
template<
class _ParticleType,
class _RandGenerator,
class _RandDistribution
> class TUniformRanVec1Initializer {
protected:
typedef _ParticleType tParticle;
typedef _RandGenerator tGenerator;
typedef _RandDistribution tDistribution;
typedef boost::variate_generator< _RandGenerator, _RandDistribution > tVarGen;
// 數值生成器
tVarGen m_VGen;
public:
TUniformRandomVec1Initializer( void )
: m_VGen( tGenerator( 1 ), tDistribution() )
{}
// 設定種子
void Seed( boost::uint32_t nSeed ) {
m_VGen.engine().seed( nSeed );
}
// 設定分佈器
void SetDist( const tDistribution& Dist ) {
m_VGen.distribution() = Dist;
}
// 初始化
template< size_t nIndex >
void Action( tParticle& p ) {
p.Part< nIndex >().m_Value = m_VGen();
}
};
TUniformRandomVec1Initializer是一個一維隨機初始化器,它接受3個模板引數,_ParticleType用於指定所需要初始化的粒子型別,_RandGenerator用於指定隨機數生成器(詳細說明請參看Boost.Random的文件),_RandDistribution用於指定隨機數分佈器(詳細說明請參看Boost.Random的文件)。公共成員Seed用於設定隨機數生成器的種子,SetDist用於設定隨機數分佈器。
TUniformRandomVec2Initializer二維隨機初始化器,
TUniformRandomVec3Initializer三維隨機初始化器,
TUniformRandomVec4Initializer四維隨機初始化器,
TSphereRandomVec2XYInitializer三維XY平面圓形隨機初始化器,
TSphereRandomVec2XZInitializer三維XZ平面圓形隨機初始化器,
TSphereRandomVec2YZInitializer三維YZ平面圓形隨機初始化器,
的使用都與此類似,詳細使用請參看本文所附例程,詳細實現請參看本文所附及Boost.Random文件。
如果以上提到的內建初始化器中並沒有您需要的,那麼動手自定義一個初始化器也是一件非常輕鬆愉快的事情。
// 根據壽命修正退色因子
template<
class _ParticleType,
size_t nFadeIndex
> class TFixFadeByLifeInitializer {
protected:
typedef _ParticleType tParticle;
public:
// 執行初始化
template< size_t nIndex >
void Action( tParticle& p ) {
p.Part< nFadeIndex >().m_Value = 1.0 / p.Part< nIndex >().m_Value;
}
};
這裡我們自定義了一個根據初始壽命值修正退色因子的初始化器,它接受兩個模板引數,_ParticleType用於指定所需要初始化的粒子型別,nFadeIndex用於指定退色因子在粒子結構中的。
四、器
更新器和初始化器一樣也粒子重要的組成部分,每個更新器都必須有個一公共的帶有一個size_t型模板引數的Action成員函式,此函式接受一個從上次更新到現在的時間間隔作為引數,TParticleSystem將此函式對粒子進行更新,模板引數nIndex用於指定所需要更新的粒子部分。系統中內建了幾個常用的更新器:
// 空更新器
template<
class _ParticleType
> class TNilActor {
protected:
typedef _ParticleType tParticle;
public:
template< size_t nIndex >
void Action( const double&, tParticle& ) {
}
};
TNilActor是一個空更新器, 它有一個模板引數,_ParticleType用於指定所需要更新的粒子型別,如果指定其為某個粒子部分的更新器系統將不對此粒子部分進行更新動作。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10794571/viewspace-969590/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 泛型粒子系統的設計1 (轉)泛型
- 泛型粒子系統的設計2 (轉)泛型
- 泛型粒子系統的設計3 (轉)泛型
- 泛型粒子系統的設計4 (轉)泛型
- 泛型粒子系統的設計6 (轉)泛型
- 泛型粒子系統的設計7 (轉)泛型
- 泛型類及系統中常用的泛型類泛型
- .NET泛型程式設計簡介 (轉)泛型程式設計
- 泛型程式設計泛型程式設計
- 泛型最佳實踐:Go泛型設計者教你如何用泛型泛型Go
- java 泛型程式設計Java泛型程式設計
- [CUJ]泛型程式設計--轉移建構函式 (轉)泛型程式設計函式
- Windows系統上泛域名解析的設定(轉)Windows
- 十、GO程式設計模式 : 泛型程式設計Go程式設計設計模式泛型
- 談談 "JS 和 設計泛型"JS泛型
- 泛型程式設計詳解(一)泛型程式設計
- 泛型程式設計與 OI——modint泛型程式設計
- C#學習 [型別系統] 泛型(16)C#型別泛型
- Three.js進階篇之5 - 粒子系統JS
- hugo.elias專題 之 粒子系統 (轉)Go
- c++ 泛型 程式設計 之 Functor 設計模式C++泛型程式設計設計模式
- Kotlin語言中的泛型設計哲學Kotlin泛型
- Go泛型草案設計簡明指南Go泛型
- c++ 泛型程式設計 之 TypeListsC++泛型程式設計
- 泛型轉DataTable方法泛型
- 物件導向程式設計和`GP`泛型程式設計物件程式設計泛型
- Dart語法篇之型別系統與泛型(七)Dart型別泛型
- 使用 Go 泛型的函數語言程式設計Go泛型函數程式設計
- 泛型--泛型萬用字元和泛型的上下限泛型字元
- GO語言泛型程式設計實踐Go泛型程式設計
- 泛型程式設計在非C++語言中的實現之探討 (轉)泛型程式設計C++
- 轉向Kotlin——泛型Kotlin泛型
- Three.js開發指南(7):粒子和粒子系統JS
- 秒殺系統設計的5個要點
- Java泛型知識點:泛型類、泛型介面和泛型方法Java泛型
- 泛型類、泛型方法及泛型應用泛型
- 在C語言中實現泛型程式設計C語言泛型程式設計
- C語言如何實現泛型程式設計?C語言泛型程式設計