2015年3月26日 星期四

week 04


重點!!! 要對應的
glBegin( ) && glEnd( )
glPushMatrix( )  && glPopMatrix( )

需手動移動視窗 則可以轉動內建圖形
ps:點擊畫面也可以轉動喔!


自動轉動的自繪3D圖形
#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.3, 0.3,0.5);
                glVertex3f( 0.3,-0.3,0.5);
                glVertex3f(-0.3,-0.3,0.5);
                glVertex3f(-0.3, 0.3,0.5);
            glEnd();
        glPopMatrix();
        glFlush();

        angle+=0.01;

}
int main(int  argc, char** argv)
{
    glutInit(&argc,argv);
    glutCreateWindow("01160536");

    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.6);
            //面的程式碼
            glColor3f(0,0,1);//面的顏色設定
            glBegin(GL_POLYGON);
                glVertex3f( 0.3, 0.3,0.5);
                glVertex3f( 0.3,-0.3,0.5);
                glVertex3f(-0.3,-0.3,0.5);
                glVertex3f(-0.3, 0.3,0.5);
            glEnd();

            glBegin(GL_POLYGON);
                glVertex3f( 0.3, 0.3,-0.5);
                glVertex3f( 0.3,-0.3,-0.5);
                glVertex3f(-0.3,-0.3,-0.5);
                glVertex3f(-0.3, 0.3,-0.5);
            glEnd();

            glBegin(GL_QUAD_STRIP);
                glVertex3f( 0.3, 0.3,0.5);
                glVertex3f( 0.3, 0.3,-0.5);
                glVertex3f( 0.3,-0.3,0.5);
                glVertex3f( 0.3,-0.3,-0.5);
                glVertex3f(-0.3,-0.3,0.5);
                glVertex3f(-0.3,-0.3,-0.5);
                glVertex3f(-0.3, 0.3,0.5);
                glVertex3f(-0.3, 0.3,-0.5);
            glEnd();
            //面的程式碼
            glColor3f(0,0,0);//線的顏色設定
            glBegin(GL_LINE_LOOP);
                glVertex3f( 0.3, 0.3,0.5);
                glVertex3f( 0.3,-0.3,0.5);
                glVertex3f(-0.3,-0.3,0.5);
                glVertex3f(-0.3, 0.3,0.5);
            glEnd();

            glBegin(GL_LINE_LOOP);
                glVertex3f( 0.3, 0.3,-0.5);
                glVertex3f( 0.3,-0.3,-0.5);
                glVertex3f(-0.3,-0.3,-0.5);
                glVertex3f(-0.3, 0.3,-0.5);
            glEnd();

            glBegin(GL_LINES);
                glVertex3f( 0.3, 0.3,0.5);
                glVertex3f( 0.3, 0.3,-0.5);
                glVertex3f( 0.3,-0.3,0.5);
                glVertex3f( 0.3,-0.3,-0.5);
                glVertex3f(-0.3,-0.3,0.5);
                glVertex3f(-0.3,-0.3,-0.5);
                glVertex3f(-0.3, 0.3,0.5);
                glVertex3f(-0.3, 0.3,-0.5);
            glEnd();

        glPopMatrix();
        glFlush();

        angle+=0.01;

}
int main(int  argc, char** argv)
{
    glutInit(&argc,argv);
    glutCreateWindow("01160536");

    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.6);
            //面
            glColor3f(0,0,1);
            glBegin(GL_POLYGON);
                glVertex3f( 0.3, 0.3,0.1);
                glVertex3f( 0.3,-0.3,0.1);
                glVertex3f(-0.3,-0.3,0.1);

            glEnd();

            glBegin(GL_POLYGON);
                glVertex3f( 0.3, 0.3,0);
                glVertex3f( 0.3,-0.3,0);
                glVertex3f(-0.3,-0.3,0);

            glEnd();

            glBegin(GL_QUAD_STRIP);
                glVertex3f( 0.3, 0.3,0.1);
                glVertex3f( 0.3, 0.3,0);
                glVertex3f( 0.3,-0.3,0.1);
                glVertex3f( 0.3,-0.3,0);
                glVertex3f(-0.3,-0.3,0.1);
                glVertex3f(-0.3,-0.3,0);

            glEnd();
            //邊
            glColor3f(0,0,0);
            glBegin(GL_LINE_LOOP);
                glVertex3f( 0.3, 0.3,0.1);
                glVertex3f( 0.3,-0.3,0.1);
                glVertex3f(-0.3,-0.3,0.1);

            glEnd();

            glBegin(GL_LINE_LOOP);
                glVertex3f( 0.3, 0.3,0);
                glVertex3f( 0.3,-0.3,0);
                glVertex3f(-0.3,-0.3,0);

            glEnd();

            glBegin(GL_LINES);
                glVertex3f( 0.3, 0.3,0.1);
                glVertex3f( 0.3, 0.3,0);
                glVertex3f( 0.3,-0.3,0.1);
                glVertex3f( 0.3,-0.3,0);
                glVertex3f(-0.3,-0.3,0.1);
                glVertex3f(-0.3,-0.3,0);

            glEnd();

        glPopMatrix();
        glFlush();

        angle+=0.01;

}
int main(int  argc, char** argv)
{
    glutInit(&argc,argv);
    glutCreateWindow("01160536");

    glutDisplayFunc(display);
    glutIdleFunc(display);

    glutMainLoop();
}

