2023年3月8日 星期三

達yo - 旋轉Rotate_電腦圖學 - week04

今天上課主題是旋轉Rotate


1.前往https://jsyeh.org/3dcg10/,下載 data 跟 win32。

2.把windows解壓縮後,點開Transformation.exe。


3.打開後畫面呈現如下圖所示,藍色框框代表角度,橘色框框代表xyz軸。
*旋轉方向可用安培右手定律做判斷,以x軸為主,大拇指就是x軸,以y軸為主,大拇指就是y軸,以z軸為主,大拇指就是z軸。
所以當x=1,y=0,z=0,是上下旋轉(x軸旋轉),依此類推,y軸是左右旋轉,z軸則是逆時針旋轉。
x,y軸都是1,會往右下旋轉

02

第二節課開始實作


1.打開CodeBlocks,點選 file --> New --> project裡的GLUT project
1.1 將儲存位址改成桌面
1.2 將freeglut拉到桌面上
1.3 將freeglut裡lib的libfreeglut.a複製並改名libglut32.a
1.4 設定好後,便可執行出一堆圓圈圈的畫面

旋轉茶壺
2.把上週的程式碼複製貼上
3.刪減一些程式碼
4.增加程式碼(黃色劃起來)


#include <GL/glut.h>
float angle = 0;///宣告global全域變數
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);///清背景
    glPushMatrix();///備份矩陣
        glRotatef(angle, 0, 1,0);///旋轉angle角度
        glutSolidTeapot(0.3);///茶壺
    glPopMatrix();///還原矩陣
    glutSwapBuffers();

    angle++;///把角度++
}
int main(int argc,char* argv[])
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week03");

    glutDisplayFunc(display);
    glutIdleFunc(display);///有空idle時,就重畫畫面
    glutMainLoop();
}

有打光的旋轉茶壺

執行畫面


程式碼跟執行畫面


 

程式碼
清背景顏色+替換茶壺顏色

增加了glClearColor(1,1,1,1)跟glColor(1,1,0)


03
Rotate和Translate互換的影響

當Rotate在Translate前面
會是公轉(有種縮放的感覺,它繞著別人轉)

當Translate放在Rotate前面
會是自轉(沒有縮放的感覺,以自己為中心轉)

做出黃色茶壺(自轉)、紅色茶壺(公轉)




程式碼

沒有留言:

張貼留言