2018年3月19日 星期一

Week03_徐如君

用Shape程式複習上週課程
1.請先下載data,win32和glut32.dll的資料夾,並解壓縮

2.請把解壓縮的win32資料夾打開,並把glut32.dll複製到win32資料夾
3.請點選Shape,將會顯示Shape程式
4.透過Shape程式,我們可複習上週課程
   從圖中我們可看到兩個視窗,左視窗為Screen-space view
   這時請點選滑鼠右鍵,將會看到
   Options 選項
   -----分隔線-----------------------------------------
   Toggle big vertices           切換成大頂點
   Specify colors@vertices  指定顏色@頂點
   Toggle drawing outlines   切換繪製輪廓
5.而看到右邊的Command manipulation window視窗
一樣點擊右鍵,我們可看到
Shapes 形狀
-----分隔線-----------------------------------------
    英文                              中文(註解
POINT[p]                         點
LINES[l]                           線
LINE_LOOP[n]               畫線(所有點相互相連,首尾相連
LINE_STRIP[y]               畫線(所有點相互相連,首尾不相連)
TRIANGLES[t]                將每三個點圍成的三角形進行填充,相鄰的點之間不填充
TRIANGLE_FAN[f]         以第一個點為頂點,之後每兩個點合起來圍成的三角形進行填充
                                             ,相鄰的點之間填充
TRIANGLE_STRIP[x]    將每三個點圍成的三角形進行填充,相鄰的點之間填充
QUADS[q]                         將每四個點圍成的面進行填充,相鄰點之間不填充QUAD_STRIP[u]              每兩個點構成一條線,每兩條線構成一個四邊形
POLYGON[g]                    畫出多邊形
Reset parameters[r]          重設參數
-----分隔線-----------------------------------------
Quit

使用滑鼠畫圖

1.先開啟CodeBlocks的軟體,並從File→New中建立Project 

2.點選GLUT的圖示並點選GO


 3.點選Next

4.請命名你的標題
5.這時一樣打開上週下載的freeglut的資料夾,並檢查是否已複製libfreeglut.a的檔案

   和重新命名成libglut32.a



6.把資料夾的網址複製到location的下方空白欄


7.點選Finish即可

8.會看到一大堆的程式,請先全部刪除

9.請先輸入以下程式 (中文為註解

   #include<stdio.h>///printf()要用到

#include<GL/glut.h>///整套GLUT外掛
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glutSolidTeapot(0.3);
    glutSwapBuffers();///搭配GLUT_DOUBLE兩倍顯示

}
int main(int argc, char*argv[])///完整的main()參數
{
    glutInit(&argc,argv);///初始的參數,照著丟進去
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("Week03 Mouse");

    glutDisplayFunc(display);///等一下樓上會有display()
    ///glutMouseFunc(mouse);///等一下樓上會有mouse()滑鼠的事件
    ///glutMotionFunc(motion);///等一下樓上會有mouse()滑鼠motion事件

    glutMainLoop();///主要GLUT迴圈
}
10.請再加入和修改程式

 #include<stdio.h>///printf()要用到
#include<GL/glut.h>///整套GLUT外掛
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glutSolidTeapot(0.3);
    glutSwapBuffers();///搭配GLUT_DOUBLE兩倍顯示

}
void mouse(int button ,int state ,int x, int y)
{
    ///button(左,中,右鍵, state: 接下來/彈起來, x,y: mouse位置
    printf("%d %d %d %d\n", button,state,x,y);
}
int main(int argc, char*argv[])///完整的main()參數
{
    glutInit(&argc,argv);///初始的參數,照著丟進去
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("Week03 Mouse");

    glutDisplayFunc(display);///等一下樓上會有display()
    glutMouseFunc(mouse);///等一下樓上會有mouse()滑鼠的事件
    ///glutMotionFunc(motion);///等一下樓上會有mouse()滑鼠motion事件

    glutMainLoop();///主要GLUT迴圈
}
11.請再加入這行程式
     if(state==GLUT_DOWN) printf("glVertex2f(%f,%f);\n",(x-150)/150.0,(150-y)/150.0);
     
12.按右鍵選擇編輯→標記
 13.標記完請按Enter(便已複製
13.請用複製的頂點貼在程式上面並加入,修改以下內容
     加入glBegin(GL_LINE_LOOP);和複製內容
     請把glutSolidTeapot(0.3);隱藏或刪除
     並在頂點最後加入glEnd();
     

讓茶壺移動

1.請加入和修改以下內容
     float teapotX=0, teapotY=0;///茶壺的座標
      ② glPushMatrix();///備份矩陣
          glTranslatef(teapotX,teapotY,0);///依照茶壺的座標移動
          glutSolidTeapot(0.3);
          glPopMatrix();///還原矩陣
       ③ void motion(int x, int y)
        {
             teapotX=(x-150)/150.0; teapotY=(150-y)/150.0;///依照motion時的x,y來改teapot的座標
             glutPostRedisplay();
        }
       ④ glutMotionFunc(motion);
       

      






沒有留言:

張貼留言