2024年4月22日 星期一

哈囉你好嗎隨便 week10

1.sample
1.File-New-Project, GLUT專案, week10-1 TRT glutSolidCube myBody myArm

2.貼上上週的 week09-2 的程式

3.要用 glutSolidCube(0.3)用兩次,紅色的身體,綠色的手臂

4.目標:用方塊,組出今天的程式

5.把身體的程式,放到 void myBody() 函式裡

6.把手臂的程式,放到 void myArm() 函式裡


cpp>>>>>>>>>>



#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);
}

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);
        myArm();
    glPopMatrix();
    glutSwapBuffers();
}
int main(int argc, char*argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week09-2 glutSolid系列");
    glutDisplayFunc(display);
    glutMainLoop();
}





2.TRT Rotate

開一個新的專案
貼上week10-1的程式


cpp>>>>>>>>

#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;///week10-2

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);///week10-2
        myArm();
    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
    glutMainLoop();
}


就是讓綠的會轉這樣而已


3.TRT/旋轉移動 英文太多不想打
1.開心專案
2.貼上week10-2的程式
3.加一行讓他的旋轉中心改變

cpp>>>>>>


    #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;///week10-2

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);///week10-2
        glTranslatef(0.225,0,0);
        myArm();
    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
    glutMainLoop();
}

4.week10-4 TRT 加手肘

開一個新的專案
貼上week10-3的程式



cpp>>>>>


#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 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();
    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
    glutMainLoop();
}


手臂手肘都會轉動






5.加左右手


cpp>>>>>



#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 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
    glutMainLoop();
}


就是有兩隻手在轉



6.用滑鼠控制

cpp>>>

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








沒有留言:

張貼留言