- if (moving) {\r
- zoom += (y - starty);\r
- rotate += (x - startx);\r
- startx = x;\r
- starty = y;\r
- glutPostRedisplay();\r
- }\r
- if (lightMoving0) {\r
- lightAngle0 += (x - lightStartX0)/40.0;\r
- lightHeight0 += (lightStartY0 - y)/20.0;\r
- lightStartX0 = x;\r
- lightStartY0 = y;\r
- glutPostRedisplay();\r
- }\r
- if (lightMoving1) {\r
- lightAngle1 += (x - lightStartX1)/40.0;\r
- lightHeight1 += (lightStartY1 - y)/20.0;\r
- lightStartX1 = x;\r
- lightStartY1 = y;\r
- glutPostRedisplay();\r
+ if ( buttonSelected == -1 ) return; // No button selected, no action\r
+\r
+ switch ( manipulateState ) {\r
+ case STATE_CAMERA_ROTATE_MOVE:\r
+ rotate += (x - startx);\r
+\r
+ if ( buttonSelected == GLUT_LEFT_BUTTON ) {\r
+ // w: rotate, h: zoom\r
+ zoom += (y - starty);\r
+ } else if ( buttonSelected == GLUT_MIDDLE_BUTTON ) {\r
+ // w: rotate, h: tilt\r
+ camAngle += (y - starty);\r
+ }\r
+\r
+ starty = y;\r
+ startx = x;\r
+\r
+ break;\r
+\r
+ case STATE_OBJECT_POSITION_SCALE:\r
+ //so.x, so.y, so.z\r
+ if ( buttonSelected == GLUT_LEFT_BUTTON ) {\r
+ // w: left/right, h: near/far\r
+ //sceneObjs[curObject].x += (x - startx)*leftrightFactor;\r
+ } else if ( buttonSelected == GLUT_MIDDLE_BUTTON ) {\r
+ // w: big/small, h: up/down\r
+\r
+ // For big/small scaling, we map negative numbers to 0->1 and positive numbers to 1->inf\r
+ float diff = (x - startx);\r
+ float scaling = ( diff + (float)height/bigsmallFactor ) / ( (float)height/bigsmallFactor );\r
+\r
+ sceneObjs[curObject].scale[0] *= scaling;\r
+ sceneObjs[curObject].scale[1] *= scaling;\r
+ sceneObjs[curObject].scale[2] *= scaling;\r
+ printf("Diff is %f, Scaling by %f on all axii, 1/map is %f\n", diff, sceneObjs[curObject].scale[0], scaling);\r
+ }\r
+\r
+ startx = x;\r
+ break;\r
+\r
+ case STATE_OBJECT_ROTATION_TEXTURE_SCALE:\r
+ if ( buttonSelected == GLUT_LEFT_BUTTON ) {\r
+ // w: rotate on width, h: rotate on h\r
+\r
+ } else if ( buttonSelected == GLUT_MIDDLE_BUTTON ) {\r
+ // w: rotate on height, h: texture scale\r
+ \r
+ }\r
+ break;\r
+\r