2022年3月28日 星期一

YiTing_week06

 1.

電腦圖學之父:Ivan Sutherland

2.

執行模型時,若朝模型下方按右鍵會出現swap translate/rotate,可改變模型是公轉(rotate_以場景為中心)或自轉(translate_以模型為中心)


3.




4.茶壺可用滑鼠拖動


完整程式碼:

#include <GL/glut.h>

#include <stdio.h>
float x=0,y=0,z=0,oldX,oldY;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
       glTranslatef((x-150)/150.0,-(y-150)/150.0,z);///移動
       glColor3f(1,1,0);
       glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();
}
void keyboard(unsigned char key,int mouseX,int mouseY)
{
    printf("現在按下:%c 座標在:%d %d\n",key,x,y);///滑鼠到哪,且按下鍵盤任意按鍵就會印出哪的座標
}
void mouse(int button, int state,int mouseX,int mouseY)
{
    oldX=mouseX;
    oldY=mouseY;

}
void motion(int mouseX,int mouseY)
{
    x+=(mouseX-oldX);
    y+=(mouseY-oldY);
    oldX=mouseX;
    oldY=mouseY;
    display();
}
int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week06 keyboard");

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

    glutMainLoop();
}

5.用滑鼠拖動可放大縮小


完整程式碼:
#include <GL/glut.h>
#include <stdio.h>
float x=0,y=0,z=0,scale=1.0,oldX,oldY;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
       glScalef(scale,scale,scale);///放大縮小
       glColor3f(1,1,0);
       glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();
}
void keyboard(unsigned char key,int mouseX,int mouseY)
{
    printf("現在按下:%c 座標在:%d %d\n",key,x,y);///滑鼠到哪,且按下鍵盤任意按鍵就會印出哪的座標
}
void mouse(int button, int state,int mouseX,int mouseY)
{
    oldX=mouseX;
    oldY=mouseY;

}
void motion(int mouseX,int mouseY)
{
    /*x+=(mouseX-oldX);
    y+=(mouseY-oldY);*/
    if(mouseX>oldX)scale=scale*1.01;
    if(mouseX<oldX)scale=scale*0.99;
    oldX=mouseX;
    oldY=mouseY;
    display();
}
int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week06 keyboard");

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

    glutMainLoop();
}

6.用鍵盤控制茶壺

#include <GL/glut.h>
#include <stdio.h>
float x=0,y=0,z=0,scale=1.0,angle=0.0,oldX,oldY;
int now=1;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
       glTranslatef((x-150)/150.0,-(y-150)/150.0,z);
       glScalef(scale,scale,scale);
       glRotatef(angle,0,0,1);
       glColor3f(1,1,0);
       glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();
}
void keyboard(unsigned char key,int mouseX,int mouseY)
{
    if(key=='w'||key=='W')now=1;///移動
    if(key=='e'||key=='E')now=2;///旋轉
    if(key=='r'||key=='R')now=3;///縮放
}
void mouse(int button, int state,int mouseX,int mouseY)
{
    oldX=mouseX;
    oldY=mouseY;

}
void motion(int mouseX,int mouseY)
{
    /*x+=(mouseX-oldX);
    y+=(mouseY-oldY);*/
    if(mouseX>oldX)scale=scale*1.01;
    if(mouseX<oldX)scale=scale*0.99;
    oldX=mouseX;
    oldY=mouseY;
    display();
}
int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week06 keyboard");

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

    glutMainLoop();
}


7.













沒有留言:

張貼留言