home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 6
/
AACD06.ISO
/
AACD
/
System
/
Mesa-3.1
/
src-glu
/
nurbs.h
< prev
next >
Wrap
C/C++ Source or Header
|
1999-08-18
|
6KB
|
253 lines
/* $Id: nurbs.h,v 1.1.1.1 1999/08/19 00:55:42 jtg Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.1
* Copyright (C) 1995-1999 Brian Paul
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library 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
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* $Log: nurbs.h,v $
* Revision 1.1.1.1 1999/08/19 00:55:42 jtg
* Imported sources
*
* Revision 1.5 1999/02/27 13:55:31 brianp
* fixed BeOS-related GLU typedef problems
*
* Revision 1.4 1999/01/03 03:23:15 brianp
* now using GLAPIENTRY and GLCALLBACK keywords (Ted Jump)
*
* Revision 1.3 1997/05/27 03:18:23 brianp
* minor clean-up
*
* Revision 1.2 1997/05/27 03:00:16 brianp
* incorporated Bogdan's new NURBS code
*
* Revision 1.1 1996/09/27 01:19:39 brianp
* Initial revision
*
*/
/*
* NURBS implementation written by Bogdan Sikorski (bogdan@cira.it)
* See README2 for more info.
*/
#ifndef NURBS_H
#define NURBS_H
#define EPSILON 1e-06 /* epsilon for double precision compares */
typedef enum
{
GLU_NURBS_CURVE, GLU_NURBS_SURFACE, GLU_NURBS_TRIM, GLU_NURBS_NO_TRIM,
GLU_NURBS_TRIM_DONE, GLU_NURBS_NONE
} GLU_nurbs_enum;
typedef enum
{
GLU_TRIM_NURBS, GLU_TRIM_PWL
} GLU_trim_enum;
typedef struct
{
GLint sknot_count;
GLfloat *sknot;
GLint tknot_count;
GLfloat *tknot;
GLint s_stride;
GLint t_stride;
GLfloat *ctrlarray;
GLint sorder;
GLint torder;
GLint dim;
GLenum type;
} surface_attribs;
typedef struct
{
surface_attribs geom;
surface_attribs color;
surface_attribs texture;
surface_attribs normal;
} nurbs_surface;
typedef struct
{
GLint knot_count;
GLfloat *knot;
GLint stride;
GLfloat *ctrlarray;
GLint order;
GLint dim;
GLenum type;
} curve_attribs;
typedef struct
{
GLint pt_count;
GLfloat *ctrlarray;
GLint stride;
GLint dim;
GLenum type;
} pwl_curve_attribs;
typedef struct
{
curve_attribs geom;
curve_attribs color;
curve_attribs texture;
curve_attribs normal;
} nurbs_curve;
typedef struct trim_list_str
{
GLU_trim_enum trim_type;
union
{
pwl_curve_attribs pwl_curve;
curve_attribs nurbs_curve;
} curve;
struct trim_list_str *next;
} trim_list;
typedef struct seg_trim_str
{
GLfloat *points;
GLint pt_cnt,seg_array_len;
struct seg_trim_str *next;
} trim_segments;
typedef struct nurbs_trim_str
{
trim_list *trim_loop;
trim_segments *segments;
struct nurbs_trim_str *next;
} nurbs_trim;
typedef struct
{
GLfloat model[16],proj[16],viewport[4];
} culling_and_sampling_str;
struct GLUnurbs {
GLboolean culling;
GLenum error;
void (GLCALLBACK *error_callback)( GLenum err );
GLenum display_mode;
GLU_nurbs_enum nurbs_type;
GLboolean auto_load_matrix;
culling_and_sampling_str
sampling_matrices;
GLenum sampling_method;
GLfloat sampling_tolerance;
GLfloat parametric_tolerance;
GLint u_step, v_step;
nurbs_surface surface;
nurbs_curve curve;
nurbs_trim *trim;
};
typedef struct
{
GLfloat *knot;
GLint nknots;
GLfloat *unified_knot;
GLint unified_nknots;
GLint order;
GLint t_min,t_max;
GLint delta_nknots;
GLboolean open_at_begin,open_at_end;
GLfloat *new_knot;
GLfloat *alpha;
} knot_str_type;
typedef struct
{
GLfloat *geom_ctrl;
GLint geom_s_stride,geom_t_stride;
GLfloat **geom_offsets;
GLint geom_s_pt_cnt,geom_t_pt_cnt;
GLfloat *color_ctrl;
GLint color_s_stride,color_t_stride;
GLfloat **color_offsets;
GLint color_s_pt_cnt,color_t_pt_cnt;
GLfloat *normal_ctrl;
GLint normal_s_stride,normal_t_stride;
GLfloat **normal_offsets;
GLint normal_s_pt_cnt,normal_t_pt_cnt;
GLfloat *texture_ctrl;
GLint texture_s_stride,texture_t_stride;
GLfloat **texture_offsets;
GLint texture_s_pt_cnt,texture_t_pt_cnt;
GLint s_bezier_cnt,t_bezier_cnt;
} new_ctrl_type;
extern void call_user_error( GLUnurbsObj *nobj, GLenum error );
extern GLenum test_knot(GLint nknots, GLfloat *knot, GLint order);
extern GLenum explode_knot(knot_str_type *the_knot);
extern GLenum calc_alphas(knot_str_type *the_knot);
extern GLenum calc_new_ctrl_pts(GLfloat *ctrl,GLint stride,knot_str_type *the_knot,
GLint dim,GLfloat **new_ctrl,GLint *ncontrol);
extern GLenum glu_do_sampling_crv(GLUnurbsObj *nobj, GLfloat *new_ctrl,GLint n_ctrl,
GLint order,GLint dim,GLint **factors);
extern GLenum glu_do_sampling_3D(GLUnurbsObj *nobj, new_ctrl_type *new_ctrl,
int **sfactors, GLint **tfactors);
extern GLenum glu_do_sampling_uv(GLUnurbsObj *nobj, new_ctrl_type *new_ctrl,
int **sfactors, GLint **tfactors);
extern GLenum glu_do_sampling_param_3D(GLUnurbsObj *nobj, new_ctrl_type *new_ctrl,
int **sfactors, GLint **tfactors);
extern GLboolean fine_culling_test_2D(GLUnurbsObj *nobj, GLfloat *ctrl, GLint n_ctrl,
GLint stride, GLint dim);
extern GLboolean fine_culling_test_3D(GLUnurbsObj *nobj, GLfloat *ctrl,
GLint s_n_ctrl, GLint t_n_ctrl, GLint s_stride, GLint t_stride, GLint dim);
extern void do_nurbs_curve( GLUnurbsObj *nobj);
extern void do_nurbs_surface( GLUnurbsObj *nobj);
extern GLenum patch_trimming(GLUnurbsObj *nobj,new_ctrl_type *new_ctrl,
GLint *sfactors, GLint *tfactors);
extern void collect_unified_knot(knot_str_type *dest, knot_str_type *src,
GLfloat maximal_min_knot, GLfloat minimal_max_knot);
extern GLenum select_knot_working_range(GLUnurbsObj *nobj,knot_str_type *geom_knot,
knot_str_type *color_knot, knot_str_type *normal_knot,
knot_str_type *texture_knot);
extern void free_unified_knots(knot_str_type *geom_knot, knot_str_type *color_knot,
knot_str_type *normal_knot, knot_str_type *texture_knot);
#endif