2018年3月9日 星期五

Week02_陳示珮

第二週
  • 主題 : 點 線 面 顏
  • 親手寫 : OpenGL/GLUT(10行)
  • 頂點 : glVertex2f(x,y)
  • 回家作業 : 20頂點
      *Vertex 頂點

製作茶壺
(1)比較高級的GLUT(OpenGL User Toolkit)
(2)主要的函式
(3)初始Initialize你的glut參數設定
(4)顯示模式 : (double buffers)
(5)建立視窗
(6)顯示函式display()用來畫圖的
(7)主要的迴圈,用來控制程式



改變茶壺顏色
加入程式碼 glColor3f(r,g,b);
可以上網找喜歡的顏色的R G B
*R G B都必須 /255.0 讓他成為浮點數 介於0~1之間 



改變茶壺顏色
程式碼glColor3ub(r,g,b)不用除




自己製作出三角形

程式碼

#include <stdio.h>
#include <GL/glut.h>
void display()
{
    glClearColor(175/255.0,238/255.0,238/255.0,1);
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_POLYGON);
       glColor3f(1,0,0); glVertex2f(-1,-1);
       glColor3f(0,1,0); glVertex2f(+1,-1);
       glColor3f(0,0,1); glVertex2f(0,1);
       glEnd();
       glutSwapBuffers();

}
int main(int argc,char **argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE);
    glutCreateWindow("Week02 Hello World Triangle");
    glutDisplayFunc(display);
    glutMainLoop();
}


回家作業

(1)上網搜尋想要畫的圖片

(2)複製圖片到小畫家,利用小畫家的游標功能找到座標

小提醒 : 
  • 可以到檢視選單開啟格線功能,幫助自己標記頂點利用較寬的筆標記頂點。
  • 圖片長寬調到整數能方便找到中心點,EX: 600 x 600。


(3)完成畫圖
程式碼

#include <stdio.h>
#include <GL/glut.h>
void display()
{
    glClearColor(1,1,1,1);// 背景顏色
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_POLYGON);  //開始畫(外面紅色區塊)
     glColor3f(1,0,0);
     glVertex2f((170-300)/300.0,(99-300)/300.0);
     //如果座標是 170 99 ( 600 x 600的圖),先把中心點減掉,再除300
      便會介於 -1~1之 (170-300)/300.0,(99-300)/300.0
       glColor3f(1,0,0);
       glVertex2f((210-300)/300.0,(95-300)/300.0);
       glColor3f(1,0,0);
       glVertex2f((309-300)/300.0,(91-300)/300.0);
       glColor3f(1,0,0);
       glVertex2f((410-300)/300.0,(95-300)/300.0);
       glColor3f(1,0,0);
       glVertex2f((450-300)/300.0,(100-300)/300.0);
       glColor3f(1,0,0);
       glVertex2f((474-300)/300.0,(130-300)/300.0);
       glColor3f(1,0,0);
       glVertex2f((481-300)/300.0,(210-300)/300.0);
       glColor3f(1,0,0);
       glVertex2f((470-300)/300.0,(290-300)/300.0);
       glColor3f(1,0,0);
       glVertex2f((460-300)/300.0,(324-300)/300.0);
       glColor3f(1,0,0);
       glVertex2f((440-300)/300.0,(333-300)/300.0);
       glColor3f(1,0,0);
       glVertex2f((420-300)/300.0,(335-300)/300.0);
       glColor3f(1,0,0);
       glVertex2f((320-300)/300.0,(340-300)/300.0);
       glColor3f(1,0,0);
       glVertex2f((220-300)/300.0,(337-300)/300.0);
       glColor3f(1,0,0);
       glVertex2f((180-300)/300.0,(334-300)/300.0);
       glColor3f(1,0,0);
       glVertex2f((155-300)/300.0,(322-300)/300.0);
       glColor3f(1,0,0);
       glVertex2f((148-300)/300.0,(310-300)/300.0);
       glColor3f(1,0,0);
       glVertex2f((140-300)/300.0,(290-300)/300.0);
       glColor3f(1,0,0);
       glVertex2f((136-300)/300.0,(211-300)/300.0);
       glColor3f(1,0,0);
       glVertex2f((140-300)/300.0,(150-300)/300.0);
       glColor3f(1,0,0);
       glVertex2f((150-300)/300.0,(117-300)/300.0);
       glColor3f(1,0,0);
       glVertex2f((160-300)/300.0,(105-300)/300.0);
    glEnd();  //結束(外面紅色區塊)

    glBegin(GL_POLYGON);//開始畫(內部白色三角型)
        glColor3f(1,1,1);
        glVertex2f((274-300)/300.0,(162-300)/300.0);
        glColor3f(1,1,1);
        glVertex2f((364-300)/300.0,(215-300)/300.0);
        glColor3f(1,1,1);
        glVertex2f((274-300)/300.0,(268-300)/300.0);
    glEnd();          //結束(內部白色三角型)
    glutSwapBuffers();
}
int main(int argc,char **argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE);
    glutCreateWindow("Week02 Hello World Triangle");

    glutDisplayFunc(display);
    glutMainLoop();
}






































































































































































































































































沒有留言:

張貼留言