2024年4月22日 星期一

Yweek10

week10

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

貼上上週的 week09-2 的程式

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

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

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

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


程式碼

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











TRT Rotate

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


程式碼

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
















TRT
開新專案
貼上week10-2的程式
加一行讓他的旋轉中心改變

程式碼


    #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_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week09-2 glutSolid");
    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();
}

week10-4 TRT 加手肘

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

程式碼

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

手臂手肘都會轉動






   加左右手


程式碼

#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.用滑鼠控制

程式碼

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



沒有留言:

張貼留言