2019年6月13日 星期四

week3

下載:
把windows壓縮檔解壓,把glut32 & data丟到裡面,執行Transformation

下載freeglut 做好前置作業
用上週畫出的茶壺
程式碼:
#include <GL/glut.h> ///使用GL/glut的外掛,幫你圖學
void display()
{
   glutSolidTeapot(0.3);
   glutSwapBuffers();
}
int main(int argc, char ** argv)
{
   glutInit( &argc, argv);
   glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
   glutCreateWindow("伊凡的第一個程式");
   glutDisplayFunc(display);
   glutMainLoop();
}

茶壺往右上移動 (但是換亂跑)
程式碼:
#include <GL/glut.h>
void display()
{
   glTranslatef(0.2, 0.2, 0);
   glutSolidTeapot(0.3);
   glutSwapBuffers();
}
int main(int argc, char ** argv)
{
   glutInit( &argc, argv);
   glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
   glutCreateWindow("week3");
   glutDisplayFunc(display);
   glutMainLoop();
}
茶壺往右上移動 (正常不會亂跑)
程式碼:
#include <GL/glut.h>
void display()
{ ///gl開頭,表示是GL的程式
   ///副作用:會亂動,要加上 glPushMatrix()
   glPushMatrix();
   glTranslatef(0.2, 0.2, 0); ///Trsnslate移動,f浮點數
   glutSolidTeapot(0.3);
   glPopMatrix(); ///還原矩陣
   glutSwapBuffers();
}///glut開頭,表示是GLUT的程式
int main(int argc, char ** argv)
{
   glutInit( &argc, argv); ///啟動GLUT
   glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
   ///啟動GLUT的Display的Mode模式:兩倍Buffer,有3D的深度
   glutCreateWindow("week3");
   glutDisplayFunc(display); ///Display的函數是display
   glutMainLoop();
}



茶壺 + 背景
程式碼:
#include <GL/glut.h>
void display()
{ ///gl開頭,表示是GL的程式
   ///副作用:會亂動,要加上 glPushMatrix()
   glPushMatrix();
       glBegin(GL_POLYGON);
           glColor3f(1.0, 0.8, 0.2);
           glVertex2f(0.5, 0.5);
           glVertex2f(0.5, -0.5);
           glVertex2f(-0.5, -0.5);
           glVertex2f(-0.5, 0.5);
       glEnd();
       glTranslatef(0.2, 0.2, 0); ///Trsnslate移動,f浮點數
       glColor3f(0,0,1);
       glutSolidTeapot(0.3);
   glPopMatrix(); ///還原矩陣
   glutSwapBuffers();
}///glut開頭,表示是GLUT的程式
int main(int argc, char ** argv)
{
   glutInit( &argc, argv); ///啟動GLUT
   glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
   ///啟動GLUT的Display的Mode模式:兩倍Buffer,有3D的深度
   glutCreateWindow("week3");
   glutDisplayFunc(display); ///Display的函數是display
   glutMainLoop();
}
茶壺 + 滑鼠
程式碼:
#include <GL/glut.h>
float x=0, y=0;
void display()
{
   glPushMatrix();
       glTranslatef(x/500.0, y/500.0, 0);
       glutSolidTeapot(0.3);
   glPopMatrix();
   glutSwapBuffers();
}
void motion(int nowx,int nowy)
{
   x=nowx; y=nowy; ///更新x,y
   display(); ///再畫display()
}
int main(int argc, char ** argv)
{
   glutInit( &argc, argv); ///啟動GLUT
   glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
   glutCreateWindow("week3");
   glutDisplayFunc(display);
   glutMotionFunc(motion); ///滑鼠有動作motion時,要叫motion()
   glutMainLoop();}


茶壺 + 滑鼠任意移動
程式碼:
#include <GL/glut.h>
float x=0, y=0;
void display()
{
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   glPushMatrix();
       glTranslatef((x-150)/150.0, -(y-150)/150.0, 0);
       glutSolidTeapot(0.3);
   glPopMatrix();
   glutSwapBuffers();
}
void motion(int nowx,int nowy)
{
   x=nowx; y=nowy; ///更新x,y
   display(); ///再畫display()
}
int main(int argc, char ** argv)
{
   glutInit( &argc, argv); ///啟動GLUT
   glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
   glutCreateWindow("week3");
   glutDisplayFunc(display);
   glutMotionFunc(motion); ///滑鼠有動作motion時,要叫motion()
   glutMainLoop();
}

沒有留言:

張貼留言