//----------------------------------------------------------------------- void PUSphereSurfaceEmitter::initParticleDirection(PUParticle3D* particle) { if (_autoDirection) { // The value of the direction vector that has been set does not have a meaning for // the sphere surface emitter. float angle = 0.0f; generateAngle(angle); if (angle != 0.0f) { //particle->direction = _randomVector.randomDeviant(angle, mUpVector); particle->direction = PUUtil::randomDeviant(_randomVector, angle, _upVector); particle->originalDirection = particle->direction; } else { particle->direction = _randomVector; particle->originalDirection = particle->direction; } } else { // Use the standard way PUEmitter::initParticleDirection(particle); } }
//----------------------------------------------------------------------- void PUCircleEmitter::initParticleDirection(PUParticle3D* particle) { if (_autoDirection) { // The value of the direction vector that has been set does not have a meaning for // the circle emitter. float angle = 0.0f; generateAngle(angle); if (angle != 0.0f) { //particle->direction = (mOrientation * Vec3(mX, 0, mZ) ).randomDeviant(angle, mUpVector); Mat4 mat; Mat4::createRotation(_orientation, &mat); Vec3 temp = mat * Vec3(_x, 0, _z); particle->direction = PUUtil::randomDeviant(temp, angle, _upVector); particle->originalDirection = particle->direction; } else { Mat4 rotMat; Mat4::createRotation(_orientation, &rotMat); particle->direction = rotMat * Vec3(_x, 0, _z); } } else { // Use the standard way PUEmitter::initParticleDirection(particle); } }
glm::vec3 Emitter::getInitialDirection() const { float angle = generateAngle(); //std::cerr << "angle:" << angle; if(angle != 0) { return create_deviating_vector(angle, current.direction); } return current.direction; }
void PUEmitter::initParticleDirection( PUParticle3D* particle ) { // Use the default way of initialising the particle direction float angle = 0.0f; generateAngle(angle); if (angle != 0.0f) { particle->direction = PUUtil::randomDeviant(_particleDirection, angle, _upVector); } else { particle->direction = _particleDirection; } particle->originalDirection = particle->direction; particle->originalDirectionLength = particle->direction.length(); }
glm::vec2 Mosquito::calculateNextMove(glm::vec2 nearestLightPos) { if (isCaught) { glm::vec2 dir = nearestLightPos - this->position; glm::vec2 newPos = this->position + 0.01f*dir; float random = static_cast <float> (rand()) / (static_cast <float> (RAND_MAX/(60))); float randomAngle = generateAngle(nearestLightPos, this->position) - 30 + random; float deltax = 2.0f * cos(randomAngle); float deltay = 2.0f * sin(randomAngle); float newx = newPos.x + deltax; float newy = newPos.y - deltay; return glm::vec2(newx, newy); } else { float randomAngle = generateRandomAngle(); float deltax = 2.0f * cos(randomAngle); float deltay = 2.0f * sin(randomAngle); float newx = this->position.x + deltax; float newy = this->position.y - deltay; return glm::vec2(newx,newy); } }
//----------------------------------------------------------------------- void PULineEmitter::initParticleDirection(PUParticle3D* particle) { if (_autoDirection) { float angle = 0.0f; generateAngle(angle); if (angle != 0.0f) { //particle->direction = _perpendicular.randomDeviant(angle, mUpVector); particle->direction = PUUtil::randomDeviant(_perpendicular, angle, _upVector); particle->originalDirection = particle->direction; } else { particle->direction = _perpendicular; particle->originalDirection = particle->direction; } } else { // Use the standard way PUEmitter::initParticleDirection(particle); } }
int ProxSense::readAngle() { update(); return generateAngle(); }