2019年4月26日 星期五

yusyuan👀 -Week10

| Week 10 |
§T-R-T 旋轉 (改變旋轉軸) §

----------------------------------------------------------------------------------------------------------------


●01
一樣到

http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/
下載[data][win32]gult32.dll                                               









●02

一樣先把windows.zip解壓縮到windows資料夾裡面















●03

一樣先把data資料夾拉到windows資料夾裡面
複製glut32.dll到windows資料夾裡面




















●04
打開Transformation.exe   














●05


Q: 自轉 VS 公轉的差別?      

A: Translatef 跟 Rotatef 的順序差別
(因為程式是一層一層由裡面往外面看)



自轉(自己轉)
R→T

glRotatef(x,y,z)

glTranslatef(x,y,z)
..
..


公轉(繞著東西轉)
T→R

glTranslatef(x,y,z)

glRotatef(x,y,z)
..
..

--------------------------------------------------------------------------------------------------------------



🔺GLUT置作業                                                                                                      
。打開 codeblocks                                                                                                          
    Files> New>project>GLUT                                                                              
到google搜尋 freegult windows 下載  Download freeglut 3.0.0 for MinGW   
。解壓縮 freeglut
打開 lib 找到 freeglut.a 並複製                                                                                
 freeglut.a 改為 libglut32.a                                                                            
複製 freeglut連接位置                                                                                        
找到 程式碼 main.c 並打開  執行完成!    



●06 
開啟GLUT 
打程式碼










◎程式碼  

#include <GL/glut.h>
float angle=0;
void display()
{
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glPushMatrix();
          glTranslatef(0,0.5,0);
          glutWireTeapot(0.3);
        glPopMatrix();
        glPushMatrix();
         glTranslatef(0.51,0.63,0); ///(3)希望把 會動的手 移到茶壺上
         glRotatef(angle,0,0,1);///(1) 這是手的旋轉
         glTranslatef(0.6,0,0); ///(2) 這是旋轉中心 先移到畫面的中心

         glRotatef(-90,0,1,0);
         glutWireCone(0.1,0.6,10,10);
        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("WEEK10");

    glutDisplayFunc(display);
    glutMotionFunc(motion);
    glutMainLoop();
}











沒有留言:

張貼留言