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

2017年3月20日 星期一

Week03 浩丁洲街的上課筆記(補)

HW1. 複習上一周畫茶壺
像之前一樣,打開GLUT專案,修改裡面的程式碼以簡潔並劃出一個茶壺。
程式碼:
#include <GL/glut.h>
static void display (void)
{
    glutSolidTeapot(0.3);
    glutSwapBuffers();


}


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

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("I am number 1!!!");
    glutDisplayFunc(display);
    glutMainLoop();

}
 
HW2. 加入MouseFunc,抓滑鼠點下去的數據並可改變茶壺顏色
在主函式中加入glutMouseFunc(mouse);
並且在上方加入mouse 函式 static void mouse (int button, int state, int x  , int y )
並且加入 #include <stdio.h> ,讓我們可以用到 printf 可以將mouse4個數據列印出來。完成後如下圖:
 
接下來希望再點不同地方的時候茶壺可以更改顏色,在printf()函式下加入這兩行程式碼:
glColor3f(1,x/300.0,y/300.0);
glutPostRedisplay(); //呼叫此函式來重新顯示(整理)螢幕
 
*note main主函示中可該便是窗的大小(預設是300X300)
只要加入 glutInitWindowSize(500, 500); 可改變為500X500的視窗大小哦。
接著是要邊移動滑鼠邊改變顏色了,在主函式中加入glutMotionFunc(motion); 並在上方加入motion函式:
static void motion (int x, int y )
{
    printf("%d %d\n", x, y);


}
    glColor3f( 1, x/300.0, y/300.0);
    glutPostRedisplay();加入motion函式中
即為:
static void motion (int x, int y )
{
    printf("%d %d\n", x, y);
    glColor3f( 1, x/300.0, y/300.0);
    glutPostRedisplay();
}


Week 04 承諺的上課筆記

   一.
 
   1.讓茶壺往右移
   

   2.用滑鼠移動茶壺

   

   3.把茶壺變形(把glTranslatef 變成 glScalef)

   

   二.程式碼
 
   1.滑鼠移動茶壺

#include <GL/glut.h>
float mouseX=0,mouseY=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glTranslatef(mouseX,mouseY,0);
        glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();

}
void motion(int x,int y)
{
    mouseX = (x-150)/150.0;
    mouseY = -(y-150)/150.0;
    glutPostRedisplay();
}
int main(int argc, char **argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("04160622");

    glutDisplayFunc(display);
    ///glutMouseFunc(mouse);
    glutMotionFunc(motion);

    glutMainLoop();
}

   2.讓茶壺變形

#include <GL/glut.h>
float mouseX=0,mouseY=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glScalef(mouseX,mouseY,0);
        glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();

}
void motion(int x,int y)
{
    mouseX = (x-150)/150.0;
    mouseY = -(y-150)/150.0;
    glutPostRedisplay();
}
int main(int argc, char **argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("04160622");

    glutDisplayFunc(display);
    ///glutMouseFunc(mouse);
    glutMotionFunc(motion);

    glutMainLoop();
}

   三.老師截圖

   1.

   

   2.
 
   

   3.

   

   4.複習上禮拜小精靈

   

2017年3月19日 星期日

Week 03 一權的上課筆記

1.建立GLUT專案,使用freeglut修改程式碼印出上周作業茶壺

2.(1)修改程式碼加入滑鼠相關程式碼練習讓滑鼠點及視窗時可以顯示座標


   (2)加入程式碼,讓茶壺可以隨著座標改顏色
#include <GL/glut.h>
#include <stdio.h>
void mouse(int button, int state, int x, int y)
{
    printf("%d %d %d %d\n", button, state, x, y);
    glColor3f(1,x/300.0,y/300.0);
    glutPostRedisplay();
}
static void display(void)
{
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("GLUT Shapes");
    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMainLoop();
}

