2023年2月22日 星期三

Orangutan - 第二週 - 點線面色彩

=========================================================================

SECOND

一、老師帶大家看177行的程式碼,並做簡化,最終顯示茶壺的圖

 (把老師的freeglut壓縮檔點開,裡面的freeglut資料夾複製到桌面,再把libfreeglut.a複製並改成libglut32.a)

1.File->New->Project

2.選擇OpenGLproject

3.Next

4.先選點點點,選目錄在桌面,專案名字命名-week02_GLUT_first

5.Next

6.選擇freeglut的資料夾

7.Finish

8.顯示這6個圖形表示成功

9.在這177行程式碼裡找到要複製來用的程式碼

10.複製裡面的程式碼並在最上方加上
void display()
{
    glColor3f(1,1,0);///黃色
    glutSolidTeapot( 0.3 );///畫出一個實心的茶壺, 它的大小 0.3
    glutSwapBuffers();///請GLUT把畫面swap送到顯示的地方
}

11.加上一個藍色大茶壺
glColor3f(1,1,0);///黃色
glutSolidTeapot( 0.3 );///畫出一個實心的茶壺, 它的大小 0.3

12.將藍色的茶壺變成多邊形(三角形)
///glutSolidTeapot( 0.6 );///畫出一個實心的茶壺, 它的大小 0.3
glBegin(GL_POLYGON);///開始畫多邊形
        glVertex2f( 0, 1);///紅色頂點 Vertex
        glVertex2f(-1,-1);///綠色頂點 Vertex
        glVertex2f( 1,-1);///藍色頂點 Vertex
glEnd();///結束畫

13.將藍色的三角形變成漸變彩色
glColor3f(1,0,0); glVertex2f( 0, 1);///紅色頂點 Vertex
glColor3f(0,1,0); glVertex2f(-1,-1);///綠色頂點 Vertex
glColor3f(0,0,1); glVertex2f( 1,-1);///藍色頂點 Vertex

以上是第1、2節課所做的成果,以下則是程式碼
#include <GL/glut.h>
void display()
{
    glColor3f(0,1,1);///綠色
    ///glutSolidTeapot( 0.6 );///畫出一個實心的茶壺, 它的大小 0.3
    glBegin(GL_POLYGON);///開始畫多邊形
        glColor3f(1,0,0); glVertex2f( 0, 1);///紅色頂點 Vertex
        glColor3f(0,1,0); glVertex2f(-1,-1);///綠色頂點 Vertex
        glColor3f(0,0,1); glVertex2f( 1,-1);///藍色頂點 Vertex
    glEnd();///結束畫

    glColor3f(1,1,0);///黃色
    glutSolidTeapot( 0.3 );///畫出一個實心的茶壺, 它的大小 0.3
    glutSwapBuffers();///請GLUT把畫面swap送到顯示的地方
}
int main(int argc, char *argv[])
{///上面是特別的 main()函式 有很多參數
    glutInit(&argc, argv);///把GLUT開起來
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");///要開視窗
    glutDisplayFunc(display);///要顯示的對應函式
    glutMainLoop();///最後用 main迴圈 壓在最後面
}

二、老師使用上節課所教得程式碼再做延伸並示範回家作業的範例(使用的是比較複雜的方法)

1.先找好要畫出的圖片,並且做換算,記得要設定圖片的大小

2.並將程式碼由(一)的上面void display( )改為
void display()
{
    glColor3f(247/255.0, 247/255.0, 247/255.0);
    glBegin(GL_POLYGON);
        glVertex2f( 1, 1);
        glVertex2f(-1, 1);
        glVertex2f(-1,-1);
        glVertex2f( 1,-1);
    glEnd();

    glColor3f(244/255.0, 209/255.0, 33/255.0);
    glBegin(GL_POLYGON);
        glVertex2f( ( 45-100)/100.0, -(134-100)/100.0);
        glVertex2f( ( 36-100)/100.0, -(171-100)/100.0);
        glVertex2f( (108-100)/100.0, -(179-100)/100.0);
        glVertex2f( (104-100)/100.0, -(117-100)/100.0);
        ///口訣:減一半、除一半、y變負號
    glEnd();

    glutSwapBuffers();///請GLUT把畫面swap送到顯示的地方
}

三、用程式碼畫出圖形

1.呈現圓形

2.呈現多個圓形並改變它們的位置

以上是第3節課所做的成果,以下則是程式碼
#include <GL/glut.h>
#include <math.h>///為了cos,sin要用
void myCircle(float r, float x, float y)
{
    glBegin(GL_POLYGON);
    for(float a=0;a<2*3.141592;a+=0.01){
        glVertex2f(r*cos(a)+x,r*sin(a)+y);
    }
    glEnd();
}
void display()
{
    glColor3f(1,0,1); myCircle(0.6,0,0);///正中間

    glColor3f(1,0,0); myCircle(0.3, 0.5,0.5);///右上角
    glColor3f(0,1,0); myCircle(0.3,-0.5,0.5);///左上角
    glColor3f(1,1,0); myCircle(0.3,-0.5,-0.5);///左下角
    glColor3f(0,0,1); myCircle(0.3, 0.5,-0.5);///右下角

    glutSwapBuffers();///請GLUT把畫面swap送到顯示的地方
}

int main(int argc, char *argv[])///特別的main函式(有很多參數)
{
glutInit(&argc, argv);///把GLUT開起來
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");///開視窗
glutDisplayFunc(display);///顯示對應函式
glutMainLoop();///用main迴圈壓在最後面
}







沒有留言:

張貼留言