2024年4月22日 星期一

week10 凱

 week10

4/22

week10-0_sample:

week10_TRT_glutSolidCube_myBody_myArm:

先複製上周week09-2的程式碼

#include <GL/glut.h>

void display()

{

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    glPushMatrix();

    glTranslatef(-0.6,+0.3,0);

        glutSolidTeapot(0.3);

    glPopMatrix();

    glPushMatrix();

        glTranslatef(+0.0,+0.3,0);

        glutSolidCube(0.3);

    glPopMatrix();

    glPushMatrix();

        glTranslatef(+0.6,+0.3,0);

        glutSolidSphere(0.3,30,30);

    glPopMatrix();

    glutSwapBuffers();

}

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

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week09-2 glutSolid¨t¦C");

    glutDisplayFunc(display);

    glutMainLoop();

}

要用glutSolidCube(0.3)用兩次

#include <GL/glut.h>

void display()

{

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    glPushMatrix();

        glTranslatef(-0.6,+0.3,0);

        glColor3f(1,0,0);

        glutSolidCube(0.3);

    glPopMatrix();

    glPushMatrix();

        glTranslatef(+0.0,+0.3,0);

        glColor3f(0,1,0);

        glScalef(1.5,0.5,0.5);

        glutSolidCube(0.3);

    glPopMatrix();

    glutSwapBuffers();

}

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

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week09-2 glutSolid¨t¦C");

    glutDisplayFunc(display);

    glutMainLoop();

}


貼上week10-2的程式

在glRotatef()與myArm()中間新增一行glTranslate()移動旋轉中心

#include <GL/glut.h>

void myBody(){

    glColor3f(1,0,0);

    glutSolidCube(0.3);

}

void myArm(){

    glColor3f(0,1,0);

    glScalef(1.5,0.5,0.5);

    glutSolidCube(0.3);

}

float angle=0;

void display()

{

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    glPushMatrix();

        glTranslatef(-0.6,+0.3,0);

        myBody();

    glPopMatrix();

    glPushMatrix();

        ///glTranslatef(+0.0,+0.3,0);

        glRotatef(angle++,0,0,1);

        glTranslatef(0.225,0,0);///把移度中心做移動

        myArm();

    glPopMatrix();

    glutSwapBuffers();

}

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

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week09-2 glutSolid¨t¦C");

    glutDisplayFunc(display);

    glutIdleFunc(display);

    glutMainLoop();

}

week10-4_TRT_glTranslatef_glRotatef_glTranslatef:


#include <GL/glut.h>
void myBody(){
    glColor3f(1,0,0);
    glutWireCube(0.6);///變空心
}
void myArm(){
    glColor3f(0,1,0);
    glScalef(1.5,0.5,0.5);
    glutWireCube(0.3);///變空心
}
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        ///glTranslatef(-0.6,+0.3,0);
        myBody();
    glPopMatrix();
    glPushMatrix();
        glTranslatef(+0.3,+0.3,0);
        glRotatef(angle++,0,0,1);
        glTranslatef(0.225,0,0);///把移度中心做移動
        myArm();
    glPopMatrix();
    glutSwapBuffers();
}
int main(int argc, char *argv[])
{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week09-2 glutSolid¨t¦C");

    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();
}
把week10-2的中心點移到正方形中間




#include <GL/glut.h>

void myBody()

{

    glColor3f(1,0,0);

    glutWireCube(0.6);///變空心

}

void myArm()

{

    glPushMatrix();///要加保護機制!!

        glColor3f(0,1,0);

        glScalef(1.5,0.5,0.5);

        glutWireCube(0.3);///變空心

    glPopMatrix();

}

float angle=0;

void display()

{

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    glPushMatrix();

    ///glTranslatef(-0.6,+0.3,0);

        myBody();

    glPopMatrix();

    glPushMatrix();///右手上手臂

        glTranslatef(+0.3,+0.3,0);///移動整個手臂

        glRotatef(angle++,0,0,1);

        glTranslatef(0.225,0,0);///把移度中心做移動

        myArm();

        glPushMatrix();///右手下手臂

            glTranslatef(+0.225,0,0);///移動整個下手臂

            glRotatef(angle++,0,0,1);

            glTranslatef(0.225,0,0);///把移度中心做移動

            myArm();

        glPopMatrix();

    glPopMatrix();

    glutSwapBuffers();

}

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

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week09-2 glutSolid¨t¦C");

    glutDisplayFunc(display);

    glutIdleFunc(display);

    glutMainLoop();

}

用滑鼠控制
#include <GL/glut.h>
void myBody(){

        glColor3f(1,0,0);

        glutWireCube( 0.6 );
}



void myArm(){
     glPushMatrix();
        glColor3f(0,1,0);
        glScalef(1.5,0.5,0.5);
        glutWireCube(0.3);
    glPopMatrix();
}

float angle=0;///week10-2

void motion(int x, int y) {

angle = x;
glutPostRedisplay();///重畫畫面
}

void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        ///glTranslatef(-0.6, +0.3, 0);
        myBody();
    glPopMatrix();
     glPushMatrix();
        glTranslatef(+0.3, +0.3, 0);///掛在肩上
        glRotatef(angle,0,0,1);///week10-2
        glTranslatef(0.225,0,0);///把旋轉中心移到正中心
        myArm();///右手臂
            glPushMatrix();
                glTranslatef(0.225,0, 0);///掛在手肘位置上
                glRotatef(angle,0,0,1);///week10-2
                glTranslatef(0.225,0,0);///把旋轉中心移到正中心
                myArm();///右手肘
            glPopMatrix();

          glPopMatrix();
     glPushMatrix();
        glTranslatef(-0.3, +0.3, 0);///掛在肩上
        glRotatef(-angle,0,0,1);///week10-2
        glTranslatef(-0.225,0,0);///把旋轉中心移到正中心
        myArm();///左手臂
            glPushMatrix();
                glTranslatef(-0.225,0, 0);///掛在手肘位置上
                glRotatef(-angle,0,0,1);///week10-2
                glTranslatef(-0.225,0,0);///把旋轉中心移到正中心
                myArm();///左手肘
            glPopMatrix();


    glPopMatrix();
    glutSwapBuffers();
}
int main(int argc, char*argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week09-2 glutSolid系列");
    glutDisplayFunc(display);
    glutIdleFunc(display);///week10-2
    glutMotionFunc(motion);
    glutMainLoop();
}








 




沒有留言:

張貼留言