2023年3月23日 星期四

Fafa的奇妙冒險

Week06

Week 06-1.1

Step 1:先開啟CodeBlock並開啟OpenGL project

Step 2:複製上周的程式碼
程式碼:
#include<GL/glut.h>
float angle = 0;
void myCube()
{
    glPushMatrix();
    glScalef(0.5,0.2,0.2);
    glutSolidCube(1);
    glPopMatrix();
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glColor3f(1,1,1);
    glutSolidCube(1);

    glPushMatrix();
        glTranslatef(0.5,0.5,0);
        glRotatef(angle,0,0,1); 
        glTranslatef(0.25,0,0); 
        glColor3f(0,1,0);
        myCube();

    glPopMatrix();

    glPushMatrix();
        glTranslatef(-0.5,0.5,0);
        glRotatef(angle,0,0,1);
        glTranslatef(0.25,0,0);
        glColor3f(0,1,0);
    glPopMatrix();

    glutSwapBuffers();
    angle++;
}

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

{

    glutInit(&argc , argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE |GL_DEPTH);



    glutCreateWindow("week05");



    glutDisplayFunc(display);

    glutIdleFunc(display);

    glutMainLoop();

}


Step 3:把display()改畫茶壺

display()的新程式碼:void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);



    glutSolidSphere(0.01, 30, 30);



    glPushMatrix();

        glRotatef(angle, 0, 0, 1);
        glTranslatef(0.45, 0, 0);
        glutSolidTeapot( 0.3 );
    glPopMatrix();
    
    glutSwapBuffers();

    angle++;
}

Step 4:觀察圖形轉動,完成!



Week 06-2.1


Step 1:先開啟CodeBlock並import OpenGL project


Step 2:複製上面的程式碼


Step 3:將display()的程式碼修改為:

display():
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
            glutSolidSphere(0.01,30,30);

glPushMatrix();
glTranslatef(0.5,0.5,0);
glRotatef(angle,0,0,1);
glTranslatef(0.45,0,0);
glutSolidTeapot(0.3);
glPopMatrix();

        glutSwapBuffers();
angle++;
}

Step 4:觀察圖案變化,可發現圖案往右上偏移




Week 06-2.2

Step 1:開啟新的GLUT project

Step 2:複製下列的程式碼:

程式碼:

#include <GL/glut.h>
float angle = 0;
void mycube()
{
    glPushMatrix();
    glScalef(1,0.3,0.3);
    glutSolidCube(0.5);
    glPopMatrix();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
            glutSolidSphere(0.01,30,30);

glPushMatrix();
glRotatef(angle,0,0,1);
glTranslatef(0.25,0,0);
mycube();
glPopMatrix();

        glutSwapBuffers();
angle++;
}
int main(int argc,char *argv[])
    {
        glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE| GLUT_DEPTH);
    glutCreateWindow("week06");
    glutDisplayFunc(display);
glutIdleFunc(display);
    glutMainLoop();
    }


Step 3:出現矩形,矩形逆時鐘旋轉








Week 06-3

Week06-3.1

Step 1:再開啟一個GLUT project

Step 2:複製進下列的程式碼

程式碼:

#include <GL/glut.h>
float angle = 0;
void mycube()
{
    glPushMatrix();
    glScalef(1,0.3,0.3);
    glutSolidCube(0.5);
    glPopMatrix();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
            glutSolidSphere(0.01,30,30);

glPushMatrix();
        glTranslatef(0.25,0,0);
glRotatef(angle,0,0,1);
glTranslatef(0.25,0,0);
mycube();
glPushMatrix();
        glTranslatef(0.25,0,0);
glRotatef(angle,0,0,1);
glTranslatef(0.25,0,0);
mycube();
glPopMatrix();
glPopMatrix();

        glutSwapBuffers();
angle++;
}
int main(int argc,char *argv[])
    {
        glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE| GLUT_DEPTH);
    glutCreateWindow("week06");
    glutDisplayFunc(display);
glutIdleFunc(display);
    glutMainLoop();
    }

Step 3:圖形多了一個矩形





Week 06-3.2

Step 1:再開啟一個GLUT project


Step 2:複製下列程式碼進GLUT project


程式碼:

#include <GL/glut.h>
float angle = 0;
void mycube()
{
    glPushMatrix();
    glScalef(1,0.3,0.3);
    glutSolidCube(0.5);
    glPopMatrix();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
            glutSolidSphere(0.01,30,30);

glPushMatrix();
        glTranslatef(0.25,0,0);
glRotatef(angle,0,0,1);
glTranslatef(0.25,0,0);
mycube();
glPushMatrix();
        glTranslatef(0.25,0,0);
glRotatef(angle,0,0,1);
glTranslatef(0.25,0,0);
mycube();
glPopMatrix();
glPopMatrix();

glPushMatrix();
        glTranslatef(-0.25,0,0);
glRotatef(angle,0,0,1);
glTranslatef(-0.25,0,0);
mycube();
glPushMatrix();
        glTranslatef(-0.25,0,0);
glRotatef(angle,0,0,1);
glTranslatef(-0.25,0,0);
mycube();
glPopMatrix();
glPopMatrix();

        glutSwapBuffers();
angle++;
}
int main(int argc,char *argv[])
    {
        glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE| GLUT_DEPTH);
    glutCreateWindow("week06");
    glutDisplayFunc(display);
glutIdleFunc(display);
    glutMainLoop();
    }

Step 3:可發現圖形變為4個矩形







這次主要是在display新增幾個程式碼:

先用glTranslatef(); 更改位置
再用 glRotatef(); 更改選轉角度
再用 myCube()創建一個矩形

沒有留言:

張貼留言