2015年4月8日 星期三

02160651_許酉聖 Week5

1.自製3D模型

2.利用mouse旋轉

***************************************************************************
0.複習第四周還竟設置
.1.先試畫出四邊形的面和線+角度+旋轉
#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);///x,y,z
      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);///x,y,z
      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("XXXXXXXXX");
    glutDisplayFunc(display);
    glutIdleFunc(display); ///閒閒沒事做,就去呼叫函式display()
    glutMainLoop();
    return 0;

}

四邊形函式:glBegin(GL_QUAD_STRIP); ///四邊形_點對點縫合

#include <GL/glut.h>
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glPushMatrix();
    glRotatef(angle,0, 1, 0.5);///Z軸角度調一下
      glColor3f(1, 0, 0);
      glBegin(GL_LINE_LOOP);
      glVertex3f(0.2,0.2,-0.8);///x,y,z
      glVertex3f(0.2,-0.2,-0.8);
      glVertex3f(-0.2,-0.2,-0.8);
      glVertex3f(-0.2,0.2,-0.8);
      glEnd();
      glColor3f(0, 1, 0);
      glBegin(GL_POLYGON);
      glVertex3f(0.2,0.2,0.8);///x,y,z
      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();
    glPopMatrix();
    glFlush();
    angle+=0.01;

}
int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutCreateWindow("XXXXXXXXX");
    glutDisplayFunc(display);
    glutIdleFunc(display); ///閒閒沒事做,就去呼叫函式display()
    glutMainLoop();
    return 0;

}
進階:
#include <GL/glut.h>
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glPushMatrix();
    glRotatef(angle,0, 1, 0.5);
      glColor3f(1, 0, 0);///紅色
      ///前面是面
      glBegin(GL_POLYGON);
      glVertex3f(0.2,0.2,-0.8);///x,y,z
      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);///x,y,z
      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, 1, 0);///綠色
      glBegin(GL_LINE_LOOP);
      glVertex3f(0.2,0.2,-0.8);///x,y,z
      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);///x,y,z
      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.01;

}
int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutCreateWindow("XXXXXXXX");
    glutDisplayFunc(display);
    glutIdleFunc(display); ///閒閒沒事,就去呼叫函式display()
    glutMainLoop();
    return 0;

}
滑鼠控式轉動函式: glutMotionFunc(motion)


#include <GL/glut.h>
#include<stdio.h>
float angle=0,angle2=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glPushMatrix();
    glRotatef(angle,0, 1, 0.5);///轉動角度
    glColor3f(1, 0, 0);
    ///前面是面
    glBegin(GL_POLYGON);
    glVertex3f(0.2,0.2,-0.8);///x,y,z
    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);///x,y,z
    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, 1, 0);
    glBegin(GL_LINE_LOOP);
    glVertex3f(0.2,0.2,-0.8);///x,y,z
    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);///x,y,z
    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.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("XXXXXXXXX");
    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMotionFunc(motion);///滑鼠的動作
    glutMainLoop();
    return 0;
}
進階:
#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);
                                                     ///GL_DEPTH_BUFFER_BIT存深度功能
    glPushMatrix();
    glRotatef(angle,angle2, angle, angle2);
    glColor3f(1, 0, 0);
    ///前面是面
    glBegin(GL_POLYGON);
    glVertex3f(0.2,0.2,-0.8);///x,y,z
    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);///x,y,z
    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, 1, 0);
    glBegin(GL_LINE_LOOP);
    glVertex3f(0.2,0.2,-0.8);///x,y,z
    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);///x,y,z
    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.01;

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

}
int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DEPTH);///讓顯示視窗有3D深度功能
    glutCreateWindow("XXXXXXXXX");
    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMotionFunc(motion);///滑鼠的動作
    glutMainLoop();
    return 0;
}

沒有留言:

張貼留言