Files
TeslaRel410/sda4/DPL3/VRENDER/FITPLANS.C
T
CydandClaude Fable 5 db7745fcd0 sda4: commit the Glaze developer hard-drive dump
Un-ignored: the dev drive is the ground truth the restoration and
emulator work constantly reference (DPL3/LIBDPL + VRENDER i860 renderer
source, BT/RP live+dev game trees, VGL_LABS pod boot, scene/audio
content). Kept in-repo for the pod-owner community.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 19:41:15 -05:00

93 lines
1.6 KiB
C++

#define X0 0
#define Y0 1
#define X1 2
#define Y1 3
#define X2 4
#define Y2 5
#define X 0
#define Y 1
#define Z 2
#define W 3
#define MINAREA 1.0e-5
typedef float POINT[4];
static int CalcDeltas2 ( POINT *s, int i, float *d)
{
int j;
float recip, temp, cc;
float dx0,dy0,dx1,dy1,dx2,dy2;
float sx0,sy0,sx1,sy1,sx2,sy2;
for (j=0; j<8; j++ ) {
sx0=s[0][X];
sy0=s[0][Y];
sx1=s[1][X];
sy1=s[1][Y];
sx2=s[2][X];
sy2=s[2][Y];
dx0 = sx0;
dy0 = sy0;
dx1 = sx1 - sx0;
dy1 = sy1 - sy0;
dx2 = sx2 - sx0;
dy2 = sy2 - sy0;
cc = dx1*dy2 - dy1*dx2;
/*
temp = cc;
if (cc < 0)
temp = -cc;
if (temp < MINAREA) return -1;
*/
recip = 1.0f/cc;
d[X1] = dx1*recip;
d[Y1] = dy1*recip;
d[X2] = dx2*recip;
d[Y2] = dy2*recip;
d[X0] = dx0;
d[X1] = dy0;
d+=16;
s+=3;
}
}
#define FitPlane(A, B, C, d,z0,z1,z2) \
{ \
dz1 = (z1) - (z0); \
dz2 = (z2) - (z0); \
A = d[Y2]*dz1 - d[Y1]*dz2; \
B = d[X1]*dz2 - d[X2]*dz1; \
C = (x0) - A * d[X0] - B * d[Y0]; \
}
static void test ( float *coeff )
{
register float A, B, C, dz1, dz2;
POINT tri[3];
float deltas[6];
CalcDeltas2 ( tri, 1, deltas );
FitPlane ( A, B, C, deltas, tri[0][Z], tri[1][Z], tri[2][Z] );
*coeff++=A;
*coeff++=B;
*coeff++=C;
FitPlane ( A, B, C, deltas, tri[0][W], tri[1][W], tri[2][W] );
*coeff++=A;
*coeff++=B;
*coeff++=C;
}