/* * 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 tbInit() in before any other tb call * o call tbReshape() from the reshape callback * o call tbMatrix() to get the trackball matrix rotation * o call tbStartMotion() to begin trackball movememt * o call tbStopMotion() to stop trackball movememt * o call tbMotion() from the motion callback * o call tbAnimate(GL_TRUE) if you want the trackball to continue * spinning after the mouse button has been released * o call tbAnimate(GL_FALSE) if you want the trackball to stop * spinning after the mouse button has been released * * Typical setup: * * void init(void) { tbInit(GLUT_MIDDLE_BUTTON); tbAnimate(GL_TRUE); . . . } void reshape(int width, int height) { tbReshape(width, height); . . . } void display(void) { glPushMatrix(); tbMatrix(); . . . draw the scene . . . glPopMatrix(); } void mouse(int button, int state, int x, int y) { tbMouse(button, state, x, y); . . . } void motion(int x, int y) { tbMotion(x, y); . . . } int main(int argc, char** argv) { . . . init(); glutReshapeFunc(reshape); glutDisplayFunc(display); glutMouseFunc(mouse); glutMotionFunc(motion); . . . } * * */ /* functions */ #ifdef __cplusplus extern "C" { #endif 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); #ifdef __cplusplus } #endif