2014年4月25日 星期五

鍵盤操作

鍵盤操作
#include<GL/glut.h>
float angleX=0;
void keyboard(unsigned char key,int x,int y)
{
if(key=='a')angleX+=3;
if(key=='b')angleX-=3;
glutPostRedisplay();//改變角度後,重新re-display顯示
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angleX,0,1,0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();

}
int main()
{
glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
glutCreateWindow("week10");

glutDisplayFunc(display);
glutKeyboardFunc(keyboard);

glutMainLoop();

}
多一個小黑視窗,知道箭頭指的位置
#include<GL/glut.h>
#include<stdio.h>
float angleX=0;
void keyboard(unsigned char key,int x,int y)
{
printf("%c  %d  %d\n",key,x,y);
if(key=='a')angleX+=3;
if(key=='b')angleX-=3;
glutPostRedisplay();//改變角度後,重新re-display顯示
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angleX,0,1,0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();

}
int main()
{
glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
glutCreateWindow("week10");

glutDisplayFunc(display);
glutKeyboardFunc(keyboard);

glutMainLoop();

}
打光
#include<GL/glut.h>
#include<stdio.h>
float angleX=0;
void keyboard(unsigned char key,int x,int y)
{
printf("%c  %d  %d\n",key,x,y);
if(key=='a')angleX+=3;
if(key=='b')angleX-=3;
glutPostRedisplay();//改變角度後,重新re-display顯示
}
void myLight()
{
const GLfloat light_position[] = { 2.0f, 5.0f, 0.0f, 0.0f };
    glEnable(GL_LIGHT0);
    glEnable(GL_NORMALIZE);
    glEnable(GL_COLOR_MATERIAL);
    glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angleX,0,1,0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();

}
int main()
{
glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
glutCreateWindow("week10");

glutDisplayFunc(display);
glutKeyboardFunc(keyboard);

myLight();
glutMainLoop();

}
用滑鼠讓茶壺旋轉
#include<GL/glut.h>
#include<stdio.h>
float angleX=0,startX=0;
void mouse(int button,int state,int x,int y)
{
printf("%d %d %d %d\n",button,state,x,y);
startX=x;
}
void motion(int x,int y)
{
printf("%d %d\n",x,y);
angleX=x-startX;
glutPostRedisplay();
}
void myLight()
{
const GLfloat light_position[] = { 2.0f, 5.0f, 0.0f, 0.0f };
    glEnable(GL_LIGHT0);
    glEnable(GL_NORMALIZE);
    glEnable(GL_COLOR_MATERIAL);
    glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
}
void display()
{
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angleX,0,1,0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();

}
int main()
{
glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
glutCreateWindow("week10");

glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMotionFunc(motion);

myLight();
glutMainLoop();

}
用滑鼠隨意旋轉
#include<GL/glut.h>
#include<stdio.h>
#include<math.h>
float angleX=0,startX=0;
float angleY=0,startY=0;
float m[16]={1,0,0,0,  0,1,0,0,  0,0,1,0,  0,0,0,1};
void mouse(int button,int state,int x,int y)
{
printf("%d %d %d %d\n",button,state,x,y);
startX=x;
startY=y;
}
void motion(int x,int y)
{
printf("%d %d\n",x,y);
angleX+=x-startX;startX=x;
angleY+=y-startY;startY=y;
glutPostRedisplay();
}
void myLight()
{
const GLfloat light_position[] = { 2.0f, 5.0f, 0.0f, 0.0f };
    glEnable(GL_LIGHT0);
    glEnable(GL_NORMALIZE);
    glEnable(GL_COLOR_MATERIAL);
    glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
}
void display()
{
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glColor3f(0,1,1);
   float dist=sqrt(angleX*angleX+angleY*angleY);
   glRotatef(dist,-angleY,-angleX,0);
   glMultMatrixf(m);
   glGetFloatv(GL_MODELVIEW_MATRIX,m);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();

}
int main()
{
glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
glutCreateWindow("week10");

glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMotionFunc(motion);

myLight();
glutMainLoop();

}

沒有留言:

張貼留言