mirror of
https://git.coom.tech/drummyfish/small3dlib.git
synced 2024-11-21 20:39:57 +01:00
Add interpolation helper
This commit is contained in:
parent
182ee3b65d
commit
c3a70d6f7e
1 changed files with 20 additions and 1 deletions
21
s3l.h
21
s3l.h
|
@ -48,6 +48,25 @@ typedef struct
|
||||||
int16_t minorDiff;
|
int16_t minorDiff;
|
||||||
} S3L_BresenhamState;
|
} S3L_BresenhamState;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns a value interpolated between the three triangle vertices based on
|
||||||
|
barycentric coordinates.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static inline S3L_Unit S3L_interpolateBarycentric(
|
||||||
|
S3L_Unit value0, S3L_Unit value1, S3L_Unit value2,
|
||||||
|
S3L_Unit barycentric0, S3L_Unit barycentric1, S3L_Unit barycentric2)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
(
|
||||||
|
(value0 * barycentric0) +
|
||||||
|
(value1 * barycentric1) +
|
||||||
|
(value2 * barycentric2)
|
||||||
|
) / S3L_FRACTIONS_PER_UNIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
// general helper functions:
|
||||||
|
|
||||||
static inline int16_t S3L_abs(int16_t value)
|
static inline int16_t S3L_abs(int16_t value)
|
||||||
{
|
{
|
||||||
return value >= 0 ? value : -1 * value;
|
return value >= 0 ? value : -1 * value;
|
||||||
|
@ -68,7 +87,7 @@ static inline S3L_Unit S3L_wrap(S3L_Unit value, S3L_Unit mod)
|
||||||
return value >= 0 ? (value % mod) : (mod + (value % mod) - 1);
|
return value >= 0 ? (value % mod) : (mod + (value % mod) - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline S3L_nonZero(S3L_Unit value)
|
static inline S3L_Unit S3L_nonZero(S3L_Unit value)
|
||||||
{
|
{
|
||||||
return value != 0 ? value : 1;
|
return value != 0 ? value : 1;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue