void OnTimer(int value) { // Move the camera using user input if (keyIsDown('a')) { vec3 dir = VectorSub(targetPos, cameraPos); vec3 right_vec = CrossProduct(dir, upVector); right_vec = Normalize(right_vec); cameraPos = VectorSub(cameraPos, right_vec); targetPos = VectorSub(targetPos, right_vec); } else if (keyIsDown('d')) { vec3 dir = VectorSub(targetPos, cameraPos); vec3 right_vec = CrossProduct(dir, upVector); right_vec = Normalize(right_vec); cameraPos = VectorAdd(cameraPos, right_vec); targetPos = VectorAdd(targetPos, right_vec); } if (keyIsDown('w')) { vec3 dir = VectorSub(targetPos, cameraPos); dir = Normalize(dir); cameraPos = VectorAdd(cameraPos, dir); targetPos = VectorAdd(targetPos, dir); } if (keyIsDown('s')) { vec3 dir = VectorSub(targetPos, cameraPos); dir = Normalize(dir); cameraPos = VectorSub(cameraPos, dir); targetPos = VectorSub(targetPos, dir); } glutPostRedisplay(); glutTimerFunc(20, &OnTimer, value); }
void check_keys(void){ VectorSub(&obj_pos, &cam_pos, &vdiff); if(keyIsDown('w')){ ScalarMult(&vdiff, move_speed, &vdiff); Normalize(&vdiff); VectorAdd(&vdiff, &cam_pos, &cam_pos); VectorAdd(&vdiff, &obj_pos, &obj_pos); } else if (keyIsDown('s')) { ScalarMult(&vdiff, move_speed, &vdiff); Normalize(&vdiff); VectorSub(&cam_pos, &vdiff, &cam_pos); VectorSub(&obj_pos, &vdiff, &obj_pos); } else if (keyIsDown('a')) { CrossProduct(&up, &vdiff, &vdiff); Normalize(&vdiff); ScalarMult(&vdiff, move_speed, &vdiff); VectorAdd(&vdiff, &cam_pos, &cam_pos); VectorAdd(&vdiff, &obj_pos, &obj_pos); } else if (keyIsDown('d')) { CrossProduct(&up, &vdiff, &vdiff); Normalize(&vdiff); ScalarMult(&vdiff, move_speed, &vdiff); VectorSub(&cam_pos, &vdiff, &cam_pos); VectorSub(&obj_pos, &vdiff, &obj_pos); } else if (keyIsDown('u')) { cam_pos.y += 0.1; obj_pos.y += 0.1; } else if (keyIsDown('j')) { cam_pos.y -= 0.1; obj_pos.y -= 0.1; } else if (keyIsDown('r')) { if(dr < 80){ dr += 0.5; } } else if (keyIsDown('t')) { if(dr > -80){ dr -= 0.5; } } else if (keyIsDown('q')) { exit(0); } }
void checkKeyDowns() { if (keyIsDown('d')) { vec3 lp = VectorSub(l,p); vec3 dir = CrossProduct(v, lp); p = VectorSub(p, ScalarMult(Normalize(dir), 0.1)); l = VectorSub(l, ScalarMult(Normalize(dir), 0.1)); } if (keyIsDown('a')) { vec3 lp = VectorSub(l,p); vec3 dir = CrossProduct(lp, v); p = VectorSub(p, ScalarMult(Normalize(dir), 0.1)); l = VectorSub(l, ScalarMult(Normalize(dir), 0.1)); } if (keyIsDown('s')) { vec3 lp = VectorSub(l,p); p = VectorSub(p, ScalarMult(Normalize(lp), 0.1)); l = VectorSub(l, ScalarMult(Normalize(lp), 0.1)); } if (keyIsDown('w')) { vec3 lp = VectorSub(l,p); p = VectorAdd(p, ScalarMult(Normalize(lp), 0.1)); l = VectorAdd(l, ScalarMult(Normalize(lp), 0.1)); } if (keyIsDown('r')) { vec3 lp = VectorSub(l,p); vec3 dir = CrossProduct(v, lp); l = VectorSub(l, ScalarMult(Normalize(dir), 0.5)); } if (keyIsDown('e')) { vec3 lp = VectorSub(l,p); vec3 dir = CrossProduct(v, lp); l = VectorAdd(l, ScalarMult(Normalize(dir), 0.5)); } /* float y1 = ttex.imageData[((int)p.x + (int)p.z * ttex.width) * (ttex.bpp/8)] / 25.0; float y2 = ttex.imageData[(((int)p.x + 1) + ((int)p.z + 1) * ttex.width) * (ttex.bpp/8)] / 25.0; float diff = ((p.x - (int)p.x) + (p.z - (int)p.z))/2; float yDiff = y2-y1; float y = y1 + diff * yDiff + 5; p.y = y; l.y = y; */ //printf("X : %4.2f - Y : %4.2f - Z : %4.2f\n", p.x, p.y, p.z); }
void OnTimer(int value) { xModify = 0.0; zModify = 0.0; if (keyIsDown('w')){ zModify = -0.08; } if (keyIsDown('s')){ zModify = 0.08; } if (keyIsDown('a')){ xModify = -0.08; } if (keyIsDown('d')){ xModify = 0.08; } xValue += xModify; zValue += zModify; glutPostRedisplay(); glutTimerFunc(20, &OnTimer, value); }
void check_keys(void){ VectorSub(&obj_pos, &cam_pos, &vdiff); if(!fly){ vdiff.y = 0; } if(keyIsDown('w')){ ScalarMult(&vdiff, move_speed, &vdiff); Normalize(&vdiff); VectorAdd(&vdiff, &cam_pos, &cam_pos); if(!fly){ cam_pos.y = calculate_height(cam_pos.x, cam_pos.z, ttex.width, vertexArray) + cam_height; } VectorAdd(&vdiff, &obj_pos, &obj_pos); } else if (keyIsDown('s')) { ScalarMult(&vdiff, move_speed, &vdiff); Normalize(&vdiff); VectorSub(&cam_pos, &vdiff, &cam_pos); if(!fly){ cam_pos.y = calculate_height(cam_pos.x, cam_pos.z, ttex.width, vertexArray) + cam_height; } VectorSub(&obj_pos, &vdiff, &obj_pos); } else if (keyIsDown('a')) { CrossProduct(&up, &vdiff, &vdiff); Normalize(&vdiff); ScalarMult(&vdiff, move_speed, &vdiff); VectorAdd(&vdiff, &cam_pos, &cam_pos); if(!fly){ cam_pos.y = calculate_height(cam_pos.x, cam_pos.z, ttex.width, vertexArray) + cam_height; } VectorAdd(&vdiff, &obj_pos, &obj_pos); } else if (keyIsDown('d')) { CrossProduct(&up, &vdiff, &vdiff); Normalize(&vdiff); ScalarMult(&vdiff, move_speed, &vdiff); VectorSub(&cam_pos, &vdiff, &cam_pos); if(!fly){ cam_pos.y = calculate_height(cam_pos.x, cam_pos.z, ttex.width, vertexArray) + cam_height; } VectorSub(&obj_pos, &vdiff, &obj_pos); } else if (keyIsDown('q')) { exit(0); } else if (keyIsDown('p')) { printf("Your position is; x=%f, y=%f, z=%f\n", cam_pos.x, cam_pos.y, cam_pos.z); printf("Ground height is; y=%f\n", calculate_height(cam_pos.x, cam_pos.z, ttex.width, vertexArray)); } else if (keyIsDown('f')){ fly = !fly; } }
void checkKeyDowns() { if (keyIsDown('d')) { vec3 lp = VectorSub(l,p); vec3 dir = CrossProduct(v, lp); p = VectorSub(p, Normalize(dir)); l = VectorSub(l, Normalize(dir)); } if (keyIsDown('a')) { vec3 lp = VectorSub(l,p); vec3 dir = CrossProduct(lp, v); p = VectorSub(p, Normalize(dir)); l = VectorSub(l, Normalize(dir)); } if (keyIsDown('s')) { vec3 lp = VectorSub(l,p); p = VectorSub(p, Normalize(lp)); l = VectorSub(l, Normalize(lp)); } if (keyIsDown('w')) { vec3 lp = VectorSub(l,p); p = VectorAdd(p, Normalize(lp)); l = VectorAdd(l, Normalize(lp)); } if (keyIsDown('r')) { vec3 lp = VectorSub(l,p); vec3 dir = CrossProduct(v, lp); l = VectorSub(l, Normalize(dir)); } if (keyIsDown('e')) { vec3 lp = VectorSub(l,p); vec3 dir = CrossProduct(v, lp); l = VectorAdd(l, Normalize(dir)); } //printf("X : %4.2f - Y : %4.2f - Z : %4.2f\n", p.x, p.y, p.z); }
void check_keyboard() { if(keyIsDown('q')) { exit(0); } else if(keyIsDown('w')) { cam_pos.z -= 1.0; } else if(keyIsDown('s')) { cam_pos.z += 1.0; } else if(keyIsDown('a')) { cam_pos.x -= 1.0; } else if(keyIsDown('d')) { cam_pos.x += 1.0; } else if(keyIsDown('u')) { cam_pos.x = 0; cam_pos.y = 0; cam_pos.z = 1; } }
void OnTimer(int value) { glutTimerFunc(20, &OnTimer, value); old_t = t; t = (GLfloat)glutGet(GLUT_ELAPSED_TIME)/1000.0; delta_t = (t - old_t); //printf("%f\n", delta_t); GLfloat tmpppp[3] = {cow.pos.x, cow.pos.y, cow.pos.z}; glUniform3fv(glGetUniformLocation(g_shader, "cow_pos"), 1, tmpppp); turn_cow(&cow, -m_angle); update_cow(&cow, delta_t); update_fence(&ff, &cow, delta_t); move_cow(&cow, m_angle); update_floor(&f, &cow); update_wall(&wall, &cow, delta_t); update_ball(&ball, &cow, delta_t); update_farmer(&farmer); if(keyIsDown('k')) update_ragdoll(&ragdoll, delta_t); if(check_collision_2(&cow.bb, &wall.bb)) { //printf("yey\n"); glUniform1i(glGetUniformLocation(g_shader, "collision"), 1); //cow.momentum = SetVector(-cow.momentum.x, cow.momentum.y, -cow.momentum.z); //wall_collision(wall, cow); } else glUniform1i(glGetUniformLocation(g_shader, "collision"), 0); //printf("%f, %f\n", delta_t, old_t); glUniform1f(glGetUniformLocation(g_shader, "time"), t); mat4 proj_matrix = frustum(-1, 1, -1, 1, 1, 750.0); mat4 cam_matrix = lookAt(cam_dist*cos(m_angle)+cow.pos.x, 9+cow.pos.y, cam_dist*sin(m_angle)+cow.pos.z, cow.pos.x, 8.5+cow.pos.y, cow.pos.z, 0.0, 1.0, 0.0); //mat4 cam_matrix = lookAt(200+200*cos(cam_angle), 0, 200, 0, 8, 0, 0.0, 1.0, 0.0); //g_shader = loadShaders("shader.vert" , "shader.frag"); //glUseProgram(g_shader); glUniformMatrix4fv(glGetUniformLocation(g_shader, "proj_matrix"), 1, GL_TRUE, proj_matrix.m); glUniformMatrix4fv(glGetUniformLocation(g_shader, "cam_matrix"), 1, GL_TRUE, cam_matrix.m); //glutDisplayFunc(DisplayWindow); //draw_cow(&cow, g_shader); //draw_bone(&bone, g_shader); mat4 tmp, testjoint, testjoint2; testjoint = IdentityMatrix(); joint_s * j = &head_joint[0]; joint_s * jc = j->child[0]; joint_s * jcc = jc->child[0]; //joint_s * jp = j->parent; //joint_s * jpp = jp->parent; float Ms[8][4*4]; float legMs[8][4*4]; float currpos[8*3] = {0}; float bonepos[8*3] = {0}; float legcurrpos[8*3] = {0}; float legbonepos[8*3] = {0}; //GLfloat * Mtmp = Ms; int i=0, ii=0; //jc->R = ArbRotate(SetVector(0,0,1), cos(4*t/(i+1))/2.5); //j->R = ArbRotate(SetVector(0,0,1), 0); j->R = ArbRotate(SetVector(0,0,1), sin(4*t/(3+1))/1.2); //jcc->R = ArbRotate(SetVector(0,0,1), cos(8*t/(2+1))/4); mat4 Mpacc, Minvacc, tmptrans, tmppp, invtrans; tmppp = IdentityMatrix(); float freq = 7;//Norm(cow.speed)/4; if(Norm(cow.momentum) < .5) freq = 0; else if(Norm(cow.momentum) > 5) freq = 20; //printf("%f\n", freq); j = &thigh_joint[0]; jc = j->child[0]; j->R = ArbRotate(SetVector(0,0,1), sin(freq*t)/1.5); jc->R = ArbRotate(SetVector(0,0,1), cos(freq*t)/2.5); j = &thigh_joint[1]; jc = j->child[0]; j->R = ArbRotate(SetVector(0,0,1), -cos(freq*t)/2.5); jc->R = ArbRotate(SetVector(0,0,1), sin(freq*t)/2.5); j = &thigh_joint[2]; jc = j->child[0]; j->R = ArbRotate(SetVector(0,0,1), sin(freq*t)/1.5); jc->R = ArbRotate(SetVector(0,0,1), cos(freq*t)/2.5); j = &thigh_joint[3]; jc = j->child[0]; j->R = ArbRotate(SetVector(0,0,1), -cos(freq*t)/2.5); jc->R = ArbRotate(SetVector(0,0,1), sin(freq*t)/2.5); j = &legbase_joint[0]; //j->R = ArbRotate(SetVector(1,0,0), -cos(7*t/(i+1))); //j->R = ArbRotate(SetVector(1,0,0), -M_PI/6); j = &thigh_joint[0]; //j->R = Mult(ArbRotate(SetVector(1,0,0), cos(7*t/(i+1))), j->R); //j->R = Mult(ArbRotate(SetVector(1,0,0), M_PI/6), j->R); i = 0; tmppp = IdentityMatrix(); //legbase_joint[0].R = ArbRotate(SetVector(0,0,1), cos(3*t)/2); //legs calc_bone_transform(&legbase_joint[0], 0); calc_bone_transform(&legbase_joint[1], 0); calc_bone_transform(&legbase_joint[2], 0); calc_bone_transform(&legbase_joint[3], 0); j = &tail_joint[0]; j->R = ArbRotate(SetVector(0,0,1), -M_PI/2.5); j = &tail_joint[1]; j->R = ArbRotate(SetVector(0,0,1), -M_PI/8.5); //j = &tail_joint[1]; //j->R = ArbRotate(SetVector(0,0,1), 0); j = &tail_joint[2]; //j->R = ArbRotate(SetVector(0,0,1), 0); j = &tail_joint[3]; j->R = ArbRotate(SetVector(0,0,1), 0); //body j = &body_joint[1]; //j->R = ArbRotate(SetVector(0,0,1), cos(t*7)/9.5); j->R = ArbRotate(SetVector(0,1,0), m_angle + cow.angle); j->R = Mult(j->R, ArbRotate(SetVector(0,0,1), cos(freq*t)/9)); calc_bone_transform(&body_joint[0],0); //tail //j = &tail_joint[1]; //j->R = ArbRotate(SetVector(0,0,1), -M_PI/2.5); //j = &tail_joint[1]; //j->R = ArbRotate(SetVector(0,0,1), 0); //j = &tail_joint[2]; //j->R = ArbRotate(SetVector(0,0,1), 0); //j = &tail_joint[3]; //j->R = ArbRotate(SetVector(0,0,1), 0); //calc_bone_transform(&tail_joint[0],0); //head j = &head_joint[0]; j->R = ArbRotate(SetVector(0,0,1), sin(7*t)/9.5); calc_bone_transform(&head_joint[0],0); j = &farmer.skeleton.joints[2]; //j->R = Rx(cos(4*t)); j->R = Mult(Rx(M_PI/2.2 + sin(5*t)/11), Ry(cos(-5*t)/2)); j = &farmer.skeleton.joints[3]; //j->R = Rx(cos(4*t)); j->R = Mult(Rx(-M_PI/2.2 + sin(5*t)/11), Ry(cos(5*t)/2)); //left shoulder (her right) //jc = &farmer.skeleton.joints[3]; //jc->R = Rx(-sin(3*t)); jc = &farmer.skeleton.joints[4]; jc->R = Ry(M_PI/3 + cos(5*t)/8); jc = &farmer.skeleton.joints[5]; jc->R = Ry(-M_PI/3 + cos(5*t)/8); jc = &farmer.skeleton.joints[10]; //jc->R = Rz(M_PI/3); jc->R = Rz(.5-cos(5*t)); jc = &farmer.skeleton.joints[12]; jc->R = Rz((-1-cos(5*t))/2); jc = &farmer.skeleton.joints[11]; //jc->R = Rz(M_PI/3); jc->R = Rz(.5+cos(5*t)); jc = &farmer.skeleton.joints[13]; jc->R = Rz((-1-cos(5*t))/2); calc_bone_transform(&farmer.skeleton.joints[0], 0); calc_bone_transform(&farmer.skeleton.joints[2], 0); calc_bone_transform(&farmer.skeleton.joints[3], 0); //calc_bone_transform(&farmer.skeleton.joints[4], 0); calc_bone_transform(&farmer.skeleton.joints[1], 0); calc_bone_transform(&farmer.skeleton.joints[10], 0); calc_bone_transform(&farmer.skeleton.joints[11], 0); // calc_bone_transform(&farmer.skeleton.joints[8], 0); // calc_bone_transform(&farmer.skeleton.joints[9], 0); glutPostRedisplay(); }
void keyController(){ xModify = 0.0; zModify = 0.0; angleMod = 0.0; camMod = 0.0; rotate = camPos + M_PI / 2; float rotateFront = 0.0; float rotateSide = 0.0; speed = 0.8; if (keyIsDown('<')){ speed = 2.0; } if (keyIsDown('w')){ xModify += -0.2 * cos(camPos); zModify += -0.2 * sin(camPos); } if (keyIsDown('s')){ xModify += 0.2 * cos(camPos); zModify += 0.2 * sin(camPos); rotateFront = - M_PI; } if (keyIsDown('a')){ xModify += -0.2 * sin(camPos); zModify += 0.2 * cos(camPos); rotateSide = - M_PI / 2; } if (keyIsDown('d')){ xModify += 0.2 * sin(camPos); zModify += -0.2 * cos(camPos); rotateSide = M_PI / 2; } if (keyIsDown('w') && keyIsDown('a')){ rotate += - M_PI / 4; } else if (keyIsDown('w') && keyIsDown('d')){ rotate += M_PI / 4; } else if (keyIsDown('s') && keyIsDown('a')){ rotate += - 3 * M_PI / 4; } else if (keyIsDown('s') && keyIsDown('d')){ rotate += 3 * M_PI / 4; } else { rotate += rotateFront + rotateSide; } if (keyIsDown('e')) { angleMod = M_PI / 60; camMod = M_PI / 60; } else if (keyIsDown('q')) { angleMod = -M_PI / 60; camMod = -M_PI / 60; } if (keyIsDown('m')) { menuPressed = !menuPressed; } if (keyIsDown(' ') && yValue == 0.5) { gravity = -0.18; yValue = 0.55; } if (gravity < 0 && yValue > 0.5) { gravity += 0.035; yModify -= gravity; } else if (yValue > 1.5) { gravity += 0.01; yModify -= gravity; } else { yModify = 0; yValue = 0.5; gravity = 0; } }
void timer(int i) { VectorSub(&l,&p,&viewDirection); Normalize(&viewDirection); viewDirection.y = 0; CrossProduct(&viewDirection,&toTheSky,&leftRight); Normalize(&leftRight); if(keyIsDown('s')){ VectorSub(&p,&viewDirection,&p); VectorSub(&l,&viewDirection,&l); } if(keyIsDown('w')){ VectorAdd(&p,&viewDirection,&p); VectorAdd(&l,&viewDirection,&l); } if(keyIsDown('a')){ VectorSub(&p,&leftRight,&p); VectorSub(&l,&leftRight,&l); } if(keyIsDown('d')){ VectorAdd(&p,&leftRight,&p); VectorAdd(&l,&leftRight,&l); } Point3D offsetVector; if(keyIsDown('q')){ yOffset = yOffset-0.2; } if(keyIsDown('e')){ yOffset = yOffset+0.2; } //GLfloat h = getHeightInPoint(p.x,p.z); p.y = yOffset; l.y = yOffset; if(keyIsDown('z')){ glPolygonMode( GL_FRONT_AND_BACK, GL_LINE ); } if(keyIsDown('x')){ glPolygonMode( GL_FRONT_AND_BACK, GL_FILL ); } glutPostRedisplay(); glutTimerFunc(20, &timer, i); glutPostRedisplay(); }
//Keyhandler class to move araound in the world. void Camera::handleKeyPress() { //w,a,s,d to move forward,backwards and sideways if(keyIsDown('w')) { vec3 w = Normalize(VectorSub(lookAtPoint,position)); lookAtPoint = VectorAdd(lookAtPoint,ScalarMult(w,velocity)); position = VectorAdd(position,ScalarMult(w,velocity)); } if(keyIsDown('s')) { vec3 s = Normalize(VectorSub(position,lookAtPoint)); lookAtPoint = VectorAdd(lookAtPoint,ScalarMult(s,velocity)); position = VectorAdd(position,ScalarMult(s,velocity)); } if(keyIsDown('a')) { vec3 w = VectorSub(lookAtPoint,position); vec3 a = Normalize(CrossProduct(upVector,w)); lookAtPoint = VectorAdd(lookAtPoint,ScalarMult(a,velocity)); position = VectorAdd(position,ScalarMult(a,velocity)); } if(keyIsDown('d')) { vec3 w = VectorSub(lookAtPoint,position); vec3 d = Normalize(CrossProduct(w,upVector)); lookAtPoint = VectorAdd(lookAtPoint,ScalarMult(d,velocity)); position = VectorAdd(position,ScalarMult(d,velocity)); } //y,h,g,j to rotate camera up, left, down right if(keyIsDown('y')) { vec3 w = VectorSub(lookAtPoint,position); vec3 a = Normalize(VectorAdd(w,ScalarMult(upVector,1.0/10.0))); lookAtPoint = VectorAdd(position,a); } if(keyIsDown('h')) { vec3 w = VectorSub(lookAtPoint,position); vec3 a = Normalize(VectorAdd(w,ScalarMult(upVector,-1.0/10.0))); lookAtPoint = VectorAdd(position,a); } if(keyIsDown('g')) { vec3 w = VectorSub(lookAtPoint,position); vec3 a = Normalize(CrossProduct(upVector,w)); a = Normalize(VectorAdd(w,ScalarMult(a,1.0/10.0))); lookAtPoint = VectorAdd(position,a); } if(keyIsDown('j')) { vec3 w = VectorSub(lookAtPoint,position); vec3 a = Normalize(CrossProduct(upVector,w)); a = Normalize(VectorAdd(w,ScalarMult(a,-1.0/10.0))); lookAtPoint = VectorAdd(position,a); } //space and c to increase or decrease height if(keyIsDown(' ')) { vec3 w = vec3(0,1,0); lookAtPoint = VectorAdd(lookAtPoint,ScalarMult(w,velocity)); position = VectorAdd(position,ScalarMult(w,velocity)); } if(keyIsDown('c')) { vec3 w = vec3(0,-1,0); lookAtPoint = VectorAdd(lookAtPoint,ScalarMult(w,velocity)); position = VectorAdd(position,ScalarMult(w,velocity)); } //p and o to toggle warp pointer on and off if(keyIsDown('p')) { warpPointer = true; } if(keyIsDown('P')) { warpPointer = false; } //m and n to toggle flight mode on and off if(keyIsDown('m')) { flying = true; } if(keyIsDown('M') && !followFlock) { flying = false; } //+ and - to increase or decrease movement speed if(keyIsDown('+')) { velocity = min(3.0,velocity + 1.0); } if(keyIsDown('-')) { velocity = max(1.0,velocity - 1.0); } //1 and 3 to lock or unlock frustum, for debugging purposes if(keyIsDown('1')) { lockFrustum = true; } if(keyIsDown('!')) { lockFrustum = false; } if(keyIsDown('o') && timer > 20 && flying) { timer = 0; followFlock = true; flockIndex++; // Follow next flock each time 'o' is pressed. } if(keyIsDown('O') && followFlock) { followFlock = false; flockIndex--; // Next time 'o' is pressed, we will follow the previous followed flock. } if(keyIsDown('0') && birdView && followFlock) { birdView = false; } if(keyIsDown('=') && !birdView && followFlock) { birdView = true; } timer++; }