先談類似萬花筒的作圖方式
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)主要迴圈
}
暫時借用老師程式碼紀錄。


沒有留言:
張貼留言