90 lines
1.9 KiB
C
90 lines
1.9 KiB
C
/*
|
|
* Simple trackball-like motion adapted (ripped off) from projtex.c
|
|
* (written by David Yu and David Blythe). See the SIGGRAPH '96
|
|
* Advanced OpenGL course notes.
|
|
*
|
|
*
|
|
* Usage:
|
|
*
|
|
* o call gltbInit() in before any other gltb call
|
|
* o call gltbReshape() from the reshape callback
|
|
* o call gltbMatrix() to get the trackball matrix rotation
|
|
* o call gltbStartMotion() to begin trackball movememt
|
|
* o call gltbStopMotion() to stop trackball movememt
|
|
* o call gltbMotion() from the motion callback
|
|
* o call gltbAnimate(GL_TRUE) if you want the trackball to continue
|
|
* spinning after the mouse button has been released
|
|
* o call gltbAnimate(GL_FALSE) if you want the trackball to stop
|
|
* spinning after the mouse button has been released
|
|
*
|
|
* Typical setup:
|
|
*
|
|
*
|
|
void
|
|
init(void)
|
|
{
|
|
gltbInit(GLUT_MIDDLE_BUTTON);
|
|
gltbAnimate(GL_TRUE);
|
|
. . .
|
|
}
|
|
|
|
void
|
|
reshape(int width, int height)
|
|
{
|
|
gltbReshape(width, height);
|
|
. . .
|
|
}
|
|
|
|
void
|
|
display(void)
|
|
{
|
|
glPushMatrix();
|
|
|
|
gltbMatrix();
|
|
. . . draw the scene . . .
|
|
|
|
glPopMatrix();
|
|
}
|
|
|
|
void
|
|
mouse(int button, int state, int x, int y)
|
|
{
|
|
gltbMouse(button, state, x, y);
|
|
. . .
|
|
}
|
|
|
|
void
|
|
motion(int x, int y)
|
|
{
|
|
gltbMotion(x, y);
|
|
. . .
|
|
}
|
|
|
|
int
|
|
main(int argc, char** argv)
|
|
{
|
|
. . .
|
|
init();
|
|
glutReshapeFunc(reshape);
|
|
glutDisplayFunc(display);
|
|
glutMouseFunc(mouse);
|
|
glutMotionFunc(motion);
|
|
. . .
|
|
}
|
|
***/
|
|
|
|
|
|
/* functions */
|
|
void tbInit(GLuint button);
|
|
|
|
void tbMatrix(void);
|
|
|
|
void tbReshape(int width, int height);
|
|
|
|
void tbMouse(int button, int state, int x, int y);
|
|
|
|
void tbMotion(int x, int y);
|
|
|
|
void tbAnimate(GLboolean animate);
|
|
|