- 課堂範例: https://jsyeh.org/3dcg10/
1. 下載 Win32 及 data 的範例檔案,並解壓縮
2. 解壓縮後,將data資料夾移至window資料夾中
3. 點開 Transformation.exe 即可操作
4. 點右鍵可更換模型,下面的數值可調整距離、大小縮放...等等
- Translate (移動)
1. 與Week01一樣,建立一個GLUT專案(Week04_Translate)
1.1 先進入 moodle 打開上課用軟體資料夾 下載 freeglut
1.2 下載好後解壓縮至桌面
1.3 打開lib資料夾 先複製一個相同的檔案 再改檔名為libglut32.a
1.4 CodeBlocks 建立 project 點選 GLUT project
1.5 修改專案名稱及檔案位置
1.6 GLUT 要在桌面的 freeglut 中
2.將所有原有程式刪除
3.先做出一個茶壺,利用 glTranslatef()更改位置。
為了讓他不隨著視窗的移動而更改位置,
所以要用 glPushMatrix() 備份陣列
glPopMatrix() 還原矩陣
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(0.3, 0.2, 0); ///向右上角移動
glColor3f(1, 0, 0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Translate");
glutDisplayFunc(display);
glutMainLoop();
}
- 自訂函式
- Mouse 滑鼠事件
1. 設定一個mouse函式(新增滑鼠事件),建立完之後要再 main 中加入 glutMouseFunc(mouse),
這樣才可以執行
2. 在輸出中
button 代表你是用哪一個鍵按下的 (左鍵為0 中鍵為1 右鍵為2)
state 代表你是點下、放開的指示 (點下為0 放開為1)
x y 代表點下的座標位置
#include <GL/glut.h>
#include <stdio.h> ///printf()
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSwapBuffers();
}
void mouse(int button, int state, int x, int y)
{
printf("%d %d %d %d\n", button, state, x, y);
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("mouse");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
return 0;
- Mouse 滑鼠移動茶壺
1. 前面的 mouse程式 再加上可以隨著滑鼠點擊而移動的程式
2. mouse口訣為 減一半 除一半 y還倒過來
#include <GL/glut.h>
#include <stdio.h> ///printf()
int mouseX=0, mouseY=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1, 1, 0); ///黃色
glPushMatrix();
glTranslatef((mouseX-150)/150.0, -(mouseY-150)/150.0, 0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
void mouse(int button, int state, int x, int y)
{
mouseX= x;
mouseY= y;
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("mouse");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}
- Mouse 滑鼠產生程式碼並且畫圖
沒有留言:
張貼留言