1.主題 Rotate旋轉
jsyeh.org/3dcg 下載
data.zip
windows.zip
2.測試Rotate功能
決定旋轉方向
利用國中學習的右手定則 來判定它旋轉的方向
2022電腦圖學 Computer Graphics 授課教師: 葉正聖 銘傳大學資訊傳播工程系 每週主題: 程式環境、點線面顏色、移動/旋轉/縮放與矩陣(Matrix)、階層性關節轉動(T-R-T)、做出機器人、打光、貼圖、glu/glut函式、鍵盤、滑鼠、計時器(timer)、讀入3D模型、粒子系統、聲音、特效、投影矩陣、攝影機與運鏡、機器人2.0、期末作品
jsyeh.org/3dcg 下載
data.zip
windows.zip
決定旋轉方向
利用國中學習的右手定則 來判定它旋轉的方向
1. 主題: Rotate旋轉
jsyeh.org/3dcg10 下載
data.zip =>下載\windows\data\一堆3D模型
windows.zip=>下載\windows\Transformation.exe
2. 測試 角度
glRotatef(角度, x, y, z);
3. 最難的, 是不同的旋轉軸。
step01-1_介紹今天的主題「旋轉Rotate」先帶大家看課本的範例,解壓縮windows.zip並把 data.zip 正確放好,便能執行Transformation.exe 並試著改裡面的glRotatef(角度,....)
step01-2_接下來要介紹各種不同的旋轉軸,像是如果旋轉軸是0,1,0向上的Y軸,那它怎麼轉呢。如果旋轉軸是1,0,0向右的X軸,它的轉法,是頭往前倒。如果旋轉軸是1,1,0向右上斜,那轉動時,右肩往前倒。最難理解的是0,0,1向著前面的Z軸,如果你有右手比讚,便容易想像它怎麼轉動。
1.https://jsyeh.org/3dcg10/
下載win32,data
解壓縮windows.zip,data.zip
2.測試rotate方向,用安培右手定則可知道旋轉方向。
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(90,0,0,1);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week04 Rotate");
glutDisplayFunc(display);
glutMainLoop();
}
讓茶壺移動
#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.3);
glPopMatrix();
glutSwapBuffers();
}
void motion(int x,int y)
{
angle=x;
display();
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week04 Rotate");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMainLoop();
}
第三個程式碼
#include <GL/glut.h>
float angle=0 , oldX=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angle,0,0,1);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
void motion(int x,int y)
{
angle += (x-oldX);
oldX=x;
display();
}
void mouse (int button,int state,int x,int y)
{
oldX=x;
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week04 Rotate");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMouseFunc(mouse);
glutMainLoop();
}
week04
移動,茶壺,滑鼠事件
移動
進入老師的網站https://jsyeh.org/3dcg10-->下載Win32、data-->解壓縮
data到windows
茶壺
執行week02_GLUT的程式-->建立實心茶壺程式-->加入移動程式-->還原矩陣
滑鼠事件
用上面程式更改-->查詢座標系統
1.範例 https://jsyeh.org/3dcg10/
----------------------------------------------------------------------------------------------------
滑鼠移動控制
完整程式碼
利用滑鼠找座標
----------------------------------------------------------------------------------------------------------------
重點
#include <stdio.h> // 小黑 print 座標用
----------------------------------------------------------------------------------------------------------------
完整程式碼
★小技巧:
1.利用#include <math.h>可以用sin()、cos()
2. 以下程式碼可以形成圓形:(x,y可以更改圖形的位置)
void mycirle( float x , float y , float r){
glBegin(GL_POLYGON);
for( float a=0 ; a<3.1415926*2 ; a+=0.01){ ///乘2拿掉會有半圓 a讓圓的點變多
glVertex2f( x+r*cos(a), y+r*sin(a) );
}
glEnd();
}
練習範例:
1.去jsyeh.org/3dcg10/下載 data 跟win32
2.windows 解壓縮到windows\
data解壓縮後放進剛剛解壓縮的windows
3.執行今天要用的windows/Tranformation.exe:
右上角Screen-space view視窗 按右鍵:可以選擇其他形狀。
中下 Command manipulation window視窗按右鍵:可以調整旋轉、位置等的數值。
這周一開始我們先去https://jsyeh.org/3dcg10/的網站裡把data跟win32下載下來
之後把兩個檔案都解壓縮,然後把Transformation.exe打開
範例 http://jsyeh.org/3dcg10
1. 下載網頁中的data, win32
2. 將windows解壓縮, data.zip/data丟進解壓縮後的windows資料夾一. 一樣先安裝且設定好freeglut,OpecCV, 開啟CodeBlocks建立新專案 week11_gundam, 把 MyGundam.zip下載解壓縮後的data資料夾放到freeglut/bin裡面 把week09_openc...