first commit
This commit is contained in:
165
CS4451/proj4/Input.cpp
Normal file
165
CS4451/proj4/Input.cpp
Normal file
@@ -0,0 +1,165 @@
|
||||
//#include <GL/glut.h>
|
||||
|
||||
#include "Input.h"
|
||||
#include "Renderer.h"
|
||||
#include "structs.h"
|
||||
#include "defs.h"
|
||||
|
||||
#include <math.h>
|
||||
|
||||
GLvoid menu ( int value ) {
|
||||
switch (value) {
|
||||
case MENU_SHADOWS:
|
||||
keyboard_event('a',0,0);
|
||||
break;
|
||||
case MENU_PRIMITIVES_ONLY:
|
||||
keyboard_event('p',0,0);
|
||||
break;
|
||||
case MENU_SHADOW_VOLUMES:
|
||||
keyboard_event('v',0,0);
|
||||
break;
|
||||
case MENU_CLEAR_WHITE:
|
||||
keyboard_event('x',0,0);
|
||||
break;
|
||||
case MENU_CLEAR_BLACK:
|
||||
keyboard_event('c',0,0);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
GLvoid keyboard_event(GLubyte key, GLint x, GLint y) {
|
||||
switch (key) {
|
||||
case 'w':
|
||||
*(Renderer::getInstance()->getViewAngle())-=.5;
|
||||
glutPostRedisplay();
|
||||
break;
|
||||
case 's':
|
||||
*(Renderer::getInstance()->getViewAngle())+=.5;
|
||||
glutPostRedisplay();
|
||||
break;
|
||||
case 'f':
|
||||
Renderer::getInstance()->backFaceCull = false;
|
||||
glCullFace(GL_FRONT);
|
||||
glutPostRedisplay();
|
||||
break;
|
||||
case 'b':
|
||||
Renderer::getInstance()->backFaceCull = true;
|
||||
glCullFace(GL_BACK);
|
||||
glutPostRedisplay();
|
||||
break;
|
||||
case 'p':
|
||||
Renderer::getInstance()->primitivesOnly = true;
|
||||
Renderer::getInstance()->drawShadows = false;
|
||||
glutPostRedisplay();
|
||||
break;
|
||||
case 'v':
|
||||
Renderer::getInstance()->drawShadows = false;
|
||||
Renderer::getInstance()->primitivesOnly = false;
|
||||
glutPostRedisplay();
|
||||
break;
|
||||
case 'a':
|
||||
Renderer::getInstance()->drawShadows = true;
|
||||
Renderer::getInstance()->primitivesOnly = false;
|
||||
glutPostRedisplay();
|
||||
break;
|
||||
case 'x':
|
||||
glClearColor(1,1,1,1.0);
|
||||
glutPostRedisplay();
|
||||
break;
|
||||
case 'c':
|
||||
glClearColor(0,0,0,1.0);
|
||||
glutPostRedisplay();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert screen coordinates to Trackball Coordinates
|
||||
*/
|
||||
inline void scalePoint(Point& p, GLint mx, GLint my) {
|
||||
m_int vpd = Renderer::getInstance()->getVPD();
|
||||
|
||||
//scale to -1 and 1
|
||||
float scale = ceil(vpd/2.);
|
||||
p.x = (mx / scale) -1.;
|
||||
p.y = (my / scale) -1.;
|
||||
p.y*=-1.; //handle reversed y
|
||||
|
||||
p.z = 1.-pow(p.x,2)-pow(p.y,2);
|
||||
|
||||
if (p.z < 0) {
|
||||
float under = sqrt((p.x*p.x)+(p.y*p.y));
|
||||
p.x /= under;
|
||||
p.y /= under;
|
||||
p.z = 0;
|
||||
} else {
|
||||
p.z = sqrt(p.z);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
GLvoid button_motion(GLint mx, GLint my) {
|
||||
Point scaledPoint;
|
||||
static Point oldPoint;
|
||||
|
||||
Light* light = Renderer::getInstance()->lights->front();
|
||||
|
||||
scalePoint(scaledPoint, mx, my);
|
||||
|
||||
|
||||
light->center.x = scaledPoint.x * Renderer::getInstance()->distanceToCenter.z;
|
||||
light->center.y = scaledPoint.y * Renderer::getInstance()->distanceToCenter.z;
|
||||
light->center.z = scaledPoint.z * Renderer::getInstance()->distanceToCenter.z;
|
||||
|
||||
if (Renderer::getInstance()->viewport.z - Renderer::getInstance()->l.z < 0) {
|
||||
light->center.y *= -1.;
|
||||
}
|
||||
|
||||
glutPostRedisplay();
|
||||
|
||||
}
|
||||
|
||||
GLvoid passive_motion(GLint mx, GLint my) {
|
||||
|
||||
}
|
||||
|
||||
GLvoid mouse_button(GLint btn, GLint state, GLint mx, GLint my) {
|
||||
|
||||
}
|
||||
|
||||
GLvoid keyboard_special_event(GLint key, GLint x, GLint y) {
|
||||
switch (key) {
|
||||
case GLUT_KEY_UP:
|
||||
Renderer::getInstance()->lights->front()->center.z+=.5;
|
||||
glutPostRedisplay();
|
||||
break;
|
||||
case GLUT_KEY_DOWN:
|
||||
Renderer::getInstance()->lights->front()->center.z-=.5;
|
||||
glutPostRedisplay();
|
||||
break;
|
||||
case GLUT_KEY_LEFT:
|
||||
Renderer::getInstance()->lights->front()->center.x+=.5;
|
||||
glutPostRedisplay();
|
||||
break;
|
||||
case GLUT_KEY_RIGHT:
|
||||
Renderer::getInstance()->lights->front()->center.x-=.5;
|
||||
glutPostRedisplay();
|
||||
break;
|
||||
case GLUT_KEY_PAGE_UP:
|
||||
Renderer::getInstance()->lights->front()->center.y+=.5;
|
||||
glutPostRedisplay();
|
||||
break;
|
||||
case GLUT_KEY_PAGE_DOWN:
|
||||
Renderer::getInstance()->lights->front()->center.y-=.5;
|
||||
glutPostRedisplay();
|
||||
break;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user