一、今天一樣先重複以往步驟下載freeglut並用codeblocks開專案~~~~
一回生二回熟,哈哈。
課程:(1)自製3D模型。
(2)利用mouse旋轉。
(3)回家作業。
二、開啟專案後,就利用上周的甜甜圈程式碼進行增添程式碼的動作就好!
#include <GL/glut.h>
float angle=0; // 新增的程式碼
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glRotated(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("0022 yo");
glutDisplayFunc(display);
glutMainLoop();
}
執行後,秀出成果~~~~~ 哈哈 會旋轉的甜甜圈
三、從2D變成3D 差別在於glutVertex2f改成glutVertex3f
#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.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("0022 yo");
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.4);
///前面是面
glColor3f(1,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_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();
glPopMatrix();
glFlush();
angle+=0.01;
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutCreateWindow("0022 yo");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
四、今天的程式碼跟早上的程式課的練習碼一樣長 = ="
好吧3D模型,也許有點樣子了,立體"空間"的感覺
奉上長長的程式碼:
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glRotated(angle,0,1,0.4);
///前面是面
glColor3f(1,0,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);
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); /// 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_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);
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("0022 yo");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
五、滑鼠在轉動並秀出x,y
#include <GL/glut.h>
#include <stdio.h>
float angle=0;
float angle2=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glRotatef(angle,0,1,0);
glRotatef(angle2,1,0,0);
///前面是畫面
glColor3f(1,0,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("0022 yo");
glutDisplayFunc(display);
glutIdleFunc(display);
///glutMouseFunc(mouse);///mouse的按鈕按下去down/彈起來Up
glutMotionFunc(motion); ///mouse的motion
glutMainLoop();
}
六、變成實心,有點厲害 哈哈
#include <GL/glut.h>
#include <stdio.h>
float angle=0;
float angle2=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glRotatef(angle,0,1,0);
glRotatef(angle2,1,0,0);
///前面是畫面
glColor3f(1,0,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("0022 yo");
glutDisplayFunc(display);
glutIdleFunc(display);
///glutMouseFunc(mouse);///mouse的按鈕按下去down/彈起來Up
glutMotionFunc(motion); ///mouse的motion
glutMainLoop();
}
六、變成實心,有點厲害 哈哈
#include <GL/glut.h>
#include <stdio.h>
float angle=0;
float angle2=0;
void display()
{
glEnable(GL_DEPTH_TEST);///開啟Depth Test 深度測試,近的會擋到遠的,遠的不會擋到近的
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angle,0,1,0);
glRotatef(angle2,1,0,0);
///前面是畫面
glColor3f(1,0,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);
glutInitDisplayMode(GLUT_DEPTH); ///讓顯示的WINDOW有3D深度的效果
glutCreateWindow("0022 yo");
glutDisplayFunc(display);
glutIdleFunc(display);
///glutMouseFunc(mouse);///mouse的按鈕按下去down/彈起來Up
glutMotionFunc(motion); ///mouse的motion
glutMainLoop();
}
#include <stdio.h>
float angle=0;
float angle2=0;
void display()
{
glEnable(GL_DEPTH_TEST);///開啟Depth Test 深度測試,近的會擋到遠的,遠的不會擋到近的
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angle,0,1,0);
glRotatef(angle2,1,0,0);
///前面是畫面
glColor3f(1,0,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);
glutInitDisplayMode(GLUT_DEPTH); ///讓顯示的WINDOW有3D深度的效果
glutCreateWindow("0022 yo");
glutDisplayFunc(display);
glutIdleFunc(display);
///glutMouseFunc(mouse);///mouse的按鈕按下去down/彈起來Up
glutMotionFunc(motion); ///mouse的motion
glutMainLoop();
}
沒有留言:
張貼留言