2022年5月10日 星期二

AhFatKr的電腦圖學筆記week12

#step01-1

1.jsyeh.org/3dcg10 下載windows.zip ,data.zip

2.windows.zip => 下載\windows\Transformation.exe

3.data.zip => 下載\windows\data\模型

4.重點要有T移動 R轉動,按右鍵swap交換T R

5.glTranslatef(0.9 , 0, 0);移動

6.glRotatef(角度,0,1,0);轉動


在右邊轉動的藍色車子

```cpp

glTranslatef(0.9 , 0, 0);移動在右邊

glRotatef(角度,0,1,0);旋轉

畫一台藍色車子

```

```cpp

繞著中間轉的車子

glRotatef(角度,0,1,0);旋轉

glTranslatef(0.9 , 0, 0);移動在右邊

畫一台藍色車子

```

#step01-2

 用另一個程式來理解OpenGL T-R-T的函式;對特定軸轉動練習

1. 120.125.80.50/GL 有程式,老師寫的程式,可以給我們更了解函式的運作方式

2. (右下角)點ToDraw, 左邊黑的地方可以畫圖


3. Ctrl - R Reload可清空

4. 可以畫個身體 叫 myDrawObject(0)

5. 可以再畫個手臂 叫 myDrawObject(1)

6.可以上下更改程式的順序,都試試看比較方便理解函式的運作

7.接下來是練習內容!

當我把glRotatef(angle,0,0,0);寫在兩個物件之上時,兩個都會轉動,因為代表兩個物件都在Rotate的函式之下


#step02-1

1.把glTranslatef();那一行,點它變紅色,就可以移動左邊的東西了

2.把glTranslatef();那一行,放在Rotatef()的下面手臂的上面

3.把另一個glTranslatef();放在Rotatef()的上面

```cpp

glPushMatrix();

        myDrawObject(0);畫身體

        glRotatef(angle,0,0,0);//這個旋轉會轉下面所有的東西

        glTranslatef(0.02,-0.06);往左下方移動(讓軸心在正中央)

        myDrawObject(1);畫手臂(右上方)

glPopMatrix();

```

```cpp

myDrawObject(0);畫身體

glPushMatrix()

        glTranslatef(0.15,0.20,0);往右上方移

        glRotatef(angle,0,0,0);//這個旋轉會轉下面所有的東西

        glTranslatef(0.02,-0.06,0);往左下方移動(讓軸心在正中央)

        myDrawObject(1);畫手臂(右上方)

glPopMatrix();

```


#step02-2

這裡老師在講解下周考試題目,運用到的是今天上課所學的T-R-T

```cpp

glPushMatrix()

        glTranslatef(0.15,0.20,0);往右上方移

        glRotatef(angle,0,0,0);//這個旋轉會轉下面所有的東西

        glTranslatef(0.02,-0.06,0);往左下方移動(讓軸心在正中央)

        myDrawHand(1);畫手(右上方)

glPopMatrix();

```

#step02-3

現在要寫程式了

1. File-New-Project,GLUT專案,名稱week12_TRT

2. 把十行程式碼放進去

3. 把T-R-T的6行放進去

4. 再讓他會自動轉

5. glutIdleFunc( display );

程式如下

#include <GL/glut.h>

float angle=0;

void display()


{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();///備份矩陣

        glRotatef(angle,0,0,1);

        glutSolidTeapot(0.2);

    glPopMatrix();///還原矩陣

    glutSwapBuffers();

    angle+=0.1;

}

int main(int argc, char *argv[])

{


    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("Week12_TRT");


    glutIdleFunc(display);

    glutDisplayFunc(display);

    glutMainLoop();

}

#include <GL/glut.h>

float angle=0;

void display()


