畫出一個小茶壺
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); ///清背景顏色(記憶體)
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 |




沒有留言:
張貼留言