計算機圖形學(Computer Graphics,簡稱CG)是一種使用數學算法將二維或三維圖形轉化為計算機顯示器的柵格形式的科學。簡單地說,計算機圖形學的主要研究內容就是研究如何在計算機中表示圖形、以及利用計算機進行圖形的計算、處理和顯示的相關原理與算法。(來自百度百科)
OpenGL是個定義了一個跨編程語言、跨平台的編程接口的規格,它用於三維圖象(二維的亦可)。
OpenGL是個專業的圖形程序接口,是一個功能強大,調用方便的底層圖形庫。(來自百度百科)
今天開始就學習計算機圖形學和OpenGL,首先配置開發環境。
OpenGL核心庫系統本身都已經包含,但是除了OpenGL核心庫之外我們還需要GLUT這個實用工具包。
下載地址:http://download.csdn.net/detail/yue19870813/7883421。
下載完成后解壓出來會有5個文件,包括:glut.h, glut.dll, glut32.dll, glut.lib, glut32.lib。
將dll文件copy到C:\Windows\SysWOW64目錄下(如果為32位系統則在:C:\Windows\System32);
將lib文件copy到C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\下對應的版本,我的是64位;
最后將.h文件copy到C:\Program Files (x86)\Windows Kits\8.1\Include\um\gl目錄下,到此為止GLUT配置完成。
一、基本的OpenGL語法
OpenGL基本庫中函數名都要以gl為前綴,每個單詞第一個字母大寫,例如:glBegin,glClear,glCopyPixels等。
OpenGL中常量是GL為前綴,每個單詞大寫,之間使用下划線分割。
OpenGL中也有基本的數據類型,例如:GLbyte、GLshort、GLint、GLfloat、GLdouble、GLboolean。
二、程序中包含的頭文件
在windows系統中我們要在程序中引入OpenGL的核心庫和windows.h。因此我們的頭文件應該為:
#include <windows.h> #include <GL\GL.h> #include <GL\GLU.h>但是我們使用的是GLUT來處理窗口操作,所以就不需要引入GL.h和GLU.h了,只需要引入glut.h就可以了。此外我們還要引入c++中常用的頭文件,最終引入的內容應該為:
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <iostream> #include <string> #include <windows.h> #include <GL\glut.h>三、使用GLUT對窗口進行管理。
使用OpenGL實用庫的第一步是初始化GLUT,初始化函數是:
glutInit(&argc, argv);下面的函數可以給顯示的窗口一個標題:
glutCreateWindow("Test OpenGL Program");接着是我們主要要做的事情,就是在窗口顯示內容,使用下面命令可以將在lineSegment(我們自定義的繪圖方法,后面將會給出)中繪制的圖形賦給顯示窗口:
glutDisplayFunc(lineSegment);在所有繪制完成的最后,我們要調用下列語句將圖形內容激活,該函數必須是程序中的最后一個。
glutMainLoop();glutMainLoop()會使程序進入一個無窮循環之中,相當於我們的主循環。
四、完整的OpenGL程序。
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <iostream> #include <string> #include <windows.h> #include <GL\glut.h> using namespace std; void init(void) { //設置顯示窗口的背景為白色。參數順序為:紅、綠、藍、透明度。 glClearColor(1.0, 1.0, 1.0, 0.0); //設置投影類型:正投影 glMatrixMode(GL_PROJECTION); //觀察參數:x坐標值從0到200,y是從0到150 gluOrtho2D(0.0, 200.0, 0.0, 150.0); } //繪制線段的函數 void lineSegment(void) { //將窗口顏色的設置顯示到窗口上,參數是顏色緩存的位值 glClear(GL_COLOR_BUFFER_BIT); //設置顯示內容顏色 glColor3f(1.0, 0.0, 0.0); //繪制內容 glBegin(GL_LINES); glVertex2i(180, 15); glVertex2i(10, 145); glEnd(); glFlush(); } int _tmain(int argc, char **argv) { glutInit(&argc, argv); //設置窗口的緩存和顏色模型 //下面指定的是:窗口使用單個緩存並且使用RGB顏色模型來設定顏色值。 glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); //設置窗口左上角的位置 glutInitWindowPosition(50, 100); //設置窗口的寬高 glutInitWindowSize(800, 600); glutCreateWindow("Test OpenGL Program"); init(); glutDisplayFunc(lineSegment); glutMainLoop(); return 0; }這樣一個線段就被繪制出來了:
參考內容:《計算機圖形學(第三版)》 電子工業出版社
轉載請標明出處:http://blog.csdn.net/letthinking/article/details/39154401