{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glColor3f(1,1,1);

    glutSolidTeapot( 0.3 );//茶壺當身體

    glPushMatrix();///備份矩陣

        glTranslatef(0.2,0,0);

        glRotatef(angle,0,0,1);

        glTranslatef(0.2,0,0);

        glColor3f(1,0,0);//紅的

        glutSolidTeapot( 0.2 );//小茶壺 當她是小手臂

    glPopMatrix();///還原矩陣

    glutSwapBuffers();

    angle+=0.1;

}

int main(int argc, char *argv[])

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("Week12_TRT");


    glutIdleFunc(display);

    glutDisplayFunc(display);

    glutMainLoop();

}



#step03-2

為了寫回家作業

1. 要有3D模型(可用MAYA自己建出來,也可以用網路上找的模型來裁切)需要包含身體、上手臂、下手肘。

 回家作業就來改數值!

#include <GL/glut.h>

float angle=0;

void display()


{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glColor3f(1,1,1);

    glutSolidTeapot( 0.3 );//茶壺當身體

    glPushMatrix();///右邊的手臂手肘!!!

        glTranslatef(0.2,0,0);

        glRotatef(angle,0,0,1);

        glTranslatef(0.2,0,0);

        glColor3f(1,0,0);//紅的

        glutSolidTeapot( 0.2 );//小茶壺 當她是下手臂

        glPushMatrix();///備份矩陣

            glTranslatef(0.2,0,0);

            glRotatef(angle,0,0,1);

            glTranslatef(0.2,0,0);

            glColor3f(1,0,0);//紅的

            glutSolidTeapot( 0.2 );//小茶壺 當她是下手肘

        glPopMatrix();///還原矩陣

    glPopMatrix();///還原矩陣

    glutSwapBuffers();

    angle+=0.1;

}

int main(int argc, char *argv[])

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("Week12_TRT");


    glutIdleFunc(display);

    glutDisplayFunc(display);

    glutMainLoop();

}


寫完一隻手臂後,當然要再加上另一隻!

#include <GL/glut.h>

float angle=0;

void display()


{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glColor3f(1,1,1);

    glutSolidTeapot( 0.3 );//茶壺當身體

    glPushMatrix();///右邊的手臂手肘

        glTranslatef(0.2,0,0);

        glRotatef(angle,0,0,1);

        glTranslatef(0.2,0,0);

        glColor3f(1,0,0);//紅的

        glutSolidTeapot( 0.2 );//小茶壺 當她是下手臂

        glPushMatrix();///備份矩陣

            glTranslatef(0.2,0,0);

            glRotatef(angle,0,0,1);

            glTranslatef(0.2,0,0);

            glColor3f(1,0,0);//紅的

            glutSolidTeapot( 0.2 );//小茶壺 當她是下手肘

        glPopMatrix();///還原矩陣

    glPopMatrix();///還原矩陣


    glPushMatrix();///左邊的手臂手肘!!!!!!!!!

        glTranslatef(-0.2,0,0);

        glRotatef(-angle,0,0,1);

        glTranslatef(-0.2,0,0);

        glColor3f(1,0,0);//紅的

        glutSolidTeapot( 0.2 );//小茶壺 當她是下手臂

        glPushMatrix();///備份矩陣

            glTranslatef(0.2,0,0);

            glRotatef(angle,0,0,1);

            glTranslatef(0.2,0,0);

            glColor3f(1,0,0);//紅的

            glutSolidTeapot( 0.2 );//小茶壺 當她是下手肘

        glPopMatrix();///還原矩陣

    glPopMatrix();///還原矩陣

    glutSwapBuffers();

    angle+=0.1;

}

int main(int argc, char *argv[])

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("Week12_TRT");


    glutIdleFunc(display);

    glutDisplayFunc(display);

    glutMainLoop();

}










沒有留言:

張貼留言

VERY BEAUTIFUL, VERY POWERFUL

一.     一樣先安裝且設定好freeglut,OpecCV, 開啟CodeBlocks建立新專案 week11_gundam,                 把 MyGundam.zip下載解壓縮後的data資料夾放到freeglut/bin裡面 把week09_openc...