2021年3月3日 星期三

張淳雅_Week02

茶壺

1.開一個OpenGL,下載freeglut,再開一個GLUT,簡化main()函式並更改視窗名稱
int main(int argc, char *argv[])///main()函式
{
    glutInit(&argc, argv);///Init初始化GLUT
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    ///Init初始化Display的功能
    glutCreateWindow("08160173張淳雅O.O");///建立GLUT視窗
    glutDisplayFunc(display);///準備display()函式
    glutMainLoop();///主要函式
}

簡化display()函式並繪製一個茶壺
static void display(void)
{
    const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;///清背景
    glutSolidTeapot(0.3);
    glutSwapBuffers();///更新畫面
}

2.重新開啟新的GLUT,新增顏色
#include <GL/glut.h> 

void display(){
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(1, 0, 0);///(R,G,B)
    glutSolidTeapot(0.3);
    glutSwapBuffers();

}

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("08160173張淳雅O.O");
    glutDisplayFunc(display);
    glutMainLoop();
}




3.在茶壺後面加三角形(先寫三角形,再寫茶壺)
void display(){
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glBegin(GL_TRIANGLES);

        glColor3f(1.0f, 0.0f, 0.0f);   glVertex2f(0.0f,   1.0f);
        glColor3f(0.0f, 1.0f, 0.0f);   glVertex2f(0.87f,  -0.5f);
        glColor3f(0.0f, 0.0f, 1.0f);   glVertex2f(-0.87f, -0.5f);

    glEnd();

    glColor3f(1, 1, 1);
    glutSolidTeapot(0.3);
    glutSwapBuffers();

}

*各種繪圖參數*
來源: http://www.dgp.toronto.edu/~ah/csc418/fall_2001/tut/ogl_draw.html

4.利用數學運算、多邊形參數
#include <GL/glut.h>
#include <math.h> ///使用數學外掛 cos()、sin()

void display(){
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glBegin(GL_POLYGON);///多邊形
    glColor3f(1.0f, 0.0f, 0.0f);
    for (float angle=0; angle<3.1415963*2; angle+=0.01){
        glVertex2f( cos(angle), sin(angle) );
    }
    glEnd();

    glColor3f(1, 1, 1);
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}

畫圖

1.沿用上面的檔案做修改劃出一個三角形
void display(){
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glBegin(GL_POLYGON);
        glColor3f(176/225.0, 199/225.0, 146/225.0);///顏色
        glVertex2f((156-150)/150.0, -(136-150)/150.0);
        glVertex2f((140-150)/150.0, -(170-150)/150.0);
        glVertex2f((196-150)/150.0, -(166-150)/150.0);///三個點的位置
    glEnd();
    glutSwapBuffers();
}

2.加入第二個色塊
void display(){
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glBegin(GL_POLYGON);
        glColor3f(72/225.0, 90/225.0, 116/225.0);
        glVertex2f((102-150)/150.0, -(250-150)/150.0);
        glVertex2f((216-150)/150.0, -(250-150)/150.0);
        glVertex2f((192-150)/150.0, -(176-150)/150.0);
        glVertex2f((133-150)/150.0, -(148-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);
        glColor3f(176/225.0, 199/225.0, 146/225.0);
        glVertex2f((156-150)/150.0, -(136-150)/150.0);
        glVertex2f((140-150)/150.0, -(170-150)/150.0);
        glVertex2f((196-150)/150.0, -(166-150)/150.0);
    glEnd();
    glutSwapBuffers();
}

*作業二*

利用頂點、色彩, 畫出你覺得很帥的圖片

請利用老師上課時教的點線面顏色, 來設計畫出你想要呈現的圖

註: 請上傳「1張截圖」, 同時看到CodeBlocks程式碼, 也有執行時秀出來的圖


1. 頂點可以多一點

2. 色彩可以漂亮一點

3. 老師教小畫家,可幫你找出色彩、座標, 記得做單位換算成 -1...+1



沒有留言:

張貼留言

距地表面160 Week11

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