(3)加入motion程式碼,使滑鼠點擊拖曳小黑窗時,可以改變顏色
#include <GL/glut.h>
#include <stdio.h>
void mouse(int button, int state, int x, int y)
{
    printf("%d %d %d %d\n", button, state, x, y);
    glColor3f(1,x/300.0,y/300.0);
    glutPostRedisplay();
}
static void display(void)
{
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}
void motion(int x, int y)
{
    printf("%d %d\n", x, y);
    glColor3f(1,x/300.0,y/300.0);
    glutPostRedisplay();
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("GLUT Shapes");
    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMotionFunc(motion);
    glutMainLoop();
}
(4)加入能夠印出圓形的程式碼(POLYGON),然後可以結由拖曳滑鼠改變圓形的顏色

#include <GL/glut.h>
#include <math.h>
static void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glBegin(GL_POLYGON);
    for(float angle = 0; angle < 3.1415926*2; angle+=0.001)
    {
        glVertex2f( cos(angle), sin(angle));
    }
        glEnd();
        glutSwapBuffers();
}

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("GLUT Shapes");
    glutDisplayFunc(display);
    glutMainLoop();
}



(5)改變其參數可將圓變形

↑ 將邊上點的數量減少,接起來成多邊形

↑ 讓圓變得瘦瘦的

2017年3月18日 星期六

Week03陳冠霖的上課筆記

複習上周的畫茶壺:
打開GLUT project,將多餘的程式碼刪掉,由178行變成10行。
程式碼如下:
#include <GL/glut.h>
static void display(void)
{
    glutSolidTeapot(0.3);~~~畫茶壺。
    glutSwapBuffers();
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("GLUT Shapes");
    glutDisplayFunc(display);
    glutMainLoop();
}
本周課程:
每次點擊放開能顯示出滑鼠的資料(一次顯示2筆資料)
在程式碼中加入滑鼠的點擊函式:void mouse(int button, int state,int x, int y)。
button:滑鼠按鍵種類
state:滑鼠按鍵狀態,點下0,放開1
x,y:滑鼠的座標
在滑鼠的點擊函式中加入printf("%d %d %d %d\n", button, state, x, y);P.S:要使用printf標投必須有#include <stdio.h>
在main()的主程式裡加入glutMouseFunc(mouse);用來呼叫滑鼠的點擊函式。
程式碼如下:
#include <GL/glut.h>
#include <stdio.h>
void mouse(int button, int state, int x, int y)
{
    printf("%d %d %d %d\n", button, state, x, y);
}
static void display(void)
{
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("GLUT Shapes");
    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMainLoop();
}
每次點擊能根據座標變換圖案的顏色
在void mouse(int button, int state,int x, int y)滑鼠的點擊函式中加入 glColor3f(1,x/300.0,y/300.0);
    glutPostRedisplay();。
glColor3f(1,x/300.0,y/300.0);可以改變圖案的顏色,300.0代表視窗大小,除300.0可隨時調整作改變。
glutPostRedisplay();用來重新顯示(整理)display的程式,讓void mouse滑鼠的點擊函式能順利執行顯示。PS:Post便利貼用來提醒程式碼。
程式碼如下:
#include <GL/glut.h>
#include <stdio.h>
void mouse(int button, int state, int x, int y)
{
    printf("%d %d %d %d\n", button, state, x, y);
    glColor3f(1,x/300.0,y/300.0);
    glutPostRedisplay();
}
static void display(void)
{
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("GLUT Shapes");
    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMainLoop();
}
不只滑鼠點擊能顯示資料和變換顏色,增加能讓滑鼠移動也能顯示資料和變換顏色
在程式碼裡新增一個void motion(int x, int y)滑鼠的移動函式,在滑鼠的移動函式中加入printf("%d %d\n", x, y);,再加入glColor3f(1,x/300.0,y/300.0);glutPostRedisplay();
在main()的主程式裡加入glutMotionFunc(motion);用來呼叫滑鼠移動函式。
程式碼如下:
#include <GL/glut.h>
#include <stdio.h>
void mouse(int button, int state, int x, int y)
{
    printf("%d %d %d %d\n", button, state, x, y);
    glColor3f(1,x/300.0,y/300.0);
    glutPostRedisplay();
}
static void display(void)
{
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}
void motion(int x, int y)
{
    printf("%d %d\n", x, y);
    glColor3f(1,x/300.0,y/300.0);
    glutPostRedisplay();
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("GLUT Shapes");
    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMotionFunc(motion);
    glutMainLoop();
}
顯示座標的另一種方式
在void motion(int x, int y)滑鼠的移動函式新增printf("glVertex(%.2f,%.2f)\n",(x-250)/500.0,-(y-250)/500.0);
程式碼如下:
void motion(int x, int y)
{
    printf("%d %d\n", x, y);
    printf("glVertex(%.2f,%.2f)\n",(x-250)/500.0,-(y-250)/500.0);
    glColor3f(1,x/300.0,y/300.0);
    glutPostRedisplay();
}
畫出圓形或多角形圖案
在標投加入#include <math.h> ,讓數學符號能在程式中運算,EX:cos, sin.....等。
刪除static void display(void)中畫茶壺的程式碼 glutSolidTeapot(0.3);
在static void display(void)加入glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glBegin(GL_POLYGON);
 for(float angle = 0; angle < 3.1415926*2; angle+=0.001)
    {
        glVertex2f( cos(angle), sin(angle));
    }
        glEnd();
