85 lines
1.6 KiB
C
85 lines
1.6 KiB
C
#ifndef DEFINES_H
|
|
#define DEFINES_H
|
|
|
|
// Fixed Point
|
|
|
|
typedef int fix;
|
|
|
|
#define DB 16
|
|
#define FIX(x) ((x)<<DB) // int to fixed
|
|
#define FFIX(x) ((x)*(1<<DB)) // float to fixed
|
|
#define UNFIX(x) ((x)>>DB) // fixed to int
|
|
|
|
fix fmul(fix x, fix y) {
|
|
int64_t p = (int64_t)x * (int64_t)y;
|
|
return (int32_t)(p >> DB);
|
|
}
|
|
|
|
fix ffrac(fix f) {
|
|
return f & ((1 << DB) - 1);
|
|
}
|
|
|
|
float fixtof(fix f) {
|
|
return ((float)f)/(1<<DB);
|
|
}
|
|
|
|
|
|
// 64x64 simulation
|
|
|
|
#define W 64//29
|
|
#define H 64//19
|
|
#define ID(x, y) ((x) + (y) * W)
|
|
|
|
#define fH (float)H
|
|
#define MAX_X FIX(W - 1)
|
|
#define MAX_Y FIX(H - 1)
|
|
#define rdx FIX(H/2)
|
|
#define dx FFIX(1./(fH/2.))
|
|
#define dtRdx fmul(dt, rdx)
|
|
#define halfRdx rdx/2
|
|
#define alpha fmul(-ONE, fmul(dx, dx))
|
|
#define alphaHalfRdx fmul(alpha, halfRdx)
|
|
|
|
|
|
// 128x64 simulation
|
|
|
|
#define W2 128
|
|
#define ID2(x, y) ((x) + (y) * W2)
|
|
|
|
#define MAX_X2 FIX(W2 - 1)
|
|
|
|
|
|
// Global Defines
|
|
|
|
#define ONE FIX(1)
|
|
#define ONE_HALF ONE/2
|
|
#define dt FFIX(1./14.)
|
|
|
|
#define PREC_STEP FFIX(0.001)
|
|
|
|
#define swap(a, b) { fix *tmp=a; a=b; b=tmp; }
|
|
|
|
#define div tx
|
|
#define p ty
|
|
|
|
#define K_RESET KEY_DEL
|
|
#define K_PARAMS KEY_SHIFT
|
|
#define K_COLORS KEY_ALPHA
|
|
#define K_FPS KEY_MUL
|
|
#define K_HELP KEY_OPTN
|
|
|
|
fix radius = FIX(4);
|
|
fix dyeDiffusion = FFIX(0.999);
|
|
fix velDiffusion = FFIX(1);
|
|
fix dyeIntensity = FFIX(0.5);
|
|
fix velIntensity = FFIX(0.5);
|
|
const fix maxDyeIntensity = FIX(4);
|
|
fix emptyTreshold = FFIX(0.4);
|
|
fix saturateTreshold = FFIX(0.8);
|
|
int pressureIterations = 10;
|
|
|
|
fix *vx, *vy, *dye, *tx, *ty, *tz;
|
|
int addX, addY;
|
|
int currentView = 0; // 0 : simulation only, 1 : simulation + parameters, 2 : simulation + color settings
|
|
|
|
#endif // DEFINES_H
|