用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
3.點選Next
4.請命名你的標題
2.點選GLUT的圖示並點選GO
3.點選Next
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();
① 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);
















沒有留言:
張貼留言