- For newtonian particles a "self effect" button in particle extras makes the particles be effected by themselves if a particle effector is defined for this system, currently this is a brute force method so things start getting slow with more than ~100 particles, but this will hopefully change in the future. - Two new effector types: charge and a Lennard-Jones potential based force (inter-molecular forces for example). -Charge is similar to spherical field except it changes behavior (attract/repulse) based on the effected particles charge field (negative/positive) like real particles with a charge. -The Lennard-Jones field is a very short range force with a behavior determined by the sizes of the effector and effected particle. At a distance smaller than the combined sizes the field is very repulsive and after that distance it's attractive. It tries to keep the particles at an equilibrium distance from each other. Particles need to be at a close proximity to each other to be effected by this field at all. - Particle systems can now have two effector fields (two slots in the fields panel). This allows to create particles which for example have both a charge and a Lennard-Jones potential.
77 lines
2.4 KiB
C++
77 lines
2.4 KiB
C++
/**
|
|
* blenlib/BKE_effect.h (mar-2001 nzc)
|
|
*
|
|
* $Id$
|
|
*
|
|
* ***** BEGIN GPL LICENSE BLOCK *****
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
*
|
|
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
|
* All rights reserved.
|
|
*
|
|
* The Original Code is: all of this file.
|
|
*
|
|
* Contributor(s): none yet.
|
|
*
|
|
* ***** END GPL LICENSE BLOCK *****
|
|
*/
|
|
#ifndef BKE_EFFECT_H
|
|
#define BKE_EFFECT_H
|
|
|
|
#include "DNA_object_types.h"
|
|
|
|
struct Effect;
|
|
struct ListBase;
|
|
struct Particle;
|
|
struct Group;
|
|
struct RNG;
|
|
|
|
typedef struct pEffectorCache {
|
|
struct pEffectorCache *next, *prev;
|
|
Object *ob;
|
|
|
|
/* precalculated variables */
|
|
float oldloc[3], oldspeed[3];
|
|
float scale, time_scale;
|
|
float guide_dist;
|
|
|
|
Object obcopy; /* for restoring transformation data */
|
|
} pEffectorCache;
|
|
|
|
void free_effect(struct Effect *eff);
|
|
void free_effects(struct ListBase *lb);
|
|
struct Effect *copy_effect(struct Effect *eff);
|
|
void copy_effects(struct ListBase *lbn, struct ListBase *lb);
|
|
void deselectall_eff(struct Object *ob);
|
|
|
|
/* particle deflector */
|
|
#define PE_WIND_AS_SPEED 0x00000001
|
|
|
|
struct PartEff *give_parteff(struct Object *ob);
|
|
struct ListBase *pdInitEffectors(struct Object *obsrc, struct Group *group);
|
|
void pdEndEffectors(struct ListBase *lb);
|
|
void pdDoEffectors(struct ListBase *lb, float *opco, float *force, float *speed, float cur_time, float loc_time, unsigned int flags);
|
|
|
|
/* required for particle_system.c */
|
|
void do_physical_effector(Object *ob, float *opco, short type, float force_val, float distance, float falloff, float size, float damp, float *eff_velocity, float *vec_to_part, float *velocity, float *field, int planar, struct RNG *rng, float noise_factor, float charge, float pa_size);
|
|
float effector_falloff(struct PartDeflect *pd, float *eff_velocity, float *vec_to_part);
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|