2015年3月26日 星期四

week05_翁子喻_02160022

2015/03/26
一、今天一樣先重複以往步驟下載freeglut並用codeblocks開專案~~~~
一回生二回熟,哈哈。

課程:(1)自製3D模型。
            (2)利用mouse旋轉。
            (3)回家作業。


二、開啟專案後,就利用上周的甜甜圈程式碼進行增添程式碼的動作就好!
#include <GL/glut.h>

float angle=0; // 新增的程式碼
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glRotated(angle,0,1,0);
    glutWireTorus(0.3,0.7,30,30);
    glFlush();

    angle+=0.01; //新增的程式碼
}
int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutCreateWindow("0022 yo");

    glutDisplayFunc(display);

    glutMainLoop();
}

執行後,秀出成果~~~~~ 哈哈 會旋轉的甜甜圈


三、從2D變成3D 差別在於glutVertex2f改成glutVertex3f

#include <GL/glut.h>
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);

    glPushMatrix();

        glRotated(angle,0,1,0);
        glBegin(GL_LINE_LOOP);
            glVertex3f(0.2,0.2,0.8);
            glVertex3f(0.2,-0.2,0.8);
            glVertex3f(-0.2,-0.2,0.8);
            glVertex3f(-0.2,0.2,0.8);  // 線的方形
        glEnd();

        glBegin(GL_POLYGON);
            glVertex3f(0.2,0.2,-0.8);
            glVertex3f(0.2,-0.2,-0.8);
            glVertex3f(-0.2,-0.2,-0.8);
            glVertex3f(-0.2,0.2,-0.8); //實心方形
        glEnd();

    glPopMatrix();

    glFlush();

    angle+=0.01;
}
int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutCreateWindow("0022 yo");

    glutDisplayFunc(display);

    glutIdleFunc(display);

    glutMainLoop();
}



#include <GL/glut.h>
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);

    glPushMatrix();
        glRotated(angle,0,1,0.4);
        ///前面是面
        glColor3f(1,0,0);
        glBegin(GL_LINE_LOOP);
            glVertex3f(0.2,0.2,0.8);
            glVertex3f(0.2,-0.2,0.8);
            glVertex3f(-0.2,-0.2,0.8);
            glVertex3f(-0.2,0.2,0.8);
        glEnd();

        glBegin(GL_POLYGON);
            glVertex3f(0.2,0.2,-0.8);
            glVertex3f(0.2,-0.2,-0.8);
            glVertex3f(-0.2,-0.2,-0.8);
            glVertex3f(-0.2,0.2,-0.8);
        glEnd();

        glBegin(GL_QUAD_STRIP);
            glVertex3f(0.2,0.2,0.8);
            glVertex3f(0.2,0.2,-0.8);

            glVertex3f(0.2,-0.2,0.8);
            glVertex3f(0.2,-0.2,-0.8);

            glVertex3f(-0.2,-0.2,0.8);
            glVertex3f(-0.2,-0.2,-0.8);

            glVertex3f(-0.2,0.2,0.8);
            glVertex3f(-0.2,0.2,-0.8);
        glEnd();
        ///後面是線
        glColor3f(0,0,0);
        glBegin(GL_LINE_LOOP);
            glVertex3f(0.2,0.2,0.8);
            glVertex3f(0.2,-0.2,0.8);
            glVertex3f(-0.2,-0.2,0.8);
            glVertex3f(-0.2,0.2,0.8);
        glEnd();

    glPopMatrix();

    glFlush();

    angle+=0.01;
}
int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutCreateWindow("0022 yo");

    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();
}

四、今天的程式碼跟早上的程式課的練習碼一樣長 = ="
好吧3D模型,也許有點樣子了,立體"空間"的感覺

奉上長長的程式碼:

