1
#include <GL/glut.h>
2
#include <math.h>
3
const int n = 200;
4
const GLfloat R = 0.5f;
5
const GLfloat Pi = 3.1415926536f;
6
7
void myDisplay(void)
8

{
9
int i;
10
glClear(GL_COLOR_BUFFER_BIT);
11
glBegin(GL_POLYGON);
12
for(i=0; i<n; ++i)
13
glVertex2f(R*cos(2*Pi/n*i), R*sin(2*Pi/n*i));
14
glEnd();
15
glFlush();
16
}
17
18
19
20
int main(int argc, char *argv[])
21

{
22
glutInit(&argc, argv);
23
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
24
glutInitWindowPosition(200, 200);
25
glutInitWindowSize(500, 500);
26
glutCreateWindow("第一個OpenGL程序");
27
glutDisplayFunc(&myDisplay);
28
glutMainLoop();
29
return 0;
30
}
31
先來看看上面的代碼,本程序是在win32 console application,即控制臺程序,所以會出現命令行對話框。現在的問題是,這個程序的各個部分到底是什么意思。
那么,我就逐個來講述吧。
首先從main函數入口進入,其中main函數的兩個參數就是命令行形參,然后對于#include <GL/glut.h>,這個是包括的一個glut的頭文件,里面定義了很多函數,在運行該程序之前,需要將VC中的相關環境設置好。這里略說。
看看第一個函數,從glutInit可以看到就是一個初始化,不錯,這個函數的作用就是初始化窗口背景,對于一個程序,在開始運行的時候的初始化工作的重要性,可想而知了,必要而且必須!
1.繪制圖形的步驟。所有的圖形都應該在glBegin()和glEnd()中繪制,否則
會默認為為沒有繪制的。
glBegin(GL_LINES);
glVertex2f(0.0f, 0.0f);
glVertex2f(2.0f,8.0f);
glEnd();
其次,glBegin()函數的模式,可以選擇
GL_POINTS,GL_LINES,GL_POLYGON,GL_LINE_LOOP
對于各種模式的說明:
GL_POINTS:繪制的是點,也就是單個的點,這樣顯示的時候不會看到。
GL_LINES:繪制的是一條直線,注意點的坐標一定要在繪制的范圍內,否
則的話會看不到的,我曾經做過,沒有顯示,還以為錯了……
GL_POLYGON:顯示的是一個多邊形,比如在其中繪制了三個點,那么以
這種模式顯示的話就是一個填充的三角形,為何,因為相當于連接這三個點
形成一個多邊形的來填充。
GL_LINE_LOOP:繪制出來的點將做到首尾相連,試想,如果不是用的這個
而是直接用line的話,那么就要手動連接,即在最后一個點的是很放一個首
節點連起來。
GL_LINE_STRIP:連起來的是一整條的。區別:與line不同,連接的是line
的話中間有間隔點就不會連起來,而用這個的話會把相鄰的點連起來。
2.坐標為原點的在正中間。畫出來的,看的。
3.畫出來的圖形是一樣:
void myDisplay(void)
{
GLfloat x;
int i;
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_LINES);
glVertex2f(0.0f, 0.0f);
glVertex2f(-0.123f,-0.423f);
glVertex2f(0.53f, 0.98f);
glVertex2f(0.0f, 0.0f);
glVertex2f(-0.123f,-0.423f);
glVertex2f(0.53f, 0.98f);
glEnd();
glFlush();
}
繪制順序的是每兩個點就做出來一條直線。
void myDisplay(void)
{
GLfloat x;
int i;
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_LINE_LOOP);
glVertex2f(0.0f, 0.0f);
glVertex2f(-0.123f,-0.423f);
glVertex2f(0.53f, 0.98f);
glEnd();
glFlush();
}
繪制的時候就是對于這三個點首尾相連。繪制的時候對于各個點依次聯系,
然后依次連起來,并最終結尾首尾,不管有幾個點。
4. glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE)
初始化顯示的模式,第一個參數顯示的是以RGB模式,后者是指單緩沖區。
詳細的后面學習中再遇到。
glutInitWindowPosition(200, 200); //初始化窗口的位置,一個點的坐
標
glutInitWindowSize(500, 500); //窗口的大小,長和寬
glutCreateWindow("第一個OpenGL程序");//窗口的名字,title。
5.調用相關的函數實現繪制,特別是對于一個繪制,用的是函數,調用下面
的是傳遞一個指針。
glutDisplayFunc(&myDisplay);
glutMainLoop();
posted on 2009-09-27 23:56
deercoder 閱讀(1758)
評論(0) 編輯 收藏 引用 所屬分類:
OpenCV / OpenGL