重點!!! 要對應的
glBegin( ) && glEnd( )
glPushMatrix( ) && glPopMatrix( )
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();
}
沒有留言:
張貼留言