2021年3月24日 星期三

電腦圖學_09136054_week5

第一節課,人比較少。
先談類似萬花筒的作圖方式
https://jsyeh.org/processing/spirograph/
很好的點是老師有配合思考的說明,然後可以在課餘時間多利用。

接著稍微講解期中考可以練習的資源
120.125.80.50/GL/

然後時常不知道自己哪一班,所以再次提醒自己是二甲XD
win+shift+s是截圖,好用!


接著第二節課開始談Transformation
前面試著體驗老師給的程式中,變數改變後的差異
經過老師的示範後,深刻體會到
先旋轉後移動vs先移動後旋轉
變胖 旋轉 移動
變胖 移動 大轉盤

感覺是有感覺,但沒有特別懂
特別是從一開始老師建議從下往上看,跟一般寫程式的由下往上不太一樣,這樣的狀況,在自己寫程式的時候,也不清楚自己一片空白的情況下,是否能真正的重現老師今天的內容,僅概念也有一點不確定。下方是嘗試操作的畫面。



第三節課,開始進入寫程式階段,參考上次課程的內容,進行延伸。
其實剛好上禮拜請公假,所以並不清楚上禮拜內容,也尚未去看影片。
所以暫時先借用老師的程式進行練習。

程式寫起來沒太大問題,基本旋轉這樣
可惜猜不出來移動該怎麼寫,知道大概是先寫移動的語法上去,只是裡面的參數變動,該怎樣比較順暢不曉得,但可以使用使用者輸入的方式 打數值改變參數裡的數值,只是顯得很奇怪。


#include <GL/glut.h> ///(0) 使用GLUT外掛
int N=0, vx[3000], vy[3000];
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清空

    glPushMatrix();
        glRotatef(angle, 0, 0, 1);
        glBegin(GL_LINE_LOOP);
        for(int i=0; i<N; i++){
            glVertex2f( (vx[i]-150)/150.0, -(vy[i]-150)/150.0 );
        }             ///減一半,再除一半  減一半,再除一半,加負號
        glEnd();
    glPopMatrix();
    glutSwapBuffers();///交換兩倍的buffers
}
void keyboard(unsigned char key, int x,int y)
{
    angle+=9;
    display();
}

void motion( int x, int y )
{///TODO2: mouse motion 在拖動它
    vx[N]=x; vy[N]=y; ///把 vx, vy 的值存起來
    N++;
    display();///邊動mouse motion, 邊畫display()
}
int main(int argc, char ** argv)
{
    glutInit( &argc, argv ); ///(1) GLUT初始設定
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);///(2)顯示模式
    glutCreateWindow("08160011我是神奇的小葉同學");///(3)開窗

    glutDisplayFunc(display);///(4)等一下要顯示的函式
    glutKeyboardFunc(keyboard);
    glutMotionFunc(motion);
    glutMotionFunc( motion );///TODO2: mouse motion在動哦!!!!
    glutMainLoop();///(5)主要迴圈
}
暫時借用老師程式碼紀錄。










沒有留言:

張貼留言

距地表面160 Week11

 #include "glm.h" GLMmodel* pmodel = NULL; void drawmodel(void) {     if (!pmodel) { pmodel = glmReadOBJ("data/porsche.obj...