Up: gltools - an OpenGL based on-line graphics toolbox
Next: glmesh - Function Drawing on Simplex Meshes
Prev: glwin - A System Interface for OpenGL Applications


Subsections


glrnd - Rendering Volume Management

Revision: 2.32
Date: 2001/05/21 14:27:19
Author: Jürgen Fuhrmann, Hartmut Langmach


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.

Keyboard User Interface

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

Mouse interface

All actions can be performed with the left mouse button pressed down. Which action is performed depends on the state change mode. One can cycle through the state change mode using the next/prev keyboard keys. Wich state change mode is active, is shown in the window title.

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.

Graphical User Interface

When the MOTIF option is active during installation, a graphical user interface can be used with glrnd. See the documentation of glgui.

Imported packages

#ifndef GLRND_H
#define GLRND_H
#include "glwin.h"

Data Types

glRenderer

 
typedef struct glRendererStruct *glRenderer;

Hidden Data type which contains rendering data.

glrApplicationOption

 
#define GLR_MAX_APPLICATION_OPTIONS 10
typedef struct
{
char key[32];
int val;
} glrApplicationOption;

glRendererState

 
#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
this are the possible values for what_done

Constructors and Destructors

glrCreate

 
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.

glrDestroy

 
void glrDestroy(
glRenderer rnd
);

Destroy renderer (and corresponding window).

Setting/Getting Data

glrSetTitle

 
void glrSetTitle(
glRenderer rnd,
char *title
);

Set title.

glrReset

 
void glrReset(
glRenderer rnd
);

Reset to default all rotations etc.

glrSetVolume

 
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.

glrSetUserInfo

 
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

 
void glrGetPoint(
glRenderer rnd,
double *x, double *y, double *z
);
get intersection point of main planes

void glrGetPlane

 
void glrGetPlane(
glRenderer rnd,
double *a,
double *b,
double *c,
double *d
);

void glrSetPlane

 
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.

glrXSetPlane

 
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.

glrSetAxisName

 
void glrSetAxisName(
glRenderer rnd,
char dir, char *name
);

Set title.

glrSetAxisTics

 
void glrSetAxisTics(glRenderer rnd, char dir, int ntics, double *tics);

Set axis tics;

glrArrowList

 
int glrArrowList(glRenderer rnd);

Callbacks and Event Processing

glrDrawCallback

 
typedef void (*glrDrawCallback)(
glRenderer rnd,
void *data
);

Callback function for drawing data.

glRender

 
void glRender(
glRenderer rnd,
glrDrawCallback f,
void *data
);

void glRenderWithGUI(glRenderer rnd,
glrDrawCallback f,
void *info);

Render data with given callback function.

glrSetSecondaryCallback

 
void glrSetSecondaryCallback(glRenderer rnd,glrDrawCallback scb);

The user can call a secondary callback which e.g. calls a slave renderer.

glrSetInfoCallback

 
void glrSetInfoCallback(glRenderer rnd,glrDrawCallback info);

The user can draw information into the upper and right info areas.

glrDefaultInfoCallback

 
void glrDefaultInfoCallback(glRenderer rnd,void * thrash);

This is the default info callback, a user info callback can call this.

glrSetDataValid

 
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).

glrShowModel

 
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.

State file management

glrSaveState

 
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.

glrRestoreState

 
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.

glrSetStateFileNameStub

 
void glrSetStateFileNameStub(glRenderer rnd, char *name);

Key actions

glrKeyAction

 
typedef int (*glrKeyAction)(
glRenderer rnd,
int mask
);

glrRegisterKeyAction

 
void glrRegisterKeyAction(
glRenderer rnd,
int key,
glrKeyAction action,
char *help
);

Register key action callback routine

glrDumpHelpFile

 
void glrDumpHelpFile(glRenderer rnd);
Create help info for keys in LaTeX format

Frame dump

glrSetDumpFileNameStub

 
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.

glrSetDumpPixmapSize

 
void glrSetDumpPixmapSize(
glRenderer rnd,
int w,
int h
);

Set size of dump pixmap.

glrDumpNext

 
void glrDumpNext(
glRenderer rnd
);

Dump data when invoking glRender next time.

Graphical User Interface

glrGUI

 
typedef void (*glrGUI)(glRenderer rnd);

glrSetGUI

 
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.

glrGetRendererState

 
glRendererState glrGetRendererState(glRenderer rnd);

glrGetWindow

 
glWindow glrGetWindow(glRenderer rnd);

glrGetInfo

 
void *glrGetInfo(glRenderer rnd);

Application options

Application options could be set using a keyboard callback. Alternatively, a pulldown menu in the GUI is defined which contains all the application options. They should be used to interactively influence user data which are application specific.

glrSetApplicationOption

 
void glrSetApplicationOption(glRenderer rnd,char *key, int val);

glrGetApplicationOption

 
int glrGetApplicationOption(glRenderer rnd,char *key);

Obsolete functions

These functions are considered to be obsolete. They are still maintained for backward compatibility.

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.