2023年3月16日 星期四

逃離電腦圖學Week05

 TRT對特定軸轉動

一樣 https://jsyeh.org/3dcg10/
下載 windows 跟 data

開啟Transformation

    移動物體{                                                  
        物體旋轉{                                              
            物體大小{                                          
                物體{                                              
                車子                                                
                    }                                                   
                }                                                       
            }                                                           
        }                                                               
TRT_rotate_translate

綠色原地旋轉 紅色旋轉一大圈

#include <GL/glut.h>
float angle=0;
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);
        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("week05");


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

}

opengl_TRT

打開 OpenGL

先畫一個小人 跟 手臂
案住 程式碼 可以移動
將手臂移到正中心 再把轉動加上去
最後 把移動加上去 讓旋轉的手臂 放在肩膀上
考試題目
Cube(簡陋版 TRT)


#include <GL/glut.h>

float angle = 0;
void myCube()
{
    glPushMatrix();
        glScalef(0.5,0.2,0.2);
        glutSolidCube(1);
    glPopMatrix();
}
void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glColor3f(1,1,1);
    glutSolidCube(1);

    glPushMatrix();
        glTranslatef(0.5,0.5,0);
        glRotatef(angle,0,0,1);
        glTranslatef(0.25,0,0);
        glColor3f(0,1,0);
        myCube();
    glPopMatrix();

    glPushMatrix();
        glTranslatef(-0.5,0.5,0);
        glRotatef(angle,0,0,1);
        glTranslatef(0.25,0,0);
        glColor3f(0,1,0);
        myCube();
    glPopMatrix();

    glutSwapBuffers();

    angle++;

}



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



{

        glutInit(&argc, argv);

glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

glutCreateWindow("GLUT Shapes");

glutDisplayFunc(display);

glutIdleFunc(display);

glutMainLoop();

}








沒有留言:

張貼留言