mirror of
https://github.com/JulianGro/overte.git
synced 2025-08-20 12:46:18 +02:00
added array of finger emitters for particle system
This commit is contained in:
parent
408edc7dca
commit
56d0c7d7e4
5 changed files with 56 additions and 50 deletions
|
@ -174,7 +174,6 @@ Application::Application(int& argc, char** argv, timeval &startup_time) :
|
|||
_justStarted(true),
|
||||
_particleSystemInitialized(false),
|
||||
_coolDemoParticleEmitter(-1),
|
||||
_fingerParticleEmitter(-1),
|
||||
_wantToKillLocalVoxels(false),
|
||||
_frustumDrawingMode(FRUSTUM_DRAW_MODE_ALL),
|
||||
_viewFrustumOffsetYaw(-135.0),
|
||||
|
@ -210,6 +209,12 @@ Application::Application(int& argc, char** argv, timeval &startup_time) :
|
|||
_bytesCount(0),
|
||||
_swatch(NULL)
|
||||
{
|
||||
|
||||
// initialize all finger particle emitters with an invalid id as default
|
||||
for (int f = 0; f< NUM_FINGERS_PER_HAND; f ++ ) {
|
||||
_fingerParticleEmitter[f] = -1;
|
||||
}
|
||||
|
||||
_applicationStartupTime = startup_time;
|
||||
_window->setWindowTitle("Interface");
|
||||
printLog("Interface Startup:\n");
|
||||
|
@ -2042,8 +2047,7 @@ void Application::update(float deltaTime) {
|
|||
|
||||
// create a stable test emitter and spit out a bunch of particles
|
||||
_coolDemoParticleEmitter = _particleSystem.addEmitter();
|
||||
_fingerParticleEmitter = _particleSystem.addEmitter();
|
||||
|
||||
|
||||
if (_coolDemoParticleEmitter != -1) {
|
||||
_particleSystem.setShowingEmitter(_coolDemoParticleEmitter, true);
|
||||
glm::vec3 particleEmitterPosition = glm::vec3(5.0f, 1.0f, 5.0f);
|
||||
|
@ -2060,11 +2064,11 @@ void Application::update(float deltaTime) {
|
|||
_particleSystem.emitParticlesNow(_coolDemoParticleEmitter, 1500, radius, color, velocity, lifespan);
|
||||
}
|
||||
|
||||
if (_fingerParticleEmitter != -1) {
|
||||
_particleSystem.setShowingEmitter(_fingerParticleEmitter, false);
|
||||
for ( int f = 0; f< NUM_FINGERS_PER_HAND; f ++ ) {
|
||||
_fingerParticleEmitter[f] = _particleSystem.addEmitter();
|
||||
_particleSystem.setShowingEmitter(_fingerParticleEmitter[f], true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// signal that the particle system has been initialized
|
||||
_particleSystemInitialized = true;
|
||||
|
||||
|
@ -2073,11 +2077,9 @@ void Application::update(float deltaTime) {
|
|||
} else {
|
||||
// update the particle system
|
||||
|
||||
|
||||
static float t = 0.0f;
|
||||
t += deltaTime;
|
||||
|
||||
|
||||
if (_coolDemoParticleEmitter != -1) {
|
||||
|
||||
glm::vec3 tilt = glm::vec3
|
||||
|
@ -2090,40 +2092,35 @@ void Application::update(float deltaTime) {
|
|||
_particleSystem.setEmitterRotation(_coolDemoParticleEmitter, glm::quat(glm::radians(tilt)));
|
||||
}
|
||||
|
||||
if (_fingerParticleEmitter != -1) {
|
||||
|
||||
glm::vec3 particleEmitterPosition =
|
||||
glm::vec3
|
||||
(
|
||||
3.0f + sinf(t * 8.0f) * 0.02f,
|
||||
1.0f + cosf(t * 9.0f) * 0.02f,
|
||||
3.0f + sinf(t * 7.0f) * 0.02f
|
||||
);
|
||||
|
||||
|
||||
//_myAvatar.getHand().setLeapFingers(LeapManager::getFingerTips(), LeapManager::getFingerRoots());
|
||||
//_myAvatar.getHand().setLeapHands(LeapManager::getHandPositions(), LeapManager::getHandNormals());
|
||||
|
||||
|
||||
|
||||
|
||||
glm::vec3 tilt = glm::vec3
|
||||
(
|
||||
30.0f * sinf( t * 0.55f ),
|
||||
0.0f,
|
||||
30.0f * cosf( t * 0.75f )
|
||||
);
|
||||
|
||||
glm::quat particleEmitterRotation = glm::quat(glm::radians(tilt));
|
||||
const std::vector<glm::vec3>& fingerTips = _myAvatar.getHand().getFingerTips();
|
||||
const std::vector<glm::vec3>& fingerRoots = _myAvatar.getHand().getFingerRoots();
|
||||
const std::vector<glm::vec3>& handPositions = _myAvatar.getHand().getHandPositions();
|
||||
const std::vector<glm::vec3>& handNormals = _myAvatar.getHand().getHandNormals();
|
||||
|
||||
_particleSystem.setEmitterPosition(_fingerParticleEmitter, particleEmitterPosition);
|
||||
_particleSystem.setEmitterRotation(_fingerParticleEmitter, particleEmitterRotation);
|
||||
for ( int f = 0; f< fingerTips.size(); f ++ ) {
|
||||
|
||||
float radius = 0.01f;
|
||||
glm::vec4 color(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
glm::vec3 velocity(0.0f, 0.01f, 0.0f);
|
||||
float lifespan = 0.4f;
|
||||
_particleSystem.emitParticlesNow(_fingerParticleEmitter, 1, radius, color, velocity, lifespan);
|
||||
if (_fingerParticleEmitter[f] != -1) {
|
||||
|
||||
glm::vec3 particleEmitterPosition = _myAvatar.getHand().leapPositionToWorldPosition(fingerTips[f]);
|
||||
|
||||
glm::vec3 tilt = glm::vec3
|
||||
(
|
||||
30.0f * sinf( t * 0.55f ),
|
||||
0.0f,
|
||||
30.0f * cosf( t * 0.75f )
|
||||
);
|
||||
|
||||
glm::quat particleEmitterRotation = glm::quat(glm::radians(tilt));
|
||||
|
||||
_particleSystem.setEmitterPosition(_fingerParticleEmitter[0], particleEmitterPosition);
|
||||
_particleSystem.setEmitterRotation(_fingerParticleEmitter[0], particleEmitterRotation);
|
||||
|
||||
float radius = 0.01f;
|
||||
glm::vec4 color(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
glm::vec3 velocity(0.0f, 0.01f, 0.0f);
|
||||
float lifespan = 0.4f;
|
||||
_particleSystem.emitParticlesNow(_fingerParticleEmitter[0], 1, radius, color, velocity, lifespan);
|
||||
}
|
||||
}
|
||||
|
||||
_particleSystem.setUpDirection(glm::vec3(0.0f, 1.0f, 0.0f));
|
||||
|
|
|
@ -285,7 +285,7 @@ private:
|
|||
bool _justStarted;
|
||||
bool _particleSystemInitialized;
|
||||
int _coolDemoParticleEmitter;
|
||||
int _fingerParticleEmitter;
|
||||
int _fingerParticleEmitter[NUM_FINGERS_PER_HAND];
|
||||
|
||||
Stars _stars;
|
||||
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include <SharedUtil.h>
|
||||
#include <vector>
|
||||
|
||||
const int NUM_FINGERS_PER_HAND = 5;
|
||||
|
||||
class Avatar;
|
||||
class ProgramObject;
|
||||
|
|
0
interface/src/LeapManager.cpp
Executable file → Normal file
0
interface/src/LeapManager.cpp
Executable file → Normal file
|
@ -13,7 +13,6 @@
|
|||
|
||||
const float DEFAULT_PARTICLE_BOUNCE = 1.0f;
|
||||
const float DEFAULT_PARTICLE_AIR_FRICTION = 2.0f;
|
||||
const float DEFAULT_PARTICLE_GRAVITY = 0.05f;
|
||||
|
||||
ParticleSystem::ParticleSystem() {
|
||||
|
||||
|
@ -30,7 +29,7 @@ ParticleSystem::ParticleSystem() {
|
|||
_emitter[e].front = IDENTITY_FRONT;
|
||||
_emitter[e].bounce = DEFAULT_PARTICLE_BOUNCE;
|
||||
_emitter[e].airFriction = DEFAULT_PARTICLE_AIR_FRICTION;
|
||||
_emitter[e].gravity = DEFAULT_PARTICLE_GRAVITY;
|
||||
_emitter[e].gravity = 0.0f;
|
||||
_emitter[e].jitter = 0.0f;
|
||||
_emitter[e].emitterAttraction = 0.0f;
|
||||
_emitter[e].tornadoForce = 0.0f;
|
||||
|
@ -56,11 +55,20 @@ ParticleSystem::ParticleSystem() {
|
|||
|
||||
|
||||
int ParticleSystem::addEmitter() {
|
||||
|
||||
printf( "\n" );
|
||||
printf( "ParticleSystem::addEmitter\n" );
|
||||
|
||||
_numEmitters ++;
|
||||
|
||||
if (_numEmitters > MAX_EMITTERS) {
|
||||
|
||||
printf( "Oops! _numEmitters > MAX_EMITTERS... returning -1\n" );
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
printf( "ok, _numEmitters is %d,and the index of this newly added emitter is %d.\n", _numEmitters, _numEmitters-1 );
|
||||
|
||||
return _numEmitters - 1;
|
||||
}
|
||||
|
@ -153,13 +161,13 @@ void ParticleSystem::runSpecialEffectsTest(int e, float deltaTime) {
|
|||
|
||||
_timer += deltaTime;
|
||||
|
||||
_emitter[e].gravity = 0.0f + DEFAULT_PARTICLE_GRAVITY * sinf( _timer * 0.52f );
|
||||
_emitter[e].gravity = 0.0f + 0.05f * sinf( _timer * 0.52f );
|
||||
_emitter[e].airFriction = (DEFAULT_PARTICLE_AIR_FRICTION + 0.5f) + 2.0f * sinf( _timer * 0.32f );
|
||||
_emitter[e].jitter = 0.05f + 0.05f * sinf( _timer * 0.42f );
|
||||
_emitter[e].emitterAttraction = 0.015f + 0.015f * cosf( _timer * 0.6f );
|
||||
_emitter[e].tornadoForce = 0.0f + 0.03f * sinf( _timer * 0.7f );
|
||||
_emitter[e].neighborAttraction = 0.1f + 0.1f * cosf( _timer * 0.8f );
|
||||
_emitter[e].neighborRepulsion = 0.2f + 0.2f * sinf( _timer * 0.4f );
|
||||
_emitter[e].jitter = 0.05f + 0.05f * sinf( _timer * 0.42f );
|
||||
_emitter[e].emitterAttraction = 0.015f + 0.015f * cosf( _timer * 0.6f );
|
||||
_emitter[e].tornadoForce = 0.0f + 0.03f * sinf( _timer * 0.7f );
|
||||
_emitter[e].neighborAttraction = 0.1f + 0.1f * cosf( _timer * 0.8f );
|
||||
_emitter[e].neighborRepulsion = 0.2f + 0.2f * sinf( _timer * 0.4f );
|
||||
|
||||
if (_emitter[e].gravity < 0.0f) {
|
||||
_emitter[e].gravity = 0.0f;
|
||||
|
|
Loading…
Reference in a new issue