2024年4月22日 星期一

欸冷 電腦圖學 week10

  Week10


**week10-0_sample

0.安裝freeglut,改lib\libfreeglut.a複製成libglut32.a

1.File-New-Project,GLUT專案,week10-0_sample


**week10-1_TRT_glutSolidCube_myBody_myArm

1.File-New-Project,GLUT專案,week10-1_TRT_glutSolidCube_myBody_myArm

2.貼上week09-2

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

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

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


程式碼:


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

        glutSolidCube(0.3);

}

void display()

{

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

     glPushMatrix();

         myBody();

        glPopMatrix();

     glPushMatrix();

         glScalef(1.5,0.5,0.5);

         glColor3f(0,1,0);

        glutSolidCube( 0.3 );

        glPopMatrix();

        glutSwapBuffers();

}

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

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);

    glutCreateWindow("week09-1 obj gundam opencv texture lighting");

    glutDisplayFunc(display);

    glutIdleFunc(display);

    glutMainLoop();

}





                                            **week10-2


程式碼:


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

         myBody();

        glPopMatrix();

     glPushMatrix();

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

         myArm();

        glPopMatrix();

        glutSwapBuffers();

}

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

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);

    glutCreateWindow("week09-1 obj gundam opencv texture lighting");

    glutDisplayFunc(display);

    glutIdleFunc(display);

    glutMainLoop();

}



                                            **week10-3


程式碼:

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

   myBody();

  glPopMatrix();

     glPushMatrix();

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

         glTranslatef(0.225,0,0);

         myArm();

        glutWireCube( 0.3 );

        glPopMatrix();

        glutSwapBuffers();

}

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

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);

    glutCreateWindow("week09-1 obj gundam opencv texture lighting");

    glutDisplayFunc(display);

    glutIdleFunc(display);

    glutMainLoop();

}


**week10-4_TRT_glTranslatef_glRotatef_glTranslatef

1.File-New-Project,GLUT專案week10-4_TRT_glTranslatef_glRotatef_glTranslatef

2.貼上week10-3

3.再掛到肩上


程式碼:

#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();
         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_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week09-1 obj gundam opencv texture lighting");
    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();


}



**week10-5_TRT_two_layers


程式碼:

#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();
         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_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week09-1 obj gundam opencv texture lighting");
    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();
}


**week10-6_TRT_left_right


程式碼:

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


         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_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week09-1 obj gundam opencv texture lighting");
    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();
}


#week10-7_TRT_mouse_motion_angle

1.File-New-Project,GLUT專案 week10-7_TRT_mouse_motion_angle
2.貼上week10-6
把void display()裡的angle++都改回angle(不要++)

程式碼:

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



         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();
}
void motion(int x,int y){
    angle = x ;
    glutPostRedisplay();
}


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

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week09-1 obj gundam opencv texture lighting");
    glutDisplayFunc(display);
    glutMotionFunc(motion);
    glutIdleFunc(display);
    glutMainLoop();

}




沒有留言:

張貼留言