程式碼如下:
#include <GL/glut.h>
#include <math.h>
static void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glBegin(GL_POLYGON);~~~清出一些設定值。
    for(float angle = 0; angle < 3.1415926*2; angle+=0.001)
    {
        glVertex2f( cos(angle), sin(angle));
    }~~~整個for迴圈的程式,就是主要畫出圓的程式,做一次迴圈就代表一個點,形成很多點就成了圓型。如果點變少,像只有8個點,就會變成八角形。
        glEnd();
        glutSwapBuffers();
}

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("GLUT Shapes");
    glutDisplayFunc(display);
    glutMainLoop();
}

2017年3月13日 星期一

Week 03 語璇電圖


複習上周進度















1.開啟main.cpp程式,然後更改為

#include <GL/glut.h>
static void display(void)
{
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("I am a superman 04162495");
    glutDisplayFunc(display);
    glutMainLoop();
}

即可跑出茶壺















2.將程式碼改為

#include <math.h>
#include <stdio.h>
#include <GL/glut.h>
void mouse(int button, int state, int x, int y)
{

    printf("%d %d %d %d\n", button, state, x, y);
}

void display()
{
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("04162495");
    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMainLoop();
}


使其顯示滑鼠點擊的座標,將有數字顯示















3.在程式碼中增加
    glColor3f( 1, x/300.0, y/300.0);
    glutPostRedisplay();


程式碼:

#include <math.h>
#include <stdio.h>
#include <GL/glut.h>
void mouse(int button, int state, int x, int y)
{///滑鼠函式
    printf("%d %d %d %d\n", button, state, x, y);
}
void motion(int x, int y)
{
    printf("%d %d\n", x, y);
    glColor3f( 1, x/500.0, y/500.0);
    glutPostRedisplay();
}
void display()
{
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutInitWindowSize(500,500);
    glutCreateWindow("04160656");
    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMotionFunc(motion);

    glutMainLoop();
}















程式碼:

#include <GL/glut.h>
#include <math.h>
float mouth=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(1,1,0);
    glBegin(GL_TRIANGLE_FAN);
        glVertex2f(0,0);
        for(float angle=0+mouth; angle<= 3.1415926 *2-mouth; angle+=0.01)
        {
            glVertex2f(cos(angle),sin(angle));
        }
        glEnd();
    glutSwapBuffers();
}

void motion(int x,int y)
{
   mouth = x/300.0;
    glutPostRedisplay();
}
int main (int argc,char ** argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("04160656");

    glutDisplayFunc(display);
    ///glutMouseFunc(mouse);
    glutMotionFunc(motion);
    glutMainLoop();
}

Week03 20170313 芷萱的課堂筆記

