2017年9月21日 星期四

Weiting的計圖第二週

主題 : 點、線、面、色彩

畫出一個小茶壺

1. 開啟codeblocks,並建立GLUT專案

2. 將此GLUT專案裡的main.cpp打開

3. 將部分程式碼複製到notepad++



程式碼 : 
#include <GL/glut.h>

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

}


4. 完成所有程式碼


程式碼 : 
#include <GL/glut.h>
///glut開頭的function是內建的函式

void display()
{
glClearColor(1,0,0,0); ///背景顏色(R,G,B,透明度)
glClear(GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT); ///清背景顏色(記憶體)
glutSolidTeapot(0.3);  ///畫茶壺

glutSwapBuffers(); ///交換繪圖記憶體(buffer)
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutDisplayFunc(display); ///註冊display函式
glutMainLoop();

}

比較 : 
glClearColor(1,0,0,0); ///"設定"顏色
glClear(GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT); ///"清"顏色

5. 執行結果
沒有glClearColor(1,0,0,0); ///背景顏色(R,G,B,透明度)





















glClearColor(1,0,0,0); ///背景顏色(R,G,B,透明度)
給小茶壺顏色

6. 加一行程式碼
加上 glColor3f(0,1,0); ///三個參數(參數值0.0-1.0)
程式碼 : 
#include <GL/glut.h>
///glut開頭的function是內建的函式

void display()
{
glClearColor(1,0,0,0); ///背景顏色(R,G,B,透明度)
glClear(GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT); ///清背景顏色(記憶體)
        glColor3f(0,1,0); ///三個參數(參數值0.0-1.0)
glutSolidTeapot(0.3);  ///畫茶壺

glutSwapBuffers(); ///交換繪圖記憶體(buffer)
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutDisplayFunc(display); ///註冊display函式
glutMainLoop();

}

7. 執行結果



打造多邊形

8.  修改程式碼 + 執行結果


程式碼 : 
#include <GL/glut.h>
///glut開頭的function是內建的函式

void display()
{
glClearColor(1,0,0,0); ///背景顏色(R,G,B,透明度)
glClear(GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT); ///清背景顏色(記憶體)
glutSolidTeapot(0.3);  ///畫茶壺
glColor3f(0,1,0);

glBegin(GL_POLYGON); ///開始畫(多邊形) glVertex3f(0,1,0); ///點(x,y,z) glVertex3f(-1,-1,0); glVertex3f(1,-1,0); glEnd(); ///結束畫

glutSwapBuffers(); ///交換繪圖記憶體(buffer)
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutDisplayFunc(display); ///註冊display函式
glutMainLoop();

}



補充
雙緩衝區繪圖
不會邊畫圖邊顯示導致一閃一閃

glutSwapBuffers(); 切換buffer










沒有留言:

張貼留言