2023年3月15日 星期三

旻_Week05

 (1) 主題 :  T-R-T特定軸轉

 (2) 複習 : 移動、轉、縮放

 (3) 主題 : 矩陣 Matrix



和上星期一樣到 https://jsyeh.org/3dcg10/ 下載範例程式

下載date.zip--->解壓縮

下載windows.zip--->解壓縮至此啟動Transformation.exe


translatef 左右移動
rotatef 以軸為中心轉動
scalef 長胖的
begin.... 藍色車子

Translatef在前面是自轉



                                                                         Rotatef在前面是全部一起轉

實作


開新GLUT專案 > week05_rotate
從Github找到並複製week04,貼到專案




#include <GL/glut.h>
float angle=0;///step02-1
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);///對z軸
        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();

}


畫手臂



打開老師傳送過來的程式
劃出兩塊圖案
切英文輸入法按空白鍵可轉動
把圖案抓到白色的點上
就可以讓他以白色的點為中心轉

myDrawObject(0);///身體
glPushMatrix();
    glTranslatef(+0.18,+0.28,0);//(3)最後把會移動的手臂,掛在肩膀上
    glRotatef(angle,0,0,1);        //(2)整個都對Z軸轉
    glTranslatef(-0.18,-0.28,0); //(1)把旋轉中心放正中間
    myDrawObject(1);///要轉動的手臂
glPopMatrix();



方塊旋轉

#include <GL/glut.h>
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    glColor3f(0,1,0);///green body
    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);
            glColor3f(1,0,0);///red arm
            glutSolidCube(0.5);
        glPopMatrix();
    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();

}



考試題目
glPushMatrix();
    glTranslatef(-0.5,-0.9,0);
    glRotatef(-45,0,0,1);     
    glTranslatef(-0.8,-0.9,0);
    drawHand();
glPopMatrix();

很衰都沒放到假 所以這學期有小考...


沒有留言:

張貼留言