Up: | gltools - an OpenGL based on-line graphics toolbox |
Next: | glmesh - Function Drawing on Simplex Meshes |
Prev: | glwin - A System Interface for OpenGL Applications |
glrnd provides a framework for rendering data in a given rectangular rendering volume and manages all transformations, intersection planes and light sources, so that actual rendering modules do not have to care about this stuff. It is controlled by the keyboard and the mouse.
The main key to know when working with glrnd is the state control key. It allows to toggle between application-controlled and user-controlled mode. If the window is in user-controlled state, by pressing the state control key together with the shift key, you give control back to the application only until the next invocation of glRender().
The following table may be incomplete. You can get the actual keyboard layout by pressing the help-Key.
glrnd key table, $Revision: 2.72 $ $Date: 2001/05/18 10:54:13 $ |
Backspace: Enter user control mode |
tab: toggle state change mode |
Return: Quit user control mode |
SPACE: Mode control |
+: Increase mouse sensitivity. |
,: decrease control parameter. |
-: Decrease mouse sensitivity. |
.: increase control parameter. |
<: Zoom out. |
>: Zoom in. |
?: This help. |
B: Toggle background color (black/white). |
d: Dump actual picture to ppm file (look for *-*.ppm) |
F: Toggle rendering volume frame (bounding box) drawing. |
I: Change number of isolines. |
.: increase control parameter by a factor. |
O: Toggle Ortho |
D: Print actual picture using ppm dump |
R: Reset to internal default. |
S: Save actual state (look for .*-rndstate) |
V: Start/Stop video recording |
a: Switch to GUI |
c: Toggle remembered lists |
g: Toggle Gouraud/flat shading. |
h: This help. |
i: Toggle isoline mode. |
,: decrease control parameter by a factor. |
l: Toggle level surface mode. |
m: Toggle model display when moving. |
p: Dump actual picture to eps file (look for *-*.eps) |
q: Mode control (Quit) |
r: Restore last saved state. |
v: Toggle vscale for plane sections |
w: toggle wireframe mode |
x: Show x orthogonal plane section. |
y: Show y orthogonal plane section. |
z: Show z orthogonal plane section. |
prev: toggle state change mode |
next: toggle state change mode |
left:move left |
up:move up |
right:move right |
down:move down |
Backspace: Enter user control mode |
Selected state change modes are bound to other mouse buttons and the combination of the shift key and a mouse button. Again, the information which mode is active when pressing a button is given in the window title.
#ifndef GLRND_H
#define GLRND_H
#include "glwin.h"
typedef struct glRendererStruct *glRenderer;
Hidden Data type which contains rendering data.
#define GLR_MAX_APPLICATION_OPTIONS 10
typedef struct
{
char key[32];
int val;
} glrApplicationOption;
#define GLR_MAX_OBJECTS 9
#define GLR_DIR_X 0
#define GLR_DIR_Y 1
#define GLR_DIR_Z 2
typedef struct glRendererStateStruct
{
double rotx; /*
rotation around x axis */
double roty; /*
rotation around y axis */
double rotz; /*
rotation around z axis */
double tranx; /*
translation in x direction */
double trany; /*
translation in y direction */
double tranz; /*
translation in z direction */
double vscale; /*
value scale [0.0-1.0] */
double zoom; /*
zoom factor */
double ctrl_prm; /*
control parameter for color scale */
double ctrl_fac; /*
control parameter for color scale */
int wireframe; /*
show data as wire frame */
int show_frame; /*
show frame */
int move_model; /*
switch on rendering when moving */
double asp;
int gouraud_shading; /*
use gouraud shading */
double sensitivity; /*
mouse sensitvity */
int bg_black; /*
background color black */
double ltx; /*
light position */
double lty; /*
light position */
double ltz; /*
light position */
double plane_d[3]; /*
depending on direction, between *min and *max */
double scale[3]; /*
scale factors for rendering volumes*/
int plane_dir; /*
plane direction (x orth/y orth z orth)*/
int level_surf; /*
show isolevel surfaces */
double level; /*
isolevel (between fmin and fmax)*/
int ortho; /*
orthogonal projection */
int what_done; /*
what has been changed last */
double isoline_distance; /*
distance between isolines - obsolete*/
int isoline_mode; /*
show isolines */
int show_object[GLR_MAX_OBJECTS+1]; /*
show remembered object list */
double min[3],max[3]; /*
renderer volume; read only! */
double fmin,fmax; /*
min,max of current function */
int transparency;
int spacedim;
int show_info;
glrApplicationOption options[GLR_MAX_APPLICATION_OPTIONS];
int noptions;
} *glRendererState;
This public structure is desinged to hold all state data which are necessary for the interaction with the renderer.
#define GLR_ROTATE 1
#define GLR_TRANSLATE 2
#define GLR_LIGHT 3
#define GLR_ISOLEVEL 5
#define GLR_PLANE 6
#define GLR_INPLANE 7
#define GLR_PLANE_ASPECT 8
#define GLR_INPLANE_ASPECT 9
#define GLR_N_DO 10
glRenderer glrCreate(
char *title,
int xpos,
int ypos,
int width,
int height
);
Create renderer. It also calls glwin to create a window with corresponding data.
void glrDestroy(
glRenderer rnd
);
Destroy renderer (and corresponding window).
void glrSetTitle(
glRenderer rnd,
char *title
);
Set title.
void glrReset(
glRenderer rnd
);
Reset to default all rotations etc.
void glrSetVolume(
glRenderer rnd,
double xmin,
double xmax,
double ymin,
double ymax,
double zmin,
double zmax
);
Define rendering volume. Everything drawn by the user function has to be placed within this volume to be visible.
void glrSetUserInfo(
glRenderer rnd,
char *user_info, /*
format string */
... /*
data according to user_info */
);
Set user information to be printed in the cooresponding field of the renderer.
void glrGetPoint(
glRenderer rnd,
double *x, double *y, double *z
);
void glrGetPlane(
glRenderer rnd,
double *a,
double *b,
double *c,
double *d
);
void glrSetPlane(
glRenderer rnd,
double a,
double b,
double c,
double d
);
Get/set data of intersection plane for 3D plane sections: the plane is defined by the equation
ax+by+cz+d=0
in the three-dimensional space.void glrXSetPlane(
glRenderer rnd,
int dir,
double val
);
Alternative way to set intersection plane data: dir denotes the direction ( 0 = x, 1=y, 2=z) the plane should be orthogonal to, and val denotes the distanze from zero.
void glrSetAxisName(
glRenderer rnd,
char dir, char *name
);
Set title.
void glrSetAxisTics(glRenderer rnd, char dir, int ntics, double *tics);
Set axis tics;
int glrArrowList(glRenderer rnd);
typedef void (*glrDrawCallback)(
glRenderer rnd,
void *data
);
Callback function for drawing data.
void glRender(
glRenderer rnd,
glrDrawCallback f,
void *data
);
void glRenderWithGUI(glRenderer rnd,
glrDrawCallback f,
void *info);
Render data with given callback function.
void glrSetSecondaryCallback(glRenderer rnd,glrDrawCallback scb);
The user can call a secondary callback which e.g. calls a slave renderer.
void glrSetInfoCallback(glRenderer rnd,glrDrawCallback info);
The user can draw information into the upper and right info areas.
void glrDefaultInfoCallback(glRenderer rnd,void * thrash);
This is the default info callback, a user info callback can call this.
void glrSetDataValid(
glRenderer rnd,
int valid
);
Tell renderer that all display lists it had compiled are still valid (for dumping and interaction with the GUI).
void glrShowModel(glRenderer rnd,int ishow);
Tell renderer that it should not draw the model. This function can be used by the gui code. On slow displays this may make sense.
void glrSaveState(glRenderer rnd, char *filename);
Save actual transformation state using a state file. A default filename is generated when the second parameter is zero.
void glrRestoreState(glRenderer rnd,char *filename);
Restore actual transformation state using a state file. A default filename is generated when the second parameter is zero.
void glrSetStateFileNameStub(glRenderer rnd, char *name);
typedef int (*glrKeyAction)(
glRenderer rnd,
int mask
);
void glrRegisterKeyAction(
glRenderer rnd,
int key,
glrKeyAction action,
char *help
);
Register key action callback routine
void glrDumpHelpFile(glRenderer rnd);
void glrSetDumpFileNameStub(
glRenderer rnd,
char *name
);
Set file name stub for data dump. Subsequent dumps get the corresponding number in the file name. The default name stub is derived from the title.
void glrSetDumpPixmapSize(
glRenderer rnd,
int w,
int h
);
Set size of dump pixmap.
void glrDumpNext(
glRenderer rnd
);
Dump data when invoking glRender next time.
typedef void (*glrGUI)(glRenderer rnd);
void glrSetGUI(glrGUI gui);
Bring up a graphical user interface. It should interact with the renderer via the state structure glRendererState (3.2.3) and the glrSetDataValid (3.5.6) call.
glRendererState glrGetRendererState(glRenderer rnd);
glWindow glrGetWindow(glRenderer rnd);
void *glrGetInfo(glRenderer rnd);
void glrSetApplicationOption(glRenderer rnd,char *key, int val);
int glrGetApplicationOption(glRenderer rnd,char *key);
void glrSetFlatshading(glRenderer rnd, int flat);
void glrGetFlatshading(glRenderer rnd,int *flat);
void glrGetVScale(glRenderer rnd,double* vscale);
void glrSetVScale(glRenderer rnd, double vscale);
void glrGetWireframe(glRenderer rnd, int *wireframe);
void glrGetLevelSurface(glRenderer rnd, int* mode);
void glrSetLevelSurface(glRenderer rnd,int mode);
void glrGetLevel(glRenderer rnd, double* lev);
void glrSetLevel(glRenderer rnd, double lev);
void glrGetIsolineMode(glRenderer rnd, int* mode);
void glrSetIsolineMode(glRenderer rnd,int mode);
void glrMoveWireframe(glRenderer rnd);
void glrMoveFrame(glRenderer rnd);
void glrMoveModel(glRenderer rnd);
void glrGetDialog(glRenderer rnd, int* dialog);
void glrSetDialog(glRenderer,int dialog);
typedef void (*glrDrawCallback2)(
glRenderer rnd,
void *data1,
void *data2
);
void glRender2(glRenderer rnd, glrDrawCallback2 f,
void *data1,void *data2);
int glrLoadFont(glRenderer rnd, int font_number, char *fontName);
void glrSelectFont(glRenderer rnd, int font_number);
void glrSetFontSize(glRenderer rnd, double font_size);
void glrPrint(glRenderer rnd, char *text);
void glrPrintf(glRenderer rnd, char *format, ...);
#endif
Up: | gltools - an OpenGL based on-line graphics toolbox |
Next: | glmesh - Function Drawing on Simplex Meshes |
Prev: | glwin - A System Interface for OpenGL Applications |
© pdelib team 5/21/2001. This page has been generated using the LaTeX typesetting system and latex2html.