2015年5月20日 星期三

小連的課堂練習

Week13電腦圖學課程進度

  1. 投影、矩陣
  2. 攝影機、運鏡
  3. 播放MP3
  4. 作業需求討論

運鏡

#include <GL/glut.h>
float eyeX=0,eyeY=0,eyeZ=-200;
void display()
{
    GLfloat pos[]={0,0,200,0};
    glLightfv(GL_LIGHT0,GL_POSITION,pos);
    glEnable(GL_LIGHT0);
    glEnable(GL_NORMALIZE);
    glEnable(GL_LIGHTING);
    glLightfv(GL_LIGHT0,GL_POSITION,pos);    glEnable(GL_LIGHT0);    glEnable(GL_NORMALIZE);    glEnable(GL_LIGHTING);    glLightfv(GL_LIGHT0,GL_POSITION,pos);    glEnable(GL_LIGHT0);    glEnable(GL_NORMALIZE);    glEnable(GL_LIGHTING);    glLightfv(GL_LIGHT0,GL_POSITION,pos);    glEnable(GL_LIGHT0);    glEnable(GL_NORMALIZE);    glEnable(GL_LIGHTING);    glLightfv(GL_LIGHT0,GL_POSITION,pos);    glEnable(GL_LIGHT0);    glEnable(GL_NORMALIZE);    glEnable(GL_LIGHTING);    glEnable(GL_DEPTH_TEST);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        gluLookAt(eyeX,eyeY,eyeZ,0,0,0,0,1,0);        glPushMatrix();
            glutSolidTeapot(100);
        glPopMatrix();
    glPopMatrix();
    glFlush();
}
void motion(int x,int y)
{
    eyeX=x-400;
    eyeY=300-y;
    glutPostRedisplay( );
}
void reshape(int w,int h){    glViewport(0,0,w,h);    glMatrixMode(GL_PROJECTION);    glLoadIdentity();    gluPerspective(90,w/h,0.001,10000);    glMatrixMode(GL_MODELVIEW);    glLoadIdentity();}void timer(int t){    glutTimerFunc(20,timer,t+1);    eyeX+=2;    if(eyeX>300) eyeY+=4;    glutPostRedisplay();}int main(int argc,char **argv){    glutInit(&argc,argv);    glutInitWindowSize(800,600);    glutCreateWindow("3D");    glutDisplayFunc(display);

    glutReshapeFunc(reshape);    glutMotionFunc(motion);    glutTimerFunc(0,timer,0);    glutMainLoop();}


攝影機

#include <GL/glut.h>
float eyeX=0,eyeY=0,eyeZ=-200;
void display( )
{
    glEnable(GL_DEPTH_TEST);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix( );
        gluLookAt(eyeX,eyeY,eyeZ,0,0,0,0,1,0);
        glPushMatrix( );
            glutSolidTeapot(100);
        glPopMatrix( );
    glPopMatrix( );
    glFlush( );
}
void motion(int x,int y)
{
    eyeX=x-400;
    eyeY=300-y;
    glutPostRedisplay( );
}

void reshape(int w,int h){    glViewport(0,0,w,h);    glMatrixMode(GL_PROJECTION);    glLoadIdentity( );    glOrtho(-w/2,w/2,-h/2,h/2,-1000,1000);    glMatrixMode(GL_MODELVIEW);    glLoadIdentity( );}int main(int argc,char **argv){    glutInit(&argc,argv);    glutInitWindowSize(800,600);    glutCreateWindow("3D");    glutDisplayFunc(display);    glutReshapeFunc(reshape);    glutMotionFunc(motion);    glutMainLoop( );}



投影矩陣

#include <GL/glut.h>
void display( )
{
    glPushMatrix( );
        glutSolidTeapot(100);
    glPopMatrix( );
    glFlush( );
}
void reshape(int w,int h){    glViewport(0,0,w,h);    glMatrixMode(GL_PROJECTION);    glLoadIdentity( );    glOrtho(-w/2,w/2,-h/2,h/2,-1000,1000);    glMatrixMode(GL_MODELVIEW);    glLoadIdentity( );}int main(int argc,char **argv){    glutInit(&argc,argv);    glutInitWindowSize(800,600);    glutCreateWindow("3D");    glutDisplayFunc(display);    glutReshapeFunc(reshape);
    glutMainLoop( );}


沒有留言:

張貼留言