28 static float bez_fact_lookup[13] = {
45 static float bez_fact(
int n)
47 Assert((n >= 0) && (n <= 12));
49 return bez_fact_lookup[
n];
77 for(idx=0; idx<_num_pts; idx++){
79 if(_pts[idx] != NULL){
86 #define COMB(_n, _k) (bez_fact(_n) / (bez_fact(_k) * bez_fact(_n - _k)))
90 float b = (
float)pow(u, (
float)k);
91 float c = (
float)pow(1.0
f - u, (
float)(n - k));
111 for(idx=0; idx<
num_pts; idx++){
113 bez_val =
BEZ(idx, num_pts-1, u);
138 inc = 1.0f / (
float)divs;
146 for(idx=1; idx<=divs; idx++){
160 for(idx=0; idx<
num_pts; idx++){
195 for(idx=0; idx<_num_pts; idx++){
196 Assert(_pts[idx] != NULL);
197 if(_pts[idx] != NULL){
200 Assert(_d_pts[idx] != NULL);
201 if(_d_pts[idx] != NULL){
210 float a = ( (2.0f * u * u *
u) - (3.0
f * u * u) + 1 );
211 float b = ( (-2.0f * u * u *
u) + (3.0
f * u * u) );
212 float c = ( (u * u *
u) - (2.0
f * u * u) +
u );
213 float d = ( (u * u *
u) - (u * u) );
235 float a = ( (6.0f * u *
u) - (6.0
f * u) );
236 float b = ( (-6.0f * u *
u) + (6.0
f * u) );
237 float c = ( (3.0f * u *
u) - (4.0
f * u) + 1 );
238 float d = ( (3.0f * u *
u) - (2.0
f * u) );
262 float inc = 1.0f / (
float)divs;
271 for(idx=0; idx<
num_pts-1; idx++){
282 for(s_idx=1; s_idx<divs * 2; s_idx++){
305 for(idx=0; idx<
num_pts; idx++){
void herm_render(int divs, color *c)
void bez_set_points(int _num_pts, vec3d *_pts[MAX_BEZ_PTS])
void herm_set_points(int _num_pts, vec3d *_pts[MAX_HERM_PTS], vec3d *_d_pts[MAX_HERM_PTS])
float BEZ(int k, int n, float u)
struct vec3d::@225::@227 xyz
void gr_set_color_fast(color *dst)
int g3_draw_line(vertex *p0, vertex *p1)
void vm_vec_add2(vec3d *dest, const vec3d *src)
void herm_get_point(vec3d *out, float u, int k)
GLboolean GLboolean GLboolean GLboolean a
void bez_get_point(vec3d *out, float u)
ubyte g3_rotate_vertex(vertex *dest, const vec3d *src)
void herm_get_deriv(vec3d *deriv, float u, int k)
void bez_render(int divs, color *c)
void vm_vec_copy_scale(vec3d *dest, const vec3d *src, float s)
vec3d d_pts[MAX_HERM_PTS]
GLboolean GLboolean GLboolean b
typedef float(SCP_EXT_CALLCONV *SCPTRACKIR_PFFLOATVOID)()
int g3_draw_sphere_ez(const vec3d *pnt, float rad)
void vm_vec_add(vec3d *dest, const vec3d *src0, const vec3d *src1)