#include<GL/glut.h>
#include<stdio.h>
float angle=0,angle2=0;

void motion(int x,int y)
{
    printf("%d,%d\n",x,y);
    angle=x;
    angle2=y;
}

void display()
{
        glClear(GL_COLOR_BUFFER_BIT);

            glPushMatrix();
            glRotated(angle,0,1,0);
            glRotated(angle2,1,0,0);
            //面
            glColor3f(0,0,1);
            glBegin(GL_POLYGON);
                glVertex3f( 0.3, 0.3,0.1);
                glVertex3f( 0.3,-0.3,0.1);
                glVertex3f(-0.3,-0.3,0.1);

            glEnd();

            glBegin(GL_POLYGON);
                glVertex3f( 0.3, 0.3,0);
                glVertex3f( 0.3,-0.3,0);
                glVertex3f(-0.3,-0.3,0);

            glEnd();

            glBegin(GL_QUAD_STRIP);
                glVertex3f( 0.3, 0.3,0.1);
                glVertex3f( 0.3, 0.3,0);
                glVertex3f( 0.3,-0.3,0.1);
                glVertex3f( 0.3,-0.3,0);
                glVertex3f(-0.3,-0.3,0.1);
                glVertex3f(-0.3,-0.3,0);

            glEnd();
            //邊
            glColor3f(0,0,0);
            glBegin(GL_LINE_LOOP);
                glVertex3f( 0.3, 0.3,0.1);
                glVertex3f( 0.3,-0.3,0.1);
                glVertex3f(-0.3,-0.3,0.1);

            glEnd();

            glBegin(GL_LINE_LOOP);
                glVertex3f( 0.3, 0.3,0);
                glVertex3f( 0.3,-0.3,0);
                glVertex3f(-0.3,-0.3,0);

            glEnd();

            glBegin(GL_LINES);
                glVertex3f( 0.3, 0.3,0.1);
                glVertex3f( 0.3, 0.3,0);
                glVertex3f( 0.3,-0.3,0.1);
                glVertex3f( 0.3,-0.3,0);
                glVertex3f(-0.3,-0.3,0.1);
                glVertex3f(-0.3,-0.3,0);

            glEnd();

        glPopMatrix();
        glFlush();

        //angle+=0.01;

}
int main(int  argc, char** argv)
{
    glutInit(&argc,argv);
    glutCreateWindow("01160536");

    glutDisplayFunc(display);
    glutIdleFunc(display);

    //glutMotionFunc(mouse);
    glutMotionFunc(motion);

    glutMainLoop();
}





使用深度測試 讓圖形更符合立體感!!!
#include<GL/glut.h>
#include<stdio.h>
float angle=0,angle2=0;

void motion(int x,int y)
{
    printf("%d,%d\n",x,y);
    angle=x;
    angle2=y;
}

void display()
{
        glEnable(GL_DEPTH_TEST);
        glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

            glPushMatrix();
            glRotated(angle,0,1,0);
            glRotated(angle2,1,0,0);
            //面
            glColor3f(0,0,1);
            glBegin(GL_POLYGON);
                glVertex3f( 0.3, 0.3,0.1);
                glVertex3f( 0.3,-0.3,0.1);
                glVertex3f(-0.3,-0.3,0.1);

            glEnd();

            glBegin(GL_POLYGON);
                glVertex3f( 0.3, 0.3,0);
                glVertex3f( 0.3,-0.3,0);
                glVertex3f(-0.3,-0.3,0);

            glEnd();

            glBegin(GL_QUAD_STRIP);
                glVertex3f( 0.3, 0.3,0.1);
                glVertex3f( 0.3, 0.3,0);
                glVertex3f( 0.3,-0.3,0.1);
                glVertex3f( 0.3,-0.3,0);
                glVertex3f(-0.3,-0.3,0.1);
                glVertex3f(-0.3,-0.3,0);

            glEnd();
            //邊
            glColor3f(0,0,0);
            glBegin(GL_LINE_LOOP);
                glVertex3f( 0.3, 0.3,0.1);
                glVertex3f( 0.3,-0.3,0.1);
                glVertex3f(-0.3,-0.3,0.1);

            glEnd();

            glBegin(GL_LINE_LOOP);
                glVertex3f( 0.3, 0.3,0);
                glVertex3f( 0.3,-0.3,0);
                glVertex3f(-0.3,-0.3,0);

            glEnd();

            glBegin(GL_LINES);
                glVertex3f( 0.3, 0.3,0.1);
                glVertex3f( 0.3, 0.3,0);
                glVertex3f( 0.3,-0.3,0.1);
                glVertex3f( 0.3,-0.3,0);
                glVertex3f(-0.3,-0.3,0.1);
                glVertex3f(-0.3,-0.3,0);

            glEnd();

        glPopMatrix();
        glFlush();

        //angle+=0.01;

}
int main(int  argc, char** argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DEPTH);
    glutCreateWindow("01160536");

    glutDisplayFunc(display);
    glutIdleFunc(display);

    //glutMotionFunc(mouse);
    glutMotionFunc(motion);

    glutMainLoop();
}



沒有留言:

張貼留言