1.先開啟上周的甜甜圈
2.glBegin(GL_LINE_LOOP); ///將線連成四方形
glBegin(GL_POLYGON);///四方形
3.glBegin(GL_QUAD_STRIP);///將兩面的連接,變成一個四方體
glVertex3f(0.2,0.2,0.5);
glVertex3f(0.2,0.2,-0.5);
glVertex3f(0.2,-0.2,0.5);
glVertex3f(0.2,-0.2,-0.5);
glVertex3f(-0.2,-0.2,0.5);
glVertex3f(-0.2,-0.2,-0.5);
glVertex3f(-0.2,0.2,0.5);
glVertex3f(-0.2,0.2,-0.5);
glVertex3f(0.2,0.2,0.5);
glVertex3f(0.2,0.2,-0.5);
glEnd();
4.將四方體加上邊線(圖中白色的線)↓↓↓
側邊的線↓↓↓
glBegin(GL_LINES);
glVertex3f(0.2,0.2,0.5);
glVertex3f(0.2,0.2,-0.5);
glVertex3f(0.2,-0.2,0.5);
glVertex3f(0.2,-0.2,-0.5);
glVertex3f(-0.2,-0.2,0.5);
glVertex3f(-0.2,-0.2,-0.5);
glVertex3f(-0.2,0.2,0.5);
glVertex3f(-0.2,0.2,-0.5);
glVertex3f(0.2,0.2,0.5);
glVertex3f(0.2,0.2,-0.5);
glEnd();
5.利用 mouse 旋轉,先在 main 增加glutMotionFunc(motion);///mouse的拖曳
增加 motion 函式,印出座標可知道滑鼠所在位置
如何使四方體不是透明的?
在 main 裡面 glutInit(&argc,argv);下一行增加
glutInitDisplayMode(GLUT_DEPTH);///讓顯示的Window有3D深度的功能
glEnable(GL_DEPTH_TEST);///開啟GL_DEPTH_TEST深度測試,讓近的面擋住遠的面
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
完整程式↓↓↓
#include <GL/glut.h>
#include <stdio.h>
float angleX=0,angleY=0;
void display()
{
glEnable(GL_DEPTH_TEST);///開啟GL_DEPTH_TEST深度測試,讓近的面擋住遠的面
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angleX,0,1,0);///左右轉動
glRotatef(angleY,1,0,0);///上下轉動
glColor3f(0,0.5,0.8);///畫面
glBegin(GL_LINE_LOOP);
glVertex3f(0.2,0.2,0.5);
glVertex3f(0.2,-0.2,0.5);
glVertex3f(-0.2,-0.2,0.5);
glVertex3f(-0.2,0.2,0.5);
glEnd();
glBegin(GL_POLYGON);
glVertex3f(0.2,0.2,-0.5);
glVertex3f(0.2,-0.2,-0.5);
glVertex3f(-0.2,-0.2,-0.5);
glVertex3f(-0.2,0.2,-0.5);
glEnd();
glBegin(GL_QUAD_STRIP);
glVertex3f(0.2,0.2,0.5);
glVertex3f(0.2,0.2,-0.5);
glVertex3f(0.2,-0.2,0.5);
glVertex3f(0.2,-0.2,-0.5);
glVertex3f(-0.2,-0.2,0.5);
glVertex3f(-0.2,-0.2,-0.5);
glVertex3f(-0.2,0.2,0.5);
glVertex3f(-0.2,0.2,-0.5);
glVertex3f(0.2,0.2,0.5);
glVertex3f(0.2,0.2,-0.5);
glEnd();///以上為畫面的
glColor3f(1,1,1);///從這邊開始畫線
glBegin(GL_LINE_LOOP);
glVertex3f(0.2,0.2,0.5);
glVertex3f(0.2,-0.2,0.5);
glVertex3f(-0.2,-0.2,0.5);
glVertex3f(-0.2,0.2,0.5);
glEnd();
glBegin(GL_LINE_LOOP);
glVertex3f(0.2,0.2,-0.5);
glVertex3f(0.2,-0.2,-0.5);
glVertex3f(-0.2,-0.2,-0.5);
glVertex3f(-0.2,0.2,-0.5);
glEnd();
glBegin(GL_LINES);
glVertex3f(0.2,0.2,0.5);
glVertex3f(0.2,0.2,-0.5);
glVertex3f(0.2,-0.2,0.5);
glVertex3f(0.2,-0.2,-0.5);
glVertex3f(-0.2,-0.2,0.5);
glVertex3f(-0.2,-0.2,-0.5);
glVertex3f(-0.2,0.2,0.5);
glVertex3f(-0.2,0.2,-0.5);
glVertex3f(0.2,0.2,0.5);
glVertex3f(0.2,0.2,-0.5);
glEnd();
glPopMatrix();
glFlush();
//angle+=0.05;
}
void motion(int x, int y)
{
printf("%d %d\n", x, y);///印出座標
angleX=x;
angleY=y;
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DEPTH);///讓顯示的Window有3D深度的功能
glutCreateWindow("02160074");
glutDisplayFunc(display);
glutIdleFunc(display);
///glutMouseFunc();///mouse的三個按鍵,按下去DOWN/彈起來UP
glutMotionFunc(motion);///mouse的拖曳
glutMainLoop();
}
沒有留言:
張貼留言