複習:利用Week02的GLUT專案10行做出茶壺
       

先測試滑鼠事件
     程式碼:
         #include <math.h>
         #include <GL/glut.h>
         #include <stdio.h>///printf()
         void mouse(int button,int state,int x,int y)
         {///This is mouse function
              printf("%d %d %d %d\n",button,state,x,y);
         }
         void display(void)
         {
              glutSolidTeapot(0.3);
              glutSwapBuffers();
         }
         int main(int argc, char *argv[])
         {
             glutInit(&argc, argv);
             glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
     
             glutCreateWindow("04160391");
             glutDisplayFunc(display);
             glutMouseFunc(mouse);///test the mouse func
             ///glutMotionFunc(motion);
             glutMainLoop();
         }
       


   利用滑鼠點按改變顏色
     部分新增程式碼:
         void mouse(int button,int state,int x,int y)
         {///This is mouse function
              printf("%d %d %d %d\n",button,state,x,y);
              glColor3f(1,x/300.0,y/300.0);
              glutPostOverlayRedisplay();///display()
         }
         void display(void)
         {
              glutSolidTeapot(0.3);
              glutSwapBuffers();
         }
         int main(int argc, char *argv[])
         {
         glutInit(&argc, argv);
         glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
     
         glutCreateWindow("04160391");
         glutDisplayFunc(display);
         glutMouseFunc(mouse);///test the mouse func
         ///glutMotionFunc(motion);
         glutMainLoop();
         }
       


  同時利用滑鼠拖曳改變顏色
    部分新增程式碼:
      void mouse(int button,int state,int x,int y)
     {///This is mouse function
         printf("%d %d %d %d\n",button,state,x,y);
     }
     void motion(int x,int y)
     {///Now motion
         printf("%d %d\n",x,y);
         glColor3f(1,x/500.0,y/500.0);
         glutPostOverlayRedisplay();///display()
     }
     int main(int argc, char *argv[])
     {
         glutInit(&argc, argv);
         glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
         glutInitWindowSize(500,500);
         glutCreateWindow("04160391");
         glutDisplayFunc(display);
         glutMouseFunc(mouse);///test the mouse func
         glutMotionFunc(motion);///Now drag
         glutMainLoop();
    }
    

畫出圓
   程式碼:
     #include <GL/glut.h>
     #include <math.h>
     #include <stdio.h>///printf()
     void mouse(int button,int state,int x,int y)
     {///This is mouse function
         if(state==GLUT_DOWN) printf("glvertex2f(%.2f,%.2f);\n",(x-250)/250.0,-(y-250.0));
          ///改成這行程式可用滑鼠寫程式
     }
     void motion(int x,int y)
     {///Now motion
         printf("%d %d\n",x,y);
         glColor3f(1,x/500.0,y/500.0);
         glutPostOverlayRedisplay();///display()
     }
     void display(void)
     {
         glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
         glBegin(GL_POLYGON);///POLYGON可以改成別的型態LINE等等
         for(float angle=0;angle<3.14159*2;angle+=0.001)
         {
             glVertex2f(cos(angle),sin(angle));
         }
         glEnd();
         glutSwapBuffers();
     }
     int main(int argc, char *argv[])
     {
         glutInit(&argc, argv);
         glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
         glutInitWindowSize(500,500);
         glutCreateWindow("04160391");
         glutDisplayFunc(display);
         glutMouseFunc(mouse);///test the mouse func
         glutMotionFunc(motion);///Now drag
         glutMainLoop();
     }
     

滑鼠拖曳

1.開啟GLUT  freeglut  之後改寫程式碼
2.之後 加入滑鼠 mouse的程式 讓點擊 可以跳出數字
3.寫下 glcolor3f 程式 讓點擊後的茶壺 可以變顏色
4.之後加入void motion(int x,int y) 函式  讓滑鼠拖曳時可以一邊跑出數字一邊改顏色
  還可以用glutInitWindowSize() 設定視窗大小
5.改寫 Display 畫圓