顯示具有 week05 標籤的文章。 顯示所有文章
顯示具有 week05 標籤的文章。 顯示所有文章

2021年6月25日 星期五

距地表面160 Week05

 

可以畫圈的程式

#include <GL/glut.h>

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();

}
void keyboard(unsigned char key,int x,int y)
{
    angle++;
    display();
}
void motion(int x, int y)

{

    vx[N]=x; vy[N]=y;

    N++;

    display();

}

int main(int argc, char**argv)

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("08160191");
    glutKeyboardFunc( keyboard );

    glutDisplayFunc(display);

    glutMotionFunc(motion);

    glutMainLoop();

}

2021年6月8日 星期二

電腦圖學 week05

 

用老師給的程式開角度了解以下
glTranslatef(x,y,z);移動
glRotatef(angle,x,y,z);轉動
glScalef(x,y,z);縮放
車可以改成猛男喔
做出可以畫圈的程式

#include <GL/glut.h>

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();

}

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

{

    angle++;

    display();

}

void motion(int x,int y)

{

    vx[N]=x; vy[N]=y;

    N++;

    display();

}

int main(int argc, char *argv[]){

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("08163034");

    glutDisplayFunc ( display );

    glutKeyboardFunc (keyboard);

    glutMotionFunc(motion);

    glutMainLoop();

2021年4月28日 星期三

08160581 薑餅 圖學筆記 week05

 

用老師給的程式開角度了解以下
glTranslatef(x,y,z);移動
glRotatef(angle,x,y,z);轉動
glScalef(x,y,z);縮放
車可以改成猛男喔
做出可以畫圈的程式

#include <GL/glut.h>

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();

}

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

{

    angle++;

    display();

}

void motion(int x,int y)

{

    vx[N]=x; vy[N]=y;

    N++;

    display();

}

int main(int argc, char *argv[]){

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("08160121 good!");

    glutDisplayFunc ( display );

    glutKeyboardFunc (keyboard);

    glutMotionFunc(motion);

    glutMainLoop();






2021年4月4日 星期日

宇的電腦圖學筆記WEEK05

今天第一節沒到,因為人太少老師先講了一個萬花尺
 再來老師講了上星期那個ransformation,就是上次車子可以讓它移動 旋轉 縮放的




glTranslatef(x,y,z) 移動

glRotatef(x,y,z) 旋轉再來把上周的程式碼打開

glScalef(x,y,z) 物體大小(3)

程式碼是由下往上讀的


再來把上周的程式碼打開

#include <GL/glut.h>///使用GLUT外掛 #include <math.h>///使用數學外掛 #include <stdio.h>///因為要printf int N=0,vx[3000],vy[3000]; float angle=0;///角度 void display(void) { glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);///清空 glPushMatrix();///備份矩陣 glRotatef(angle,0,0,1);///旋轉對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 keyboard(unsigned char key, int x,int y) { angle++;///TODO display(); } void motion(int x,int y) { ///左,中,右,上,下,x座標,y座標 vx[N]=x; vy[N]=y; N++; display(); } int main(int argc, char *argv[])///main()函式 { glutInit(&argc, argv);///(1)Init初始化GLUT glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///(2)Init初始化 Display 的功能 glutCreateWindow("08160075 吳英昭");///(3)建立GLUT視窗 glutDisplayFunc(display);///(4)準備display()函式 glutKeyboardFunc(keyboard);///按按鍵才會轉動 glutMotionFunc(motion);///註冊motion函式 glutMainLoop();///(5)主要程式 }


2021年3月28日 星期日

Xian筆記-Week05

 期中考題!!!

中文也要寫喔!!! 
必須得知道程式是什麼意思



今日重點:

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

1.變數float angle=0;

#include <GL/glut.h>

#include <stdio.h>

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

float angle=0;


2.程式碼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();///更新畫面

}


3.函式void keyboard(unsigned char key,int x,int y)


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

{

    angle++;

    display();

}


4.程式碼glutKeyboardFunc()

int main(int argc, char *argv[])

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH)

    glutCreateWindow("07361092");

    glutDisplayFunc(display);

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

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

    glutMainLoop();

}

空白鍵! 旋轉!






2021年3月24日 星期三

懶嵐\(。∀ ° )/ Week05

I.

使用小葉老師寫的transform.exe
觀察
glTranslatef(x,y,z)移動
glRotatef(x,y,z)旋轉
glScalef(x,y,z)改變大小

II.

Step1.

打開上禮拜滑鼠畫圖的程式碼
#include <GL/glut.h>///使用GLUT外掛 #include <math.h>///使用數學外掛 #include <stdio.h>///因為要printf int N=0,vx[3000],vy[3000]; float angle=0;///角度 void display(void) { glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);///清空 glPushMatrix();///備份矩陣 glRotatef(angle,0,0,1);///旋轉對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 keyboard(unsigned char key, int x,int y) { angle++;///TODO display(); } void motion(int x,int y) { ///左,中,右,上,下,x座標,y座標 vx[N]=x; vy[N]=y; N++; display(); } int main(int argc, char *argv[ ])///main()函式 { glutInit(&argc, argv);///(1)Init初始化GLUT glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///(2)Init初始化 Display 的功能 glutCreateWindow("08160280蔡承泰");///(3)建立GLUT視窗 glutDisplayFunc(display);///(4)準備display()函式 glutKeyboardFunc(keyboard);///按按鍵才會動 glutMotionFunc(motion);///註冊motion函式 glutMainLoop();///(5)主要程式 }


小乖的圖學筆記 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();///主要函式

}

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

NEKO no Computer Graphics_week05


    早安

    (練習網址:https://120.125.80.50/GL/)


    這周要接續上周的內容


    上次的程式的移動旋轉


    其實可以交換移動和旋轉的程式 會有不同的結果


    程式碼要從下面讀到上面


    下面兩張圖是交換程式碼的差別


1.先做縮放,再做旋轉,最後再移動
2.一樣先縮放,再做移動,最後旋轉
    

    第一種是旋轉完再移動,旋轉軸是固定的,移動的值比較像座標系


    而第二種移動再旋轉,先移動遠離旋轉軸,再以旋轉軸為中心旋轉


    所以結果就會不一樣,下圖是解釋






    

    了解這個概念,接著就要寫程式了

    首先把上周程式叫出來



    增加了旋轉 glRotatef(a,x,y,z),也使用了很多新東西

    



    有用KeyBoard函式,glPushMatrix()/glPopMatrix()保存陣列才能正常移動

    只要按著按鍵就能旋轉

    時間的關係今天就到這裡

    下次見

    




    





距地表面160 Week11

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