interactive

interactive — Gives tools to interact with the rendered area.

Synopsis

                    VisuInteractive;
enum                SpecialKeyStroke;

Description

When one wants some interactions on the rendering area (either from the mouse or from the keyboard), one should initialise it using openGLInteractiveInit_session(). Then, during the interactive session, several modes have been implemented:

The observe mode has two different moving algorithms that can be changed using openGLInteractiveSet_preferedObserveMethod(). The first, called 'constrained' (cf. OPENGL_OBSERVE_CONSTRAINED) corresponds to movements along parallels and meridians. When the mouse is moved along x axis, the camera raotates along a parallel. When the camera is moved along y axis, the camera rotate along a meridian. The top is always pointing to the north pole (in fact, omega is always forced to 0 in this mode). This mode has a 'strange' behavior when the observer is near a pole: moving mouse along x axis make the box rotates on itself. It is normal, because movements on x axis is equivalent to movements on parallel and near the poles, parallel are small circle around the z axis. This can be unnatural in some occasion and the other mode, called 'walker' (see OPENGL_OBSERVE_WALKER) can be used instead of the 'constrained' mode. In the former, the moving is done has if the observer was a walking ant on a sphere : moving the mouse along y axis makes the ant go on or forward ; and x axis movements makes the ant goes on its left or on it right. This is a more natural way to move the box but it has the inconvient that it is hard to return in a given position (omega has never the right value).

Details

VisuInteractive

typedef struct _VisuInteractive VisuInteractive;

All fields are private.


enum SpecialKeyStroke

typedef enum
  {
    Key_None,
    Key_Page_Up,
    Key_Page_Down,
    Key_Arrow_Left,
    Key_Arrow_Right,
    Key_Arrow_Up,
    Key_Arrow_Down
  } SpecialKeyStroke;

Possible non ascii keys used in SimplifiedEvents.

Key_None

no key pressed ;

Key_Page_Up

key up ;

Key_Page_Down

key down ;

Key_Arrow_Left

key left ;

Key_Arrow_Right

key right ;

Key_Arrow_Up

key up ;

Key_Arrow_Down

key down.