WEEK05---TNT特定軸轉
老師的網址>> https://jsyeh.org/3dcg10/
打開transformation.exe檔觀察
可以理解為--白框(車子)--橘框(變形的)---藍框(轉動)---黃框(移動的)
此時的藍框代表的轉動是以車子中心為轉軸
**黃框>>移動到右邊**
試著把前2排調換看看兩者的差別
--------------------------------------------------------------------------------------------------------------------------
▨第一個程式碼嘗試令上週的茶壺旋轉起來
#include <GL/glut.h>
float angle=0;
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(0,0.3,0.7);
glPushMatrix();
glTranslatef(0.8,0,0);
glRotatef(angle,0 ,0 ,1);
glutSolidTeapot( 0.3 );
glPopMatrix();
glColor3f(0.8,0,0.4);
glPushMatrix();
glRotatef(angle,0 ,0 ,1);
glTranslatef(0.8,0,0);
glutSolidTeapot( 0.3 );
glPopMatrix();
glutSwapBuffers();
angle++;
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
紫色茶壺改為對Z軸做旋轉
紅色茶壺的轉動往右移
-----------------------------------------------------------------------------------------------------------------------------
▨嘗試了解TRT 利用老師寫的畫圖程式畫出小人來理解
利用老師寫的Processing>>opengl_TRT檔案,畫出小人>>把移動的方塊都拉出來
黃色小手目前是以原點為中心做旋轉
因為現在的手是以中心在原點做旋轉 我們希望轉動自然一點
先移動到原點( 第一個Trans1)
再把轉動拉回來(Rotate) 令小手對Z軸做旋轉運
再把小手移至目標位置(Trans2)
黃色小手目前是以肩關節的位置做旋轉
-----------------------------------------------------------------------------------------------------------------------------
▨下週小考題目---TRT
glPushMartix();
glTranslatef(-0.5,-0.9); //最後的中心點
glRotate(-45,0,0,1); //轉動多少度
glTranslatef(-0.8,0.9); //把原本的中心點移到原點(如果原本是1,-1)>>(-1,1)
drawHand();
glPopMartix();
-----------------------------------------------------------------------------------------------------------------------------
▨努力理解TRT 利用小方塊理解旋轉中心
#include <GL/glut.h>
float angle=0; //給角度初始值=0
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,0.2,0.2);
glPushMatrix();
glutSolidCube(0.5);
glPushMatrix();
glTranslatef(0.25,0.25,0); //掛到右上角
glRotatef(angle,0,0,1); //旋轉
glTranslatef(0.25,0.25,0); //把旋轉中心放到中間
// glTranslatef(0.5,0.5,0);//把移動取消
glColor3f(0,0.4,0.5);
glutSolidCube(0.5);
glPopMatrix();
glutSwapBuffers();
angle++; //角度加加(轉起來)
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
把中心點放至中間(T1)
把中心點移至右上(T2)
-----------------------------------------------------------------------------------------------------------------------------
沒有留言:
張貼留言