2021年3月15日 星期一

吉親摳ㄎㄎ - Week04

電腦圖學 

WEEK04

因為最近懶癌非常的嚴重,上禮拜加課又聽不懂QQ,我要自己重新開一變老師的教學,一次補三個禮拜惹,好難啊電腦圖學:))) 

今日第一個任務一樣是打開我們上禮拜做的可愛的茶壺(誤

程式碼如下:

#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);   ///1.初始設定
    glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);   ///2.顯示模式
    glutCreateWindow("Week04 mouse");   ///3.開視窗

    glutDisplayFunc(display);   ///4.等一下要顯示的函式
    glutMainLoop();  ///5.主要迴圈
}

接著增加三個步驟!! 把按鍵的 鍵 跟 位置 都詳細的印出來

#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)  ///按鍵 按下去放開 位置
{

    printf("button:%d state:%d x:%d y:%d\n",button,state,x,y);
}
 
int main(int argc,char **argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
    glutCreateWindow("Week04 mouse");
    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();
}
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("Week04 mouse");
    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();
    glutSwapBuffers();
}

void motion(int x,int y)   ///mouse 移動的函式
{
    teapotX= (x-150)/150.0;  ///把茶壺的位置換算成座標
    teapotY=-(y-150)/150.0;
    display();   ///畫面更新
}

int main(int argc,char **argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
    glutCreateWindow("Week04 mouse");

    glutDisplayFunc(display);
    glutMotionFunc(motion);
    glutMainLoop();
}

好!今天煩人的程式碼告一段落 我們現在來看看曾經學過的右手安培定律

現在我們把拇指當作是Y軸,其餘四指變成汽車要轉動的方向



接著我們改成X軸



以此類推Z軸也是一樣的喔:))

最後又到了開心地加課時間,快回家了,希望不要再加課了,我想3:40回家:)))
廢話不多說,研究一下github做自己的網站!!做完就回家吧~~

我自己的網站 : kellyhuang6489564.github.io

沒有留言:

張貼留言

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

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