2021年3月24日 星期三

yun_電腦圖學筆記week05

今天老師上課前先教了萬花尺 

http://jsyeh.org/processing/spirograph/?fbclid=IwAR1OVudXhHEobZwYHvfEex6jbAm9_vQkIWSV534cnb9WilqSMGuDrpV6SpM

接著老師教了上星期學的Transformation


點選右鍵第二個的Swap translate/rotate可以改變


點擊後一二行程式碼會互換,執行順序會改變

glTranslatef///搬到右邊的
glRotatef///旋轉的
glScalef///胖胖的
glBegin///藍色的車子
由下往上讀,以這樣的方式來執行程式碼


接著老師做了一個程式讓我們練習,畫好一個小圖案後,把glRotatef移動到最上面,按下空白鍵就會在這個座標上旋轉,右上角的angle也會顯示旋轉角度


接著打開上星期的程式碼先自己畫個圖


#include<GL/glut.h> int N=0,vx[3000],vy[3000]; float angle=0;///TODO: void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清空 glPushMatrix(); glRotatef(angle,0,0,1);///TODO:旋轉,對z軸轉 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(); } void keybord(unsigned char key,int x,int y) { angle++;///TODO: display();///TODO: } 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); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); glutCreateWindow("08160093"); glutDisplayFunc(display); glutKeyboardFunc(keybord);///TODO:按按鍵,它就會轉動!!! glutMotionFunc(motion);///TODO2:mouse motion在動 glutMainLoop(); }

螢光筆圈起來的部分是今天上課教的,按下空白鍵後即可轉動
按下空白鍵逆時針旋轉









沒有留言:

張貼留言

距地表面160 Week11

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