2021年3月15日 星期一

你要出多少_week04

 

延續上一周的茶壺

先去下載檔案,再寫程式

#include <GL/glut.h>

void display()
{


    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//清空


    glutSolidTeapot(0.3);//實心茶壺
    glutSwapBuffers();//交換兩倍的buffers
}

int main(int argc, char *argv[])//以前我們程式碼會寫 int main()
{
    glutInit(&argc, argv);//GULT初始設定
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);//顯示模式
    glutCreateWindow("08160520石雅慈"); //(視窗的名稱)


    glutDisplayFunc(display);//等等要顯示的涵式

    glutMainLoop();//主要迴圈


}
(執行結果如圖下)


#include <GL/glut.h>
#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)//TODO
{
    printf("button:%d state:%d x:%d y:%d\n",button, state,x,y);
}

int main(int argc, char **argv)//以前我們程式碼會寫 int main()
{
    glutInit(&argc, argv);//GULT初始設定
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);//顯示模式
    glutCreateWindow("08160520石雅慈"); //(視窗的名稱)


    glutDisplayFunc(display);//等等要顯示的涵式
    glutMouseFunc(mouse);
    glutMainLoop();//主要迴圈


}
(執行結果如圖下)

我們可以透過滑鼠點擊一些點,取得座標

#include <GL/glut.h>
#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)//TODO
{
    if(state==GLUT_DOWN){

        printf("glVertex3f((%d-150)/150.0,-(%d-150)/150.0,0);\n",x,y);
    }
}

int main(int argc, char **argv)//以前我們程式碼會寫 int main()
{
    glutInit(&argc, argv);//GULT初始設定
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);//顯示模式
    glutCreateWindow("08160520石雅慈"); //(視窗的名稱)


    glutDisplayFunc(display);//等等要顯示的涵式
    glutMouseFunc(mouse);
    glutMainLoop();//主要迴圈


}
(執行結果如下圖)

這樣我們得到了下面這些座標
glVertex3f((141-150)/150.0,-(113-150)/150.0,0);
glVertex3f((158-150)/150.0,-(113-150)/150.0,0);
glVertex3f((156-150)/150.0,-(122-150)/150.0,0);
glVertex3f((184-150)/150.0,-(129-150)/150.0,0);
glVertex3f((194-150)/150.0,-(149-150)/150.0,0);
glVertex3f((203-150)/150.0,-(145-150)/150.0,0);
glVertex3f((212-150)/150.0,-(131-150)/150.0,0);
glVertex3f((225-150)/150.0,-(130-150)/150.0,0);
glVertex3f((212-150)/150.0,-(148-150)/150.0,0);
glVertex3f((200-150)/150.0,-(166-150)/150.0,0);
glVertex3f((175-150)/150.0,-(184-150)/150.0,0);
glVertex3f((117-150)/150.0,-(184-150)/150.0,0);
glVertex3f((106-150)/150.0,-(171-150)/150.0,0);
glVertex3f((83-150)/150.0,-(149-150)/150.0,0);
glVertex3f((87-150)/150.0,-(138-150)/150.0,0);
glVertex3f((112-150)/150.0,-(132-150)/150.0,0);
glVertex3f((122-150)/150.0,-(127-150)/150.0,0);
glVertex3f((130-150)/150.0,-(125-150)/150.0,0);
glVertex3f((145-150)/150.0,-(125-150)/150.0,0);

然後我們把這些座標複製,放入程式碼裡

#include <GL/glut.h>
#include <stdio.h>
void display()
{


    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//清空
    glBegin(GL_POLYGON);
        glVertex3f((141-150)/150.0,-(113-150)/150.0,0);
        glVertex3f((158-150)/150.0,-(113-150)/150.0,0);
        glVertex3f((156-150)/150.0,-(122-150)/150.0,0);
        glVertex3f((184-150)/150.0,-(129-150)/150.0,0);
        glVertex3f((194-150)/150.0,-(149-150)/150.0,0);
        glVertex3f((203-150)/150.0,-(145-150)/150.0,0);
        glVertex3f((212-150)/150.0,-(131-150)/150.0,0);
        glVertex3f((225-150)/150.0,-(130-150)/150.0,0);
        glVertex3f((212-150)/150.0,-(148-150)/150.0,0);
        glVertex3f((200-150)/150.0,-(166-150)/150.0,0);
        glVertex3f((175-150)/150.0,-(184-150)/150.0,0);
        glVertex3f((117-150)/150.0,-(184-150)/150.0,0);
        glVertex3f((106-150)/150.0,-(171-150)/150.0,0);
        glVertex3f((83-150)/150.0,-(149-150)/150.0,0);
        glVertex3f((87-150)/150.0,-(138-150)/150.0,0);
        glVertex3f((112-150)/150.0,-(132-150)/150.0,0);
        glVertex3f((122-150)/150.0,-(127-150)/150.0,0);
        glVertex3f((130-150)/150.0,-(125-150)/150.0,0);
        glVertex3f((145-150)/150.0,-(125-150)/150.0,0);
    glEnd();


    //glutSolidTeapot(0.3);//實心茶壺  (記得把這行//,因為我們這次要利用座標畫圖)
    glutSwapBuffers();//交換兩倍的buffers
}
void mouse (int button,int state, int x,int y)
{
    if(state==GLUT_DOWN){

        printf("glVertex3f((%d-150)/150.0,-(%d-150)/150.0,0);\n",x,y);
    }
}

int main(int argc, char **argv)
{
    glutInit(&argc, argv);//GULT初始設定
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);//顯示模式
    glutCreateWindow("08160520石雅慈"); //(視窗的名稱)


    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMainLoop();


}
(執行結果如下圖)

接著我們要來做點著滑鼠移動,茶壺就可以跟著移動的程式

#include <GL/glut.h>
#include <stdio.h>
float teapotX=0, teapotY=0;//茶壺的座標
void display()
{


    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//清空
    glPushMatrix();//矩陣備份
        glTranslatef( teapotX,teapotY,0 );
        glutSolidTeapot(0.3);
    glPopMatrix();//矩陣還原
    glEnd();
    //glutSolidTeapot(0.3);//實心茶壺
    glutSwapBuffers();//交換兩倍的buffers
}
void motion (int x,int y)//TODO
{
    teapotX = (x-150)/150.0;//換算座標
    teapotY = -(y-150)/150.0;
    display();
}

int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("08160520石雅慈"); //(視窗的名稱)


    glutDisplayFunc(display);//display顯示涵式
    glutMotionFunc(motion); 
    glutMainLoop();//準備mouse motion 移動時的涵式


}
(執行結果如下圖)



第一行是X,Y,Z
第二行分別是 旋轉角度,X,Y,Z (右手安培定律)
一定要用右手看!!!
X拇指指向右,Y拇指指向上,Z拇指指向自己
接著看其他四指往哪個方向轉,就是旋轉的角度方向
第三行是大小

舉例

Z軸,拇指指向自己,依照圖片箭頭旋轉


Y軸,拇指指向上面,依照圖片箭頭旋轉




X軸,拇指指向右邊,依照圖片箭頭旋轉

橘色為軸,紅色為旋轉方向




把這些資料都填好(記得網址要跟你的帳號一樣)


建立後會長這樣


把main改成gh-pages




選擇你的網址的介面


然後複製這個網址,去觀看自己的網頁


成功~






沒有留言:

張貼留言

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

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