(2)
#include <stdio.h>
#include <GL/glut.h>
#include "glm.h"
#include <windows.h>
#include <mmsystem.h>
#include "CMP3_MCI.h"
CMP3_MCI myMP3;
GLMmodel * pmodel=NULL;
GLMmodel * pmode2=NULL;
GLMmodel * pmode3=NULL;
GLMmodel * pmode4=NULL;
GLMmodel * pmode5=NULL;
GLMmodel * pmode6=NULL;
GLMmodel * pmode7=NULL;
GLMmodel * pmode8=NULL;
GLMmodel * pmode9=NULL;
GLMmodel * pmode10=NULL;
GLMmodel * pmode11=NULL;
GLMmodel * pmode12=NULL;
GLMmodel * pmode13=NULL;
GLMmodel * pmode14=NULL;
float rot[27]={0}, rotOld[27]={0}, rotNew[27]={0};
int rotNow=0, oldX=0, oldY=0;;
FILE *fout=0, *fin=0;
GLfloat light_ambient[] = {0, 0, 0, 0};
GLfloat light_diffuse[] = {1.5, 1.5, 1.5, 1};
GLfloat light_specular[] = {0, 0, 0, 0};
GLfloat light_position[] = {0.0f, 2.0f, -2.0f, 1.0f};
void timer(int t)
{
float alpha=(t%10)/10.0;///!!!!
//pos = newX*alpha+oldX*(1-alpha);
if(t%10==0){
if(fin==NULL) fin=fopen("motion.txt", "r");
for(int i=0;i<27;i++){
rotOld[i]=rotNew[i];
fscanf(fin, "%f", &rotNew[i]);
}
}
for(int i=0;i<27;i++){
rot[i]=rotNew[i]*alpha+rotOld[i]*(1-alpha);
}
glutTimerFunc(100, timer, t+1);
glutPostRedisplay();
}
#include <stdio.h>
void display()
{
glClearColor(2,0.2,0.2,0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glLoadIdentity();
gluLookAt(rot[0]/80.0,1,5,
0,0,0,
0,1,0);
glTranslatef(0.0,0.0,0.0);
glRotatef(rot[24],0,0,1);
glTranslatef(0,0,0);
glTranslatef(0.0,0.0,0.0);
glRotatef(rot[25],0,1,0);
glTranslatef(0,0,0);
glTranslatef(0.0,0.0,0.0);
glRotatef(rot[26],1,0,0);
glTranslatef(0,0,0);
glPushMatrix();
glTranslatef(0.0,0.0,0.0);
glRotatef(rot[1],0,0,1);
glTranslatef(0,0,0);
glTranslatef(0.0,0.0,0.0);
glRotatef(rot[2],0,1,0);
glTranslatef(0,0,0);
glTranslatef(0.0,0.0,0.0);
glRotatef(rot[3],1,0,0);
glTranslatef(0,0,0);
if(!pmodel)
{
pmodel = glmReadOBJ("data/03160516_1.obj");
if(!pmodel) exit(0);
glmUnitize(pmodel);
glmFacetNormals(pmodel);
glmVertexNormals(pmodel, 90.0);
}
glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();
glPushMatrix();
glPushMatrix();
glTranslatef(-0.3,0.2,0.0);
glRotatef(rot[4],0,0,1);
glTranslatef(0.0,0,0);
glTranslatef(0.0,0.0,0.0);
glRotatef(rot[5],1,0,0);
glTranslatef(0.0,0,0);
if(!pmode2)
{
pmode2 = glmReadOBJ("data/03160516_H1.obj");
if(!pmode2) exit(0);
glmUnitize(pmode2);
glmFacetNormals(pmode2);
glmVertexNormals(pmode2, 0.0);
}
glmDraw(pmode2, GLM_SMOOTH | GLM_MATERIAL);
glTranslatef(-0.02,-0.25,0);
glRotatef(rot[6],0,0,1);
glTranslatef(0.0,0,0);
glTranslatef(0.0,0.0,0);
glRotatef(rot[7],1,0,0);
glTranslatef(0.0,0.0,0);
glScalef(0.7,0.7,0.7);
if(!pmode3)
{
pmode3 = glmReadOBJ("data/03160516_H2.obj");
if(!pmode3) exit(0);
glmUnitize(pmode3);
glmFacetNormals(pmode3);
glmVertexNormals(pmode3, 0.0);
}
glmDraw(pmode3, GLM_SMOOTH | GLM_MATERIAL);
glTranslatef(0.0,-0.25,0);
glTranslatef(0.0,0,0);
if(!pmode4)
{
pmode4 = glmReadOBJ("data/03160516_H3.obj");
if(!pmode4) exit(0);
glmUnitize(pmode4);
glmFacetNormals(pmode4);
glmVertexNormals(pmode4, 0.0);
}
glmDraw(pmode4, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();
glPushMatrix();
glTranslatef(0.3,0.2,0.0);
glRotatef(rot[8],0,0,1);
glTranslatef(0.0,0,0);
glTranslatef(0.0,0.0,0.0);
glRotatef(rot[9],1,0,0);
glTranslatef(0.0,0,0);
if(!pmode5)
{
pmode5 = glmReadOBJ("data/03160516_H4.obj");
if(!pmode5) exit(0);
glmUnitize(pmode5);
glmFacetNormals(pmode5);
glmVertexNormals(pmode5, 0.0);
}
glmDraw(pmode5, GLM_SMOOTH | GLM_MATERIAL);
glTranslatef(0.02,-0.25,0);
glRotatef(rot[10],0,0,1);
glTranslatef(0.0,0,0);
glTranslatef(0,0,0);
glRotatef(rot[11],1,0,0);
glTranslatef(0.0,0,0);
glScalef(0.7,0.7,0.7);
if(!pmode6)
{
pmode6 = glmReadOBJ("data/03160516_H5.obj");
if(!pmode6) exit(0);
glmUnitize(pmode6);
glmFacetNormals(pmode6);
glmVertexNormals(pmode6, 0.0);
}
glmDraw(pmode6, GLM_SMOOTH | GLM_MATERIAL);
glTranslatef(0.0,-0.25,0);
glTranslatef(0.0,0,0);
if(!pmode7)
{
pmode7 = glmReadOBJ("data/03160516_H6.obj");
if(!pmode7) exit(0);
glmUnitize(pmode7);
glmFacetNormals(pmode7);
glmVertexNormals(pmode7, 0.0);
}
glmDraw(pmode7, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();
glPushMatrix();
glTranslatef(-0.15,-0.45,0.0);
glRotatef(rot[12],1,0,0);
glTranslatef(0.0,0,0);
glTranslatef(0.0,0.0,0.0);
glRotatef(rot[13],0,0,1);
glTranslatef(0.0,0,0);
glTranslatef(0.0,0.0,0);
glRotatef(rot[14],1,0,0);
glTranslatef(0.0,0,0);
glScaled(0.45,0.45,0.45);
if(!pmode8)
{
pmode8 = glmReadOBJ("data/03160516_L1.obj");
if(!pmode8) exit(0);
glmUnitize(pmode8);
glmFacetNormals(pmode8);
glmVertexNormals(pmode8, 0.0);
}
glmDraw(pmode8, GLM_SMOOTH | GLM_MATERIAL);
glTranslatef(0.0,-0.55,0);
glRotatef(rot[15],1,0,0);
glTranslatef(0.0,0,0);
glScaled(0.35,0.35,0.35);
if(!pmode9)
{
pmode9 = glmReadOBJ("data/03160516_L2.obj");
if(!pmode9) exit(0);
glmUnitize(pmode9);
glmFacetNormals(pmode9);
glmVertexNormals(pmode9, 0.0);
}
glmDraw(pmode9, GLM_SMOOTH | GLM_MATERIAL);
glTranslatef(0.0,-1.25,0);
glRotatef(rot[16],1,0,0);
glTranslatef(0.0,0,0);
if(!pmode10)
{
pmode10 = glmReadOBJ("data/03160516_L6.obj");
if(!pmode10) exit(0);
glmUnitize(pmode10);
glmFacetNormals(pmode10);
glmVertexNormals(pmode10, 0.0);
}
glmDraw(pmode10, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();
glPushMatrix();
glTranslatef(0.15,-0.45,0.0);
glRotatef(rot[17],1,0,0);
glTranslatef(0.0,0,0);
glTranslatef(0.0,0.0,0.0);
glRotatef(rot[18],0,0,1);
glTranslatef(0.0,0,0);
glTranslatef(0.0,0.0,0);
glRotatef(rot[19],1,0,0);
glTranslatef(0.0,0,0);
glScaled(0.45,0.45,0.45);
if(!pmode11)
{
pmode11 = glmReadOBJ("data/03160516_L1.obj");
if(!pmode11) exit(0);
glmUnitize(pmode11);
glmFacetNormals(pmode11);
glmVertexNormals(pmode11, 0.0);
}
glmDraw(pmode11, GLM_SMOOTH | GLM_MATERIAL);
glTranslatef(0.0,-0.55,0);
glRotatef(rot[20],1,0,0);
glTranslatef(0.0,0,0);
glScaled(0.35,0.35,0.35);
if(!pmode12)
{
pmode12 = glmReadOBJ("data/03160516_L2.obj");
if(!pmode12) exit(0);
glmUnitize(pmode12);
glmFacetNormals(pmode12);
glmVertexNormals(pmode12, 0.0);
}
glmDraw(pmode12, GLM_SMOOTH | GLM_MATERIAL);
glTranslatef(0.0,-1.25,0);
glRotatef(rot[21],1,0,0);
glTranslatef(0.0,0,0);
if(!pmode13)
{
pmode13 = glmReadOBJ("data/03160516_L6.obj");
if(!pmode13) exit(0);
glmUnitize(pmode13);
glmFacetNormals(pmode13);
glmVertexNormals(pmode13, 0.0);
}
glmDraw(pmode13, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();
glPushMatrix();
glTranslatef(0.0,0.45,0.0);
glRotatef(rot[22],0,1,0);
glTranslatef(0.0,0,0);
glTranslatef(0.0,0.0,0.0);
glRotatef(rot[23],1,0,0);
glTranslatef(0.0,0,0);
glScaled(1.35,1.35,1.35);
if(!pmode14)
{
pmode14 = glmReadOBJ("data/03160516_H.obj");
if(!pmode14) exit(0);
glmUnitize(pmode14);
glmFacetNormals(pmode14);
glmVertexNormals(pmode14, 0.0);
}
glmDraw(pmode14, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
void keyboard(unsigned char key, int x, int y)
{
if(key=='0') rotNow=0;
if(key=='z') rotNow=1;
if(key=='x') rotNow=2;
if(key=='c') rotNow=3;
if(key=='1') rotNow=4;
if(key=='2') rotNow=5;
if(key=='3') rotNow=6;
if(key=='4') rotNow=7;
if(key=='5') rotNow=8;
if(key=='6') rotNow=9;
if(key=='7') rotNow=10;
if(key=='8') rotNow=11;
if(key=='q') rotNow=12;
if(key=='w') rotNow=13;
if(key=='e') rotNow=14;
if(key=='r') rotNow=15;
if(key=='t') rotNow=16;
if(key=='y') rotNow=17;
if(key=='u') rotNow=18;
if(key=='i') rotNow=19;
if(key=='o') rotNow=20;
if(key=='p') rotNow=21;
if(key=='f') rotNow=22;
if(key=='g') rotNow=23;
if(key=='h') rotNow=24;
if(key=='j') rotNow=25;
if(key=='k') rotNow=26;
if(key=='a'){
if(fin==NULL) fin=fopen("motion.txt", "r");
for(int i=0;i<27;i++){
fscanf(fin, "%f", &rot[i]);
}
}
if(key=='d'){
myMP3.Load("Drop.mp3");
myMP3.Play();
if(fin==NULL) fin=fopen("motion.txt", "r");
for(int i=0;i<27;i++){
fscanf(fin, "%f", &rotNew[i]);
}
glutTimerFunc(100,timer, 0);
glutPostRedisplay();
}
if(key=='s'){
if(fout==NULL) fout=fopen("motion.txt", "w+");
for(int i=0;i<27;i++){
fprintf(fout, "%3.1f ", rot[i]);
printf("%3.1f ", rot[i]);
}
fprintf(fout, "\n");
printf("\n");
}
glutPostRedisplay();
}
void motion(int x, int y)
{
rot[rotNow] += x-oldX;
oldX = x;
glutPostRedisplay();
}
void mouse(int button, int state, int x, int y)
{
if(state==GLUT_DOWN){
oldX=x; oldY=y;
}
}
void resize(int w,int h)
{
glViewport(0,0, (GLsizei)w,(GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(30.0, (GLdouble)w/h,1.0,100.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0,0.0,0.0,
0.0,0.0,0.0,
0.0,0.0,0.0);
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("03160516");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutKeyboardFunc(keyboard);
glutReshapeFunc(resize);
glutMouseFunc(mouse);
glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_FALSE);
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glEnable(GL_DEPTH_TEST);
glutMainLoop();
}
沒有留言:
張貼留言