2023年3月15日 星期三

sheeba - week05 - TRT特定軸旋轉

 Step01-1

到 https://jsyeh.org/3dcg10/ 下載windows.zip,data.zip

解壓縮到   下載\windows

執行今天的課本範例 Transformation.exe

glTranslatef 移動位置

glRotatef 轉動位置

glScalef 調整大小

glBegin 藍色車


Step02-1

開啟GLUT專案 week05-1_TRT_rotate_translate

把上禮拜的week04-1_rotate程式碼複製貼上

增加為兩個茶壺 一個綠色一個紅色
#include <GL/glut.h>
float angle=0;///step02-2
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glColor3f(0, 1, 0);
    glPushMatrix();
        glTranslatef(0.8, 0, 0);///最後是綠色的移動
        glRotatef(angle, 0, 0, 1);///改對z軸轉
        glutSolidTeapot( 0.3 );
    glPopMatrix();

    glColor3f(1, 0, 0);
    glPushMatrix();
        glRotatef(angle, 0, 0, 1);
        glTranslatef(0.8, 0, 0);
        glutSolidTeapot( 0.3 );
    glPopMatrix();

    glutSwapBuffers();
    angle++;
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week04");

glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}

Step02-2

用老師的程式   試著移動畫出來的手臂

myDrawObject(0); ///畫出我們的身體與頭

glPushMatrix();

glTranslatef(+0.38, +0.23, 0); //(3) 最後,把會轉動的手臂,掛在肩膀上

glRotatef(angle, 0, 0, 1);     //(2) 再世界對z軸轉,手臂擺好後,剛好像關節在轉

glTranslatef(-0.38, -0.23, 0); //(1) 把旋轉中心,放在正中心

myDrawObject(1); //我們要轉動的手臂

glPopMatrix();


Step03-1

老師講解下禮拜考試題目


glPushMatrix();
glTranslatef(  -0.5  ,  -0.9  ,  0  );  (3)把轉動的手肘放到正確的位置
glRotate(  -45  ,  0  ,  0  ,  1  );  (2)注意正負號及轉動軸
glTranslatef(  -0.8  ,  0.9  ,  0  );  (1)把手肘中心放到畫面中心
drawHand();
glPopMatrix();

Step03-2

新開GLUT專案   week05-2_TRT_robot

畫出大身體、手臂

///week05-2程式來自week05-1
///畫出大身體、手臂
#include <GL/glut.h>
float angle=0;///step02-2
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glColor3f(0, 1, 0);
    glPushMatrix();
        glutSolidCube(0.5);

    glPushMatrix();
        glTranslatef(0.25, 0.25, 0);///(3)掛在右上角
        glRotatef(angle, 0, 0, 1);///(2)轉動
        glTranslatef(0.25, 0.25, 0);///(1)把旋轉中心放到中心
        ///glTranslatef(0.5, 0.5, 0);///step03-3先註解掉
        glColor3f(1, 0, 0);///紅色的手臂
        glutSolidCube(0.5);

    glPopMatrix();

    glutSwapBuffers();
    angle++;
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week05");

glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}



沒有留言:

張貼留言