2020年3月24日 星期二

第四週勉強快樂ㄉ卡小

先到 點我辣!這個網站
然後下載datawin32glut32.dll
將windows解壓縮,glut32.dll跟data的資料放進去
點擊Transformation開啟檔案
根據X、Y、Z軸做轉動

幫助你對角度ㄉ轉動更熟悉
安捏,ㄙㄨㄚˋ( • ̀ω•́ )

開始正題

開啟之前開過的六個形狀的檔案
我們要讓他停止自轉,跟著我們的滑鼠轉!
先加入motion函式
讓我ㄉ角度變成他ㄉx值
宣告變數然後塞進x值
我們只有多打6ㄍ程式碼哦哦!
就醬(*ˇωˇ*人)


接下來要來旋轉茶壺辣!
針對他ㄉZ軸旋轉ㄜ
總之就是像上面釀,OK?

順便附上程式碼辣!
之前都沒在放,然後都找別人ㄉ複製欸嘿✧*。٩(ˊᗜˋ*)و✧*。
#include <GL/glut.h>
float myAngle=0;///變數宣告
static void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清畫面
    glPushMatrix();
    glRotatef(myAngle,0,0,1);///對Z軸旋轉
    glutSolidTeapot(0.3);
    glPopMatrix();

    glutSwapBuffers();
}

void motion(int x,int y){
    myAngle=x;///角度拿下來用
    display();///每次做動作就重畫
}

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("weeeeeeeeeeeeeeeek04!");

    glutDisplayFunc(display);
    glutMotionFunc(motion);///加入函式
    glutMainLoop();
}
由於上面那個程式碼在每次轉動時都會從特定位置開始轉
所以我們要做一ㄍ會根據上次旋轉的位置繼續轉動的茶壺!
嗯,對,就上面釀ㄎ¯\_(ツ)_/¯

附上程式碼辣!
加深ㄉ部分是有改過或是增加ㄉ程式碼
#include <GL/glut.h>
float myAngle=0;///變數宣告
static void display(void)
{ 
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清畫面
    glPushMatrix();
    glRotatef(myAngle,0,0,1);///對Z軸旋轉
    glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();

}
int oldx=0;
void mouse(int button,int state,int x,int y)
{
    if(state==GLUT_DOWN) oldx=x;///紀錄上次按下的位置
}
void motion(int x,int y){
    myAngle+=(x-oldx);///加ㄌ幾度
    oldx=x;
    display();///每次做動作就重畫
}
int main(int argc, char *argv[]){
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("weeeeeeeeeeeeeeeek04!");
    glutDisplayFunc(display);
    glutMotionFunc(motion);///加入函式
    glutMouseFunc(mouse); 
   glutMainLoop();
}

沒有留言:

張貼留言