2023年3月15日 星期三

愛喝奶茶得石靈-TRT(treat or trick~)

 好啦 其實是機器人的轉動移動 好困..

但無所謂 多學一點是一點吧

以這個藍色車車為例


glBegin(...)代表畫一個藍色車車

glScalef(A,B,C)代表變胖的

glRotatef(a,A,B,C)代表轉動的

glTranslatef(X,Y,Z)代表移動的

重要!要從下往上看嘿 上面的程式代表去動到下面的東西 方向別記錯

接下來如果把順序做一點點改變 這一切就會變得很好笑喔


如果我把translatef跟rotatef換個位置 轉動的方向就會從原本是一個盤子 車子在上面的轉動

變成車子是正中心的轉動 嚴格來說是原本變胖/旋轉/平移 變成了變胖/平移/旋轉

實際情況會根據改動的數值有所差異

他改變了 所有的一切 所以切記

從下往上看 方向別記錯!


第二節課開始實作

老方法別忘了 libfreeglut.a複製改libglut32.a

codeblock open project GLUT專案

兩個不同顏色茶壺的轉動

///看了程式之後, 把程式先備份在 Notepad++ 等一下可以參考

///再把上週的程式 copy 過來

///程式碼全刪,換我們上週教的10行

#include <GL/glut.h>

float angle = 0; ///step02-1 宣告global全域變數 angle

void display()

{

    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); ///清背景


    glColor3f(0,1,0);///綠色

    glPushMatrix();

        glTranslated(0.8,0,0);///最後再移動

        glRotatef(angle, 0, 0, 1); ///對Z軸旋轉

        glutSolidTeapot( 0.3 );

    glPopMatrix();  ///step02-1 還原矩陣


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

    glPushMatrix(); ///step02-1 備份矩陣

        glRotatef(angle, 0, 0, 1); ///最後再對著z軸旋轉

        glTranslated(0.8,0,0);///移動x 0.8

        glutSolidTeapot( 0.3 );

    glPopMatrix();  ///step02-1 還原矩陣


    glutSwapBuffers();

    angle++; ///step02-1 把角度++

}

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

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);

    glutCreateWindow("week04");


    glutDisplayFunc(display);

    glutIdleFunc(display); ///step02-1 有空idle時,就重畫畫面

    glutMainLoop();

}

綠色代表綠色茶壺 紅色代表紅色茶壺 兩得有些微差異 就是順序
只要順序變了 就算程式碼一樣也會有不同的展現方式喔!
綠色是原地旋轉後移動
紅色是先移動後以原本的地方當軸心移動
就是醬!★ ω★
喔對了 剛剛發現的 `u2565是哭哭臉欸 先記著~
左手可以轉欸 沒想到吧
不用在乎上面的1 3 4都是按到
主要看到
glPushMatrix();///開始
    glTranslatef(0.24,0.31);最後再移到正常手的地方
    glRotatef(angle,0,0,1);開始旋轉
    glTranslatef(-0.29,-0.26)先把手移到中心點
    myDrawObject(2);那隻手手
glPopMatrix();///結束
大概長這樣
這就是怎麼轉動的觀念 下禮拜會考試嘿 要記好喔

///5-2機器人身體跟手手

#include <GL/glut.h>
float angle = 0; ///step02-1 宣告global全域變數 angle
void display()
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); ///清背景


    glColor3f(0,1,0);///綠色
    glPushMatrix();
        glutSolidCube(0.5);///身體

        glPushMatrix();
        glTranslated(0.25,0.25,0);///移到右上角
        glRotatef(angle, 0, 0, 1);///開始轉
        glTranslated(0.25,0.25,0);///中心改角落
        glColor3f(1,0,0);///顏色
        glutSolidCube(0.5);///手
    glPopMatrix();  ///step02-1 還原矩陣





    glutSwapBuffers();
    angle++; ///step02-1 把角度++
}
int main(int argc, char* argv[] )
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week04");

    glutDisplayFunc(display);
    glutIdleFunc(display); ///step02-1 有空idle時,就重畫畫面
    glutMainLoop();
}
第三節練習做會轉的手 當作機器人的初版模型吧~ 就醬 這禮拜結束 估得掰~

沒有留言:

張貼留言