#week17
1.期末作品繳交方式
2.期末作品評分方式
3.網友問pop matrix(),push matrix()問題
##step01-1
##step02-2
---老師示範如何完成期末作品---
2022電腦圖學 Computer Graphics 授課教師: 葉正聖 銘傳大學資訊傳播工程系 每週主題: 程式環境、點線面顏色、移動/旋轉/縮放與矩陣(Matrix)、階層性關節轉動(T-R-T)、做出機器人、打光、貼圖、glu/glut函式、鍵盤、滑鼠、計時器(timer)、讀入3D模型、粒子系統、聲音、特效、投影矩陣、攝影機與運鏡、機器人2.0、期末作品
#week17
1.期末作品繳交方式
2.期末作品評分方式
3.網友問pop matrix(),push matrix()問題
##step01-1
##step02-2
---老師示範如何完成期末作品---
#week16
##step01-1
alpga內插公式: alpha: `0.0~ 1.0`
`angle = alpha*新 + (1-alpha)*舊`
ex.
alpha: 0 => 舊
alpha:0.5 =>半新半舊
alpha: 1=> 新
使用Excel or Google Spreadsheet 來做
#step01-2
用程式試試看 week15_angles_TRT_again拿來改
1.File-New-Project,GLUT,week16_interpolation 內插
2.複製程式,執行,按s會存一行,mouse motion改動作4次,按s存檔
3.原本失敗的結果,按r會讀到動作但不連續,關掉
接下來要改造程式
1.void myInterplate(float alpha)
# week15
PlaySound()更詳細解說
#week15
1.寫檔、讀檔
2.關節、做動畫
3.計時器、glutTimeFunc(時間,timer,參數t)
4.播放聲音
##step01-1
寫檔 File Output
0.File-New-Empty File,
1.fopen()開啟檔案
2.print()=>fprintf()
3.fclose()關閉檔案
#week13
##step01-1
glRectf(x1,y1,x2,y2)方塊
1.File-New-Project,GLUT專案
2.貼上GLUT 10行程式,不用茶壺
3.把手臂接到身體
#include<GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,1);//白色的
glRectf(0.3,0.5,-0.3,-0.5);//四邊形
glPushMatrix();
///glTranslatef(x,y,z);(3)把手臂掛回身體
///glRotatef(angle,0,0,1);(2)旋轉 對Z軸轉
///glTranslatef(x2,y2,z2);(1)把手臂的旋轉中心,放中心
glColor3f(1,0,0);//紅色的
glRectf(0.3,0.5,0.7,0.3);
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
//glutInitWindowSize(600,600);
glutCreateWindow("week13 rect TRT");
glutDisplayFunc(display);
glutMainLoop();
}

