2021年3月24日 星期三

小乖的圖學筆記 week05

展示萬花尺

效果影片 https://www.youtube.com/watch?v=ELrkairuidA

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

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

理解GLUT的程式碼讀取模式

1.利用Transformation實作移動轉動先後的差異

1-1

1-2

GLUT程式碼是由下往上讀的!!

先移動 旋轉點是固定不動的

所以才會造成先移動會繞著中心轉的現象

先旋轉 旋轉點會跟著物體移動

2.可以利用 120.125.80.50/GL 裡的 OpenGL T-R-T 練習

(同樣的網站裡有期中考題目練習喔)

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

畫圖並旋轉

1.到GitHub下載week04-2

2.新增全域變數float angle=0;

#include <GL/glut.h>///使用GLUT外掛

#include <stdio.h>

int n=0,vx[3000],vy[3000];

float angle=0;

3.新增程式碼glPushMatrix();

void display(void)

{

    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++)///用for畫出來

        {

            glVertex2f((vx[i]-150)/150.0,-(vy[i]-150)/150.0);///座標換算

        }

        glEnd();

    glPopMatrix();///還原矩陣


    glutSwapBuffers();///更新畫面

}

4.新增函式void keyboard(unsigned char key,int x,int y)

void keyboard(unsigned char key,int x,int y)

{

    angle++;

    display();

}

5.新增程式碼glutKeyboardFunc();

int main(int argc, char *argv[])///main()函式

{

    glutInit(&argc, argv);///Init初始化GLUT

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///Init初始化Display功能

    glutCreateWindow("07160325 小乖的畫");///建立自訂名稱的GLUT視窗

    glutDisplayFunc(display);///準備display()函式

    glutKeyboardFunc(keyboard);///按鍵盤呼叫keyboard函式

    glutMotionFunc(motion);///按滑鼠呼叫motion函式

    glutMainLoop();///主要函式

}

按下鍵盤空白鍵就會旋轉                                                                                                                                                                                                             .

沒有留言:

張貼留言

距地表面160 Week11

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