#include <GL/glut.h>
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);

    glPushMatrix();
        glRotated(angle,0,1,0.4);
        ///前面是面
        glColor3f(1,0,0);
        glBegin(GL_POLYGON);
            glVertex3f(0.2,0.2,0.8);
            glVertex3f(0.2,-0.2,0.8);
            glVertex3f(-0.2,-0.2,0.8);
            glVertex3f(-0.2,0.2,0.8);
        glEnd();

        glBegin(GL_POLYGON);
            glVertex3f(0.2,0.2,-0.8);
            glVertex3f(0.2,-0.2,-0.8);
            glVertex3f(-0.2,-0.2,-0.8);
            glVertex3f(-0.2,0.2,-0.8);
        glEnd();

        glBegin(GL_QUAD_STRIP); /// STRIP是綵帶
            glVertex3f(0.2,0.2,0.8);
            glVertex3f(0.2,0.2,-0.8);

            glVertex3f(0.2,-0.2,0.8);
            glVertex3f(0.2,-0.2,-0.8);

            glVertex3f(-0.2,-0.2,0.8);
            glVertex3f(-0.2,-0.2,-0.8);

            glVertex3f(-0.2,0.2,0.8);
            glVertex3f(-0.2,0.2,-0.8);
        glEnd();
        ///後面是線
        glColor3f(0,0,0);
        glBegin(GL_LINE_LOOP);
            glVertex3f(0.2,0.2,0.8);
            glVertex3f(0.2,-0.2,0.8);
            glVertex3f(-0.2,-0.2,0.8);
            glVertex3f(-0.2,0.2,0.8);
        glEnd();

        glBegin(GL_LINE_LOOP);
            glVertex3f(0.2,0.2,-0.8);
            glVertex3f(0.2,-0.2,-0.8);
            glVertex3f(-0.2,-0.2,-0.8);
            glVertex3f(-0.2,0.2,-0.8);
        glEnd();

        glBegin(GL_LINE_LOOP);
            glVertex3f(0.2,-0.2,0.8);
            glVertex3f(-0.2,0.2,0.8);
            glVertex3f(-0.2,-0.2,0.8);
            glVertex3f(-0.2,0.2,0.8);
        glEnd();

        glBegin(GL_LINE_LOOP);
            glVertex3f(0.2,0.2,0.8);
            glVertex3f(0.2,0.2,-0.8);
            glVertex3f(0.2,-0.2,0.8);
            glVertex3f(0.2,-0.2,-0.8);
            glVertex3f(-0.2,0.2,0.8);
            glVertex3f(-0.2,-0.2,-0.8);
            glVertex3f(-0.2,0.2,0.8);
            glVertex3f(-0.2,-0.2,-0.8);
        glEnd();
    glPopMatrix();

    glFlush();

    angle+=0.01;
}
int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutCreateWindow("0022 yo");

    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();
}

五、滑鼠在轉動並秀出x,y


#include <GL/glut.h>
#include <stdio.h>
float angle=0;
float angle2=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glPushMatrix();
        glRotatef(angle,0,1,0);
        glRotatef(angle2,1,0,0);
        ///前面是畫面
        glColor3f(1,0,0);

        glBegin(GL_POLYGON);
            glVertex3f(0.2,0.2,0.8);
            glVertex3f(0.2,-0.2,0.8);
            glVertex3f(-0.2,-0.2,0.8);
        glEnd();

        glBegin(GL_POLYGON);
            glVertex3f(0.2,0.2,-0.8);
            glVertex3f(0.2,-0.2,-0.8);
            glVertex3f(-0.2,-0.2,-0.8);
        glEnd();

        glBegin(GL_QUAD_STRIP);
            glVertex3f(0.2,0.2,0.8);
            glVertex3f(0.2,0.2,-0.8);
            glVertex3f(0.2,-0.2,0.8);
            glVertex3f(0.2,-0.2,-0.8);
            glVertex3f(-0.2,-0.2,0.8);
            glVertex3f(-0.2,-0.2,-0.8);
        glEnd();

        ///後面是畫線
        glColor3f(0,0,0);
        glBegin(GL_LINE_LOOP);
            glVertex3f(0.2,0.2,0.8);
            glVertex3f(0.2,-0.2,0.8);
            glVertex3f(-0.2,-0.2,0.8);
        glEnd();

        glBegin(GL_LINE_LOOP);
            glVertex3f(0.2,0.2,-0.8);
            glVertex3f(0.2,-0.2,-0.8);
            glVertex3f(-0.2,-0.2,-0.8);
        glEnd();

        glBegin(GL_LINES);
            glVertex3f(0.2,0.2,0.8);
            glVertex3f(0.2,0.2,-0.8);
            glVertex3f(0.2,-0.2,0.8);
            glVertex3f(0.2,-0.2,-0.8);
            glVertex3f(-0.2,-0.2,0.8);
            glVertex3f(-0.2,-0.2,-0.8);
        glEnd();

    glPopMatrix();
    glFlush();
    angle+=0.01;
}
void motion(int x, int y)
{
    printf("%d %d\n", x, y);
    angle=x;
    angle2=y;
}
int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutCreateWindow("0022 yo");

    glutDisplayFunc(display);
    glutIdleFunc(display);
    ///glutMouseFunc(mouse);///mouse的按鈕按下去down/彈起來Up
    glutMotionFunc(motion); ///mouse的motion
    glutMainLoop();
}