#step01-1
1.jsyeh.org/3dcg10 下載windows.zip ,data.zip
2.windows.zip => 下載\windows\Transformation.exe
3.data.zip => 下載\windows\data\模型
4.重點要有T移動 R轉動,按右鍵swap交換T R
5.glTranslatef(0.9 , 0, 0);移動
6.glRotatef(角度,0,1,0);轉動
在右邊轉動的藍色車子
```cpp
glTranslatef(0.9 , 0, 0);移動在右邊
glRotatef(角度,0,1,0);旋轉
畫一台藍色車子
```
```cpp
繞著中間轉的車子
glRotatef(角度,0,1,0);旋轉
glTranslatef(0.9 , 0, 0);移動在右邊
畫一台藍色車子
```
#step01-2
用另一個程式來理解OpenGL T-R-T的函式;對特定軸轉動練習
1. 120.125.80.50/GL 有程式,老師寫的程式,可以給我們更了解函式的運作方式
2. (右下角)點ToDraw, 左邊黑的地方可以畫圖
4. 可以畫個身體 叫 myDrawObject(0)
5. 可以再畫個手臂 叫 myDrawObject(1)
6.可以上下更改程式的順序,都試試看比較方便理解函式的運作
7.接下來是練習內容!
當我把glRotatef(angle,0,0,0);寫在兩個物件之上時,兩個都會轉動,因為代表兩個物件都在Rotate的函式之下
#step02-1
1.把glTranslatef();那一行,點它變紅色,就可以移動左邊的東西了
2.把glTranslatef();那一行,放在Rotatef()的下面手臂的上面
3.把另一個glTranslatef();放在Rotatef()的上面
```cpp
glPushMatrix();
myDrawObject(0);畫身體
glRotatef(angle,0,0,0);//這個旋轉會轉下面所有的東西
glTranslatef(0.02,-0.06);往左下方移動(讓軸心在正中央)
myDrawObject(1);畫手臂(右上方)
glPopMatrix();
```
```cpp
myDrawObject(0);畫身體
glPushMatrix()
glTranslatef(0.15,0.20,0);往右上方移
glRotatef(angle,0,0,0);//這個旋轉會轉下面所有的東西
glTranslatef(0.02,-0.06,0);往左下方移動(讓軸心在正中央)
myDrawObject(1);畫手臂(右上方)
glPopMatrix();
```
#step02-2
這裡老師在講解下周考試題目,運用到的是今天上課所學的T-R-T
```cpp
glPushMatrix()
glTranslatef(0.15,0.20,0);往右上方移
glRotatef(angle,0,0,0);//這個旋轉會轉下面所有的東西
glTranslatef(0.02,-0.06,0);往左下方移動(讓軸心在正中央)
myDrawHand(1);畫手(右上方)
glPopMatrix();
```
#step02-3
現在要寫程式了
1. File-New-Project,GLUT專案,名稱week12_TRT
2. 把十行程式碼放進去
3. 把T-R-T的6行放進去
4. 再讓他會自動轉
5. glutIdleFunc( display );
程式如下
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();///備份矩陣
glRotatef(angle,0,0,1);
glutSolidTeapot(0.2);
glPopMatrix();///還原矩陣
glutSwapBuffers();
angle+=0.1;
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week12_TRT");
glutIdleFunc(display);
glutDisplayFunc(display);
glutMainLoop();
}
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,1);
glutSolidTeapot( 0.3 );//茶壺當身體
glPushMatrix();///備份矩陣
glTranslatef(0.2,0,0);
glRotatef(angle,0,0,1);
glTranslatef(0.2,0,0);
glColor3f(1,0,0);//紅的
glutSolidTeapot( 0.2 );//小茶壺 當她是小手臂
glPopMatrix();///還原矩陣
glutSwapBuffers();
angle+=0.1;
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week12_TRT");
glutIdleFunc(display);
glutDisplayFunc(display);
glutMainLoop();
}
#step03-2
為了寫回家作業
1. 要有3D模型(可用MAYA自己建出來,也可以用網路上找的模型來裁切)需要包含身體、上手臂、下手肘。
回家作業就來改數值!
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,1);
glutSolidTeapot( 0.3 );//茶壺當身體
glPushMatrix();///右邊的手臂手肘!!!
glTranslatef(0.2,0,0);
glRotatef(angle,0,0,1);
glTranslatef(0.2,0,0);
glColor3f(1,0,0);//紅的
glutSolidTeapot( 0.2 );//小茶壺 當她是下手臂
glPushMatrix();///備份矩陣
glTranslatef(0.2,0,0);
glRotatef(angle,0,0,1);
glTranslatef(0.2,0,0);
glColor3f(1,0,0);//紅的
glutSolidTeapot( 0.2 );//小茶壺 當她是下手肘
glPopMatrix();///還原矩陣
glPopMatrix();///還原矩陣
glutSwapBuffers();
angle+=0.1;
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week12_TRT");
glutIdleFunc(display);
glutDisplayFunc(display);
glutMainLoop();
}
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,1);
glutSolidTeapot( 0.3 );//茶壺當身體
glPushMatrix();///右邊的手臂手肘
glTranslatef(0.2,0,0);
glRotatef(angle,0,0,1);
glTranslatef(0.2,0,0);
glColor3f(1,0,0);//紅的
glutSolidTeapot( 0.2 );//小茶壺 當她是下手臂
glPushMatrix();///備份矩陣
glTranslatef(0.2,0,0);
glRotatef(angle,0,0,1);
glTranslatef(0.2,0,0);
glColor3f(1,0,0);//紅的
glutSolidTeapot( 0.2 );//小茶壺 當她是下手肘
glPopMatrix();///還原矩陣
glPopMatrix();///還原矩陣
glPushMatrix();///左邊的手臂手肘!!!!!!!!!
glTranslatef(-0.2,0,0);
glRotatef(-angle,0,0,1);
glTranslatef(-0.2,0,0);
glColor3f(1,0,0);//紅的
glutSolidTeapot( 0.2 );//小茶壺 當她是下手臂
glPushMatrix();///備份矩陣
glTranslatef(0.2,0,0);
glRotatef(angle,0,0,1);
glTranslatef(0.2,0,0);
glColor3f(1,0,0);//紅的
glutSolidTeapot( 0.2 );//小茶壺 當她是下手肘
glPopMatrix();///還原矩陣
glPopMatrix();///還原矩陣
glutSwapBuffers();
angle+=0.1;
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week12_TRT");
glutIdleFunc(display);
glutDisplayFunc(display);
glutMainLoop();
}
step01
一. 一樣先安裝且設定好freeglut,OpecCV, 開啟CodeBlocks建立新專案 week11_gundam, 把 MyGundam.zip下載解壓縮後的data資料夾放到freeglut/bin裡面 把week09_openc...