1)自製3D模型
2)利用mouse旋轉
3)回家作業
1載freeglut,(codeblocks,libglut32.a)
上週的glutWireTorus(0.3,0.7,30,30)
會旋轉的甜甜圈
#include<GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glRotatef(angle,0,1,0);
glutWireTorus(0.3,0.7,30,30);
glFlush();
angle+=0.01;
}
int main(int argc,char **argv)
{
glutInit(&argc, argv);
glutCreateWindow("02160056簡瑜萱");
glutDisplayFunc(display);
glutMainLoop();
}
加glPushMatrix();
glPopMatrix();速度變慢
2D正方形
#include<GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
//glRotatef(angle,0,1,0);
glBegin(GL_LINE_LOOP);
glVertex2f(0.2,0.2);//2D
glVertex2f(0.2,-0.2);
glVertex2f(-0.2,-0.2);
glVertex2f(-0.2,0.2);
glEnd();
glPopMatrix();
glFlush();
angle+=0.01;
}
int main(int argc,char **argv)
{
glutInit(&argc, argv);
glutCreateWindow("02160056簡瑜萱");
glutDisplayFunc(display);
glutMainLoop();
}
3D旋轉正方形
#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);
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.01;
}
int main(int argc,char **argv)
{
glutInit(&argc, argv);
glutCreateWindow("02160056簡瑜萱");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
3D旋轉長方體
用POLYGON和QUAD_STRIP做出一立體長方形
#include<GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1,0,0);
glPushMatrix();
glRotatef(angle,0,1,0.4);
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();
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("02160056簡瑜萱");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
3D透明旋轉長方體加黑線
延用上一個程式加上黑線讓他看得更清楚
#include<GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1,0,0);前面是畫面
glPushMatrix();
glRotatef(angle,0,1,0.4);
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(0,0,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_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.01;
}
int main(int argc,char **argv)
{
glutInit(&argc, argv);
glutCreateWindow("02160056簡瑜萱");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
3D透明旋轉三角柱加黑線
改顏色並刪掉四邊形一個點座標即可形成
#include<GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1,1,0);
glPushMatrix();
glRotatef(angle,0,1,0.4);
glBegin(GL_POLYGON);
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);
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);
glEnd();
///後面是線
glColor3f(0,0,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);
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);
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);
glEnd();
glPopMatrix();
glFlush();
angle+=0.01;
}
int main(int argc,char **argv)
{
glutInit(&argc, argv);
glutCreateWindow("02160056簡瑜萱");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
滑鼠控制轉動
glutmotion(motion)//控制滑鼠移動
glutmouse(mouse)//滑鼠按和放開
#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);
glRotatef(angle2,1,0,0);
glColor3f(0,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);
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);
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);
glEnd();
///後面是線
glColor3f(0,0,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);
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);
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);
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("02160056簡瑜萱");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMotionFunc(motion);
glutMainLoop();
}
沒有留言:
張貼留言