六、變成實心,有點厲害 哈哈

#include <GL/glut.h>
#include <stdio.h>
float angle=0;
float angle2=0;
void display()
{
    glEnable(GL_DEPTH_TEST);///開啟Depth Test 深度測試,近的會擋到遠的,遠的不會擋到近的
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glRotatef(angle,0,1,0);
        glRotatef(angle2,1,0,0);
        ///前面是畫面
        glColor3f(1,0,0);

        glBegin(GL_POLYGON);
            glVertex3f(0.2,0.2,0.8);
            glVertex3f(0.2,-0.2,0.8);
            glVertex3f(-0.2,-0.2,0.8);
        glEnd();

        glBegin(GL_POLYGON);
            glVertex3f(0.2,0.2,-0.8);
            glVertex3f(0.2,-0.2,-0.8);
            glVertex3f(-0.2,-0.2,-0.8);
        glEnd();

        glBegin(GL_QUAD_STRIP);
            glVertex3f(0.2,0.2,0.8);
            glVertex3f(0.2,0.2,-0.8);
            glVertex3f(0.2,-0.2,0.8);
            glVertex3f(0.2,-0.2,-0.8);
            glVertex3f(-0.2,-0.2,0.8);
            glVertex3f(-0.2,-0.2,-0.8);
        glEnd();

        ///後面是畫線
        glColor3f(0,0,0);
        glBegin(GL_LINE_LOOP);
            glVertex3f(0.2,0.2,0.8);
            glVertex3f(0.2,-0.2,0.8);
            glVertex3f(-0.2,-0.2,0.8);
        glEnd();

        glBegin(GL_LINE_LOOP);
            glVertex3f(0.2,0.2,-0.8);
            glVertex3f(0.2,-0.2,-0.8);
            glVertex3f(-0.2,-0.2,-0.8);
        glEnd();

        glBegin(GL_LINES);
            glVertex3f(0.2,0.2,0.8);
            glVertex3f(0.2,0.2,-0.8);
            glVertex3f(0.2,-0.2,0.8);
            glVertex3f(0.2,-0.2,-0.8);
            glVertex3f(-0.2,-0.2,0.8);
            glVertex3f(-0.2,-0.2,-0.8);
        glEnd();

    glPopMatrix();
    glFlush();
    angle+=0.01;
}
void motion(int x, int y)
{
    printf("%d %d\n", x, y);
    angle=x;
    angle2=y;
}
int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DEPTH); ///讓顯示的WINDOW有3D深度的效果
    glutCreateWindow("0022 yo");

    glutDisplayFunc(display);
    glutIdleFunc(display);
    ///glutMouseFunc(mouse);///mouse的按鈕按下去down/彈起來Up
    glutMotionFunc(motion); ///mouse的motion
    glutMainLoop();

}


沒有留言:

張貼留言