2023年3月23日 星期四

yun的筆記week06

事前準備

CodeBlocks開新GLUT專案(記得先去lib複製libfreeglut.a修改檔名成libglut32.a) 

*Step01:旋轉的茶壺



#include <GL/glut.h>

float angle = 0;
void display()

{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glutSolidSphere(0.01,30,30); //以一點為中心點

    glPushMatrix();
        glRotatef(angle, 0, 0, 1);
        glTranslatef(0.45, 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("week06");

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

 *Step02:旋轉的手臂


#include <GL/glut.h>

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

{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glutSolidSphere(0.01,30,30); //以一點為中心點

    glPushMatrix();
        glTranslatef(0.25, 0, 0); //決定掛在哪裡
        glRotatef(angle, 0, 0, 1);
        glTranslatef(0.25, 0, 0);
        myCube();
    glPopMatrix();

    glutSwapBuffers();
    angle++;
}
int main(int argc, char* argv[] )

{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week06");

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

*Step03:旋轉且連接的手臂及手肘



#include <GL/glut.h>

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

{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glutSolidSphere(0.01,30,30); //以一點為中心點

    glPushMatrix();
        glTranslatef(0.25, 0, 0); //決定掛在哪裡
        glRotatef(angle, 0, 0, 1);
        glTranslatef(0.25, 0, 0);
        myCube(); //上手臂
        glPushMatrix();
            glTranslatef(0.25, 0, 0); //決定掛在哪裡
            glRotatef(angle, 0, 0, 1);
            glTranslatef(0.25, 0, 0);
            myCube(); //下手肘
        glPopMatrix();
    glPopMatrix();


    glutSwapBuffers();
    angle++;
}
int main(int argc, char* argv[] )

{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week06");

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

*Step04:旋轉且連接的左右手臂及手肘


#include <GL/glut.h>
float angle = 0;
void myCube()
{
    glPushMatrix();
        glScalef(1, 0.3, 0.3);
        glutSolidCube(0.5);
    glPopMatrix();
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glutSolidSphere(0.01,30,30); //以一點為中心點
    glPushMatrix(); //右邊
        glTranslatef(0.25, 0, 0); //決定掛在哪裡
        glRotatef(angle, 0, 0, 1);
        glTranslatef(0.25, 0, 0);
        myCube(); //上手臂
        glPushMatrix();
            glTranslatef(0.25, 0, 0); //決定掛在哪裡
            glRotatef(angle, 0, 0, 1);
            glTranslatef(0.25, 0, 0);
            myCube(); //下手肘
        glPopMatrix();
    glPopMatrix();
    glPushMatrix(); //左邊
        glTranslatef(-0.25, 0, 0); //決定掛在哪裡
        glRotatef(-angle, 0, 0, 1);
        glTranslatef(-0.25, 0, 0);
        myCube(); //上手臂
        glPushMatrix();
            glTranslatef(-0.25, 0, 0); //決定掛在哪裡
            glRotatef(-angle, 0, 0, 1);
            glTranslatef(-0.25, 0, 0);
            myCube(); //下手肘
        glPopMatrix();
    glPopMatrix();
    glutSwapBuffers();
    angle++;
}
int main(int argc, char* argv[] )
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week06");
    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();
}

*Step05:可以控制旋轉且連接的左右手臂及手肘



#include <GL/glut.h>

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

{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glutSolidSphere(0.01,30,30); //以一點為中心點

    glPushMatrix(); //右邊
        glTranslatef(0.25, 0, 0); //決定掛在哪裡
        glRotatef(angle, 0, 0, 1);
        glTranslatef(0.25, 0, 0);
        myCube(); //上手臂
        glPushMatrix();
            glTranslatef(0.25, 0, 0); //決定掛在哪裡
            glRotatef(angle, 0, 0, 1);
            glTranslatef(0.25, 0, 0);
            myCube(); //下手肘
        glPopMatrix();
    glPopMatrix();

    glPushMatrix(); //左邊
        glTranslatef(-0.25, 0, 0); //決定掛在哪裡
        glRotatef(-angle, 0, 0, 1); //angle前若為+ 那兩手皆會往相同方向轉
        glTranslatef(-0.25, 0, 0);
        myCube(); //上手臂
        glPushMatrix();
            glTranslatef(-0.25, 0, 0); //決定掛在哪裡
            glRotatef(-angle, 0, 0, 1);
            glTranslatef(-0.25, 0, 0);
            myCube(); //下手肘
        glPopMatrix();
    glPopMatrix();
    glutSwapBuffers();
    //angle++;
}
void motion(int x, int y)
{
    angle = x;
}
int main(int argc, char* argv[] )

{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week06");

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

*Step06:滑鼠控制旋轉且連接的左右手臂及手肘



#include <GL/glut.h>

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

{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glutSolidSphere(0.01,30,30); //以一點為中心點

    glPushMatrix(); //右邊
        glTranslatef(0.25, 0, 0); //決定掛在哪裡
        glRotatef(angle, 0, 0, 1);
        glTranslatef(0.25, 0, 0);
        myCube(); //上手臂
        glPushMatrix();
            glTranslatef(0.25, 0, 0); //決定掛在哪裡
            glRotatef(angle, 0, 0, 1);
            glTranslatef(0.25, 0, 0);
            myCube(); //下手肘
        glPopMatrix();
    glPopMatrix();

    glPushMatrix(); //左邊
        glTranslatef(-0.25, 0, 0); //決定掛在哪裡
        glRotatef(-angle, 0, 0, 1);
        glTranslatef(-0.25, 0, 0);
        myCube(); //上手臂
        glPushMatrix();
            glTranslatef(-0.25, 0, 0); //決定掛在哪裡
            glRotatef(-angle, 0, 0, 1);
            glTranslatef(-0.25, 0, 0);
            myCube(); //下手肘
        glPopMatrix();
    glPopMatrix();
    glutSwapBuffers();
    //angle++;
}
int oldX=0;
void mouse(int button, int state, int x,int y)
{
    oldX = x;
}
void motion(int x, int y)
{
    angle += (x-oldX);
    oldX = x;
}
int main(int argc, char* argv[] )

{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week06");

    glutMotionFunc(motion);
    glutMouseFunc(mouse);
    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();
}

沒有留言:

張貼留言