2021年3月15日 星期一

是我是我詐騙 Week04

 

移動!旋轉!縮放!

1.先寫個茶壺




#include <GL/glut.h>  ///使用GLUT外掛
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清空
    glutSolidTeapot(0.3);
    glutSwapBuffers();   ///交換兩倍的buffers
}
int main(int argc,char ** argv)
{
    glutInit(&argc,argv);    ///GLUT初始設定
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH); ///顯示模式
    glutCreateWindow("08160554");   ///開窗
    glutDisplayFunc(display);   ///等一下要顯示的函示
    glutMainLoop();   ///主要迴圈
}



2.加點程式




滑鼠左鍵button:0
滑鼠中鍵button:1
滑鼠右鍵button:2

按下去state:0
放開state:1


#include <GL/glut.h>  ///使用GLUT外掛
#include <stdio.h>
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清空
    glutSolidTeapot(0.3);
    glutSwapBuffers();   ///交換兩倍的buffers
}

void mouse(int button,int state,int x,int y)
{
    printf("button:%d state:%d x:%d                     
    y:%d\n",button,state,x,y);
}

int main(int argc,char ** argv)
{
    glutInit(&argc,argv);    ///GLUT初始設定
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH); ///顯示模式
    glutCreateWindow("08160554");   ///開窗
    glutDisplayFunc(display);   ///diaplay顯示的函式
    glutMouseFunc(mouse);  ///mouse滑鼠的程式
    glutMainLoop();   ///主要迴圈
}


3.讓滑鼠點的地方顯示出座標程式



#include <GL/glut.h> 
#include <stdio.h>
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}
void mouse(int button,int state,int x,int y)
{
    if(state==GLUT_DOWN) ///如果 mouse 按下去,印出程式碼
    {
        printf(" glVertex3f((%d-150)/150.0,-(%d-
        150)/150.0,0);\n",x,y);
    }
}
int main(int argc,char ** argv)
{
    glutInit(&argc,argv); 
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("08160554");
    glutDisplayFunc(display);   ///diaplay顯示的函式
    glutMouseFunc(mouse);  ///mouse滑鼠的程式
    glutMainLoop(); 
}




4.把出現的座標程式貼在程式裡,就能畫出東西




#include <GL/glut.h>
#include <stdio.h>
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glBegin(GL_POLYGON);
         glVertex3f((118-150)/150.0,-(129-150)/150.0,0);
         glVertex3f((112-150)/150.0,-(140-150)/150.0,0);
         glVertex3f((110-150)/150.0,-(149-150)/150.0,0);
         glVertex3f((107-150)/150.0,-(163-150)/150.0,0);
         glVertex3f((109-150)/150.0,-(176-150)/150.0,0);
         glVertex3f((117-150)/150.0,-(183-150)/150.0,0);
         glVertex3f((117-150)/150.0,-(188-150)/150.0,0);
         glVertex3f((177-150)/150.0,-(184-150)/150.0,0);
         glVertex3f((181-150)/150.0,-(184-150)/150.0,0);
         glVertex3f((158-150)/150.0,-(114-150)/150.0,0);
         glVertex3f((141-150)/150.0,-(111-150)/150.0,0);
         glVertex3f((150-150)/150.0,-(125-150)/150.0,0);
         glVertex3f((120-150)/150.0,-(130-150)/150.0,0);
         glVertex3f((105-150)/150.0,-(165-150)/150.0,0);
    glEnd();
    glutSwapBuffers(); 
}
void mouse(int button,int state,int x,int y)
{
    if(state==GLUT_DOWN)  ///如果 mouse 按下去,印出程式碼
    {
        printf(" glVertex3f((%d-150)/150.0,-(%d-150)/150.0,0);\n",x,y);
    }
}
int main(int argc,char ** argv)
{
    glutInit(&argc,argv); 
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH); 
    glutCreateWindow("08160554"); 
    glutDisplayFunc(display); 
    glutMouseFunc(mouse);
    glutMainLoop(); 
}



5.要開始移動的PART




#include <GL/glut.h> 
#include <stdio.h>
float teapotX=0,teapotY=0; ///茶壺的座標-1.0...+1.0
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix(); ///矩陣備份
        glTranslatef(teapotX,teapotY,0); ///照著座標移動
        glutSolidTeapot(0.3);
    glPopMatrix(); ///矩陣還原
    glEnd();
    glutSwapBuffers(); 
}

void motion (int x,int y)  ///mouse motion 的函式
{
    teapotX=(x-150)/150.0; ///座標換算
    teapotY=-(y-150)/150.0;
}
int main(int argc,char ** argv)
{
    glutInit(&argc,argv); 
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("08160554");
    glutDisplayFunc(display);  
    glutMotionFunc(motion); ///準備 mouse motion移動時的函式
    glutMainLoop(); 
}




6.Transformation


移動:glTranslatef
旋轉:glRotatef
大小:glScalef
重設:R






🌈旋轉的其他值改變會大有不同🌈









沒有留言:

張貼留言

Week18期末作業(橘貓的跳舞熊熊)

 期末作業(橘貓的跳舞熊熊) 影片: https://youtu.be/R89tptMaQZw 程式碼: #include <opencv/highgui.h> #include <opencv/cv.h> #include <GL/glut.h...