2015年3月26日 星期四

02160473-賴緯漢 WEEK5

電腦圖學2015-3-26 Week5
(1)自製3D模型
(2)利用mouse旋轉
(3)回家作業

這禮拜第一個作業

會旋轉的甜甜圈~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
















程式碼:
#include  <GL/glut.h>

float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);

    glRotatef(angle,0,1,0);
    glutWireTorus(0.5,0.3,30,30);

    glFlush();
    angle+=0.01;
}

int main(int argc, char**argv)
{
    glutInit(&argc,argv);
    glutCreateWindow("02160473賴緯漢");

    glutDisplayFunc(display);
    glutMainLoop();
}

會3D選轉的正方形~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
自己畫點自己做
這樣還滿好玩der
只是感覺感覺有點難...




























程式碼:
#include  <GL/glut.h>

float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glPushMatrix();
    glRotatef(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("02160473賴緯漢");

    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();
}
這是空心的正方形喔~~~~~~~~~~~~~
連結起來的程式碼:
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);

        glVertex3f(-0.2,0.2,0.8);
        glVertex3f(-0.2,0.2,-0.8);
    glEnd();
新增了邊線喔(顏色可以自己選擇耶,覺得厲害)
面與面之間相連















三角形旋轉(可是擠在一起= =)
















用Mouse使物體旋轉(老師說是不太好的方式喔~)
















新增兩個angle變數

列印出x,y旋轉的角度
void motion(int x,int y)
{
    printf("%d %d\n",x,y);
    angle = x;
    angle = y;
}

用來偵測滑鼠的座標
glutMotionFunc(motion);


使圖型變成實心(實3D)
///要在main()裡面,glutCreateWindow()之前
    ///加一行glutInitDisplayMode(GLUT_DEPTH)
    ///讓顯示的window有3D深度的功能
    glEnable(GL_DEPTH_TEST);///開啟Depth Test深度測試,近的會擋到遠的,遠的不會擋到近的

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


glutInitDisplayMode(GLUT_DEPTH);///讓顯示的window有3D深度的功能

沒有留言:

張貼留言