2015年3月26日 星期四

WEEK5 徐梓修

week5


(1)自製3d模型
(2)利用mouse旋轉
(3)回家作業


1.兩個陰陽旋轉的3d方塊

利用 glVertex3f(x,y,z);



code如下:
#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.1;
}
int main(int argc,char **argv)
{
    glutInit(&argc,argv);
    glutCreateWindow("02160845徐梓修");
    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();
}

2.一個有邊線且會旋轉的長方體

將第一步驟的兩面連起來

先做面 在做邊
code 如下
#include<GL/glut.h>
float angle=0;
void display()
{


    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(0,0,1);
    glPushMatrix();
    glRotated(angle,1,1,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);
            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(1,1,1);
        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_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();
    glPopMatrix();
    glFlush();
    angle+=0.1;

}
int main(int argc,char **argv)
{
    glutInit(&argc,argv);
    glutCreateWindow("02160845徐梓修");
    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();

}
3.可以用滑鼠移動來旋轉的長方體

#include<GL/glut.h>
#include<stdio.h>
float angle=0,angle2=0;    ///多設定一個角度值
void display()
{


    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(0,0,1);
    glPushMatrix();
    glRotated(angle,0,1,0);
    glRotated(angle2,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);
            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(1,1,1);
        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_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();
    glPopMatrix();
    glFlush();
   // angle+=0.1;

}
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("02160845徐梓修");
    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMotionFunc(motion);  

    glutMainLoop();

}
4.有前後(前面線條蓋住後面)的長方體
#include<GL/glut.h>
#include<stdio.h>
float angle=0,angle2=0;
void display()
{

    glEnable(GL_DEPTH_TEST);   ///DEPTH_TEST 深度測試功能 近的擋住遠的
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glColor3f(0,0,1);
    glPushMatrix();
    glRotated(angle,0,1,0);
    glRotated(angle2,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);
            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(1,1,1);
        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_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();
    glPopMatrix();
    glFlush();
   // angle+=0.1;

}
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); ///讓顯示的視窗是3D深度功能
    glutCreateWindow("02160845徐梓修");
    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMotionFunc(motion);

    glutMainLoop();

}









沒有留言:

張貼留言