2023年3月22日 星期三

電腦圖學 week06

 week06

先複製上週的程式碼,再來更改圖形以及旋轉中心

#include <GL/glut.h>

float angle = 0;

void display()

{

    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    glutSolidSphere(0.02,30,30); ///中心點

    glPushMatrix();

        glRotatef(angle, 0, 0, 1);

        glTranslatef(0.46, 0.05, 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();

}


從week06-1的程式碼下去更改week06-2

放一個茶壺在中央,掛一個在壺口

#include <GL/glut.h>

float angle = 0;

void display()

{

    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    glutSolidSphere(0.02,30,30);

     glutSolidTeapot(0.3);

    glPushMatrix();

        glTranslatef(0.49, 0.13, 0);

        glRotatef(angle, 0, 0, 1);

        glTranslatef(0.46, 0.05, 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();

}


接著在掛一個茶壺在第二個茶壺上,並使他旋轉

#include <GL/glut.h>

float angle = 0;

void display()

{

    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    ///glutSolidSphere(0.02,30,30);

     glutSolidTeapot(0.3);

    glPushMatrix();

        glTranslatef(0.49, 0.13, 0)

        glRotatef(angle, 0, 0, 1);

        glTranslatef(0.46, -0.05, 0);

        glutSolidTeapot(0.3);

     glPushMatrix();

        glTranslatef(0.49, 0.13, 0);

        glRotatef(angle, 0, 0, 1);

        glTranslatef(0.46, -0.05, 0);

        glutSolidTeapot(0.3);

    glPopMatrix();

    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();

}


week06-3

做手臂,使其可以旋轉
#include <GL/glut.h>
float angle = 0;
void drawhand()
{
    glPushMatrix();
    glScaled(1,0.3,0.3);
    glutSolidCube(0.5);
    glPopMatrix();
}
void display()
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
    glPushMatrix();
            glRotatef(angle, 0, 0, 1);
            glTranslatef(0.25, 0, 0);
            drawhand();
    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();
}

在畫一個方塊,讓第一塊在它上面璇轉,等等要調位置
#include <GL/glut.h>
float angle = 0;
void drawhand()
{
    glPushMatrix();
    glScaled(1,0.3,0.3);
    glutSolidCube(0.5);
    glPopMatrix();
}
void display()
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
    glPushMatrix();
            glTranslatef(0.25, 0, 0);
            glRotatef(angle, 0, 0, 1);
            glTranslatef(0.25, 0, 0);
            drawhand();
            glPushMatrix();
            glTranslatef(0.25, 0, 0);
            glRotatef(angle, 0, 0, 1);
            glTranslatef(0.25, 0, 0);
            drawhand();
            glPopMatrix();
    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();
}
接著劃出左手臂(作法與右手臂相同,但要換位置)

#include <GL/glut.h>

float angle = 0;

void drawhand()

{

    glPushMatrix();

    glScaled(1,0.3,0.3);

    glutSolidCube(0.5);

    glPopMatrix();

}

void display()

{

    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    glPushMatrix();

            glTranslatef(0.25, 0, 0);

            glRotatef(angle, 0, 0, 1);

            glTranslatef(0.25, 0, 0);

            drawhand();

            glPushMatrix();

            glTranslatef(0.25, 0, 0);

            glRotatef(angle, 0, 0, 1);

            glTranslatef(0.25, 0, 0);

            drawhand();

            glPopMatrix();

    glPopMatrix();

    glPushMatrix();

            glTranslatef(-0.25, 0, 0);

            glRotatef(angle, 0, 0, 1);

            glTranslatef(-0.25, 0, 0);

            drawhand();

            glPushMatrix();

            glTranslatef(-0.25, 0, 0);

            glRotatef(angle, 0, 0, 1);

            glTranslatef(-0.25, 0, 0);

            drawhand();

            glPopMatrix();

    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();

}



沒有留言:

張貼留言