平臺:Win7 x64版
VS2010
軟件包:(1)freeglut 2.8.1,(2)glew,(3)GLTools
目前 Windows環境下的OpenGL庫主要使用兩種:glut和freeglut。
glut代表OpenGL應用工具包,英文全稱爲OpenGL Utility Toolkit,是一個和窗口系統無關的軟件包, 它由Mark Kilgard在SGI時寫的。作爲AUX庫的功能更強大的替代品,用於隱藏不同窗口系統API的複雜性。 由於GLUT已經停止更新,考慮到軟件模塊更新及跨平臺目前多使用freeglut替代。
glut代表OpenGL應用工具包,英文全稱爲OpenGL Utility Toolkit,是一個和窗口系統無關的軟件包, 它由Mark Kilgard在SGI時寫的。作爲AUX庫的功能更強大的替代品,用於隱藏不同窗口系統API的複雜性。 由於GLUT已經停止更新,考慮到軟件模塊更新及跨平臺目前多使用freeglut替代。
(1)將下載的壓縮包解到freeglut目錄,進入visual studio目錄的vs2010打開freeglut.sln編譯庫文件,按release的x86和x64各編譯出lib文件,編譯後生成的文件在解壓目錄的lib中(注意不在工程源文件目錄中) 。
(2)把freeglut目錄的include/GL內的所有頭文件複製到x:\Program
Files (x86)\Microsoft SDKs\Windows\v7.0A\Include\gl文件夾中。
(3)把相應lib目錄下的freeglut.lib和freeglut_static.lib放到 x:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib文件夾中,x64版的放到 x:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\x64 文件夾中。
(3)把相應lib目錄下的freeglut.lib和freeglut_static.lib放到 x:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib文件夾中,x64版的放到 x:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\x64 文件夾中。
(4)把x86目錄中的freeglut.dll放到windows下的system32文件夾內。(x64下的放置到:C:\Windows\SysWOW64)
VS2010中的環境配置(以靜態庫版本爲例):
首先創建工程,其步驟如下:
(1)創建一個Win32 Console Application。 把freeglut_static.lib和GLTool.lib加入工程。
(2)工程選項-〉C/C++的附加包含目錄把freeglut和GLTools的頭文件目錄加上 。
現在你可以把下面的例子拷貝到工程中去,編譯運行。你可以看到一個彩色三角形。
// Triangle.cpp By ramonyang
配置二(glut不建議使用):glut下載地址:(大小約爲150k) http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip (1)創建一個Win32 Console Application。 把freeglut_static.lib和GLTool.lib加入工程。
(2)工程選項-〉C/C++的附加包含目錄把freeglut和GLTools的頭文件目錄加上 。
現在你可以把下面的例子拷貝到工程中去,編譯運行。你可以看到一個彩色三角形。
// Triangle.cpp By ramonyang
#include <GLTools.h> // OpenGL toolkit
#include <GLShaderManager.h> // Shader Manager Class //Glew包含GLTools的類庫
#define FREEGLUT_STATIC//採用靜態庫編譯需要本定義
#include <GL/glut.h> // Windows FreeGlut equivalent
GLBatch
triangleBatch;
GLShaderManager
shaderManager;
void ChangeSize(int w, int h)//改變視角大小
{
glViewport(0, 0, w, h);
}
// This function does any needed initialization on the rendering context.
// This is the first opportunity to do any OpenGL related tasks.
void SetupRC()
{
// Blue background
glClearColor(0.0f, 0.0f, 1.0f, 1.0f );
shaderManager.InitializeStockShaders();
// Load up a triangle
GLfloat vVerts[] = { -0.5f, 0.0f, 0.0f,
0.5f, 0.0f, 0.0f,
0.0f, 0.5f, 0.0f };
triangleBatch.Begin(GL_TRIANGLES, 3);
triangleBatch.CopyVertexData3f(vVerts);
triangleBatch.End();
}
// Called to draw scene
void RenderScene(void)
{
// Clear the window with current clearing color
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
GLfloat vRed[] = { 1.0f, 0.0f, 0.0f, 1.0f };
shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed);
triangleBatch.Draw();
// Perform the buffer swap to display back buffer
glutSwapBuffers();
}
// 主程序
int main(int argc, char* argv[])
{
gltSetWorkingDirectory(argv[0]);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
glutInitWindowSize(800, 600);
glutCreateWindow("Triangle");
glutReshapeFunc(ChangeSize);
glutDisplayFunc(RenderScene);
GLenum err = glewInit();
if (GLEW_OK != err) {
fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err));
return 1;
}
SetupRC();
glutMainLoop();
return 0;
}
VS2010環境配置 :
將下載的壓縮包解開,將得到5個文件(glut.dll, glut32.dll, glut.lib, glut32.lib,glut.h)
(1)把glut.h複製到x:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include\gl文件夾中。
(2)把glut.lib和glut32.lib放到 x:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib文件夾中。
將下載的壓縮包解開,將得到5個文件(glut.dll, glut32.dll, glut.lib, glut32.lib,glut.h)
(1)把glut.h複製到x:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include\gl文件夾中。
(2)把glut.lib和glut32.lib放到 x:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib文件夾中。
(3)把glut.dll和glut32.dll放到操作系統目錄下面的system32文件夾內。(x64的位置爲:C:\Windows\SysWOW64)
(注:如在開發應用程序時用到OpenGL輔助庫函數,則還需下載相應動態鏈接庫,包含glaux.dll, glaux.lib, glaux.h,相應步驟同上)
VS2010環境配置基於glut的OpenGL程序(不推薦)
(注:如在開發應用程序時用到OpenGL輔助庫函數,則還需下載相應動態鏈接庫,包含glaux.dll, glaux.lib, glaux.h,相應步驟同上)
VS2010環境配置基於glut的OpenGL程序(不推薦)
首先創建工程,其步驟如下:
(1)創建一個Win32 Console Application。
(2)鏈接OpenGL libraries。在Visual C++中先右擊項目,選擇屬性,找到連接器標籤,最後在輸入中的附加依賴庫加上opengl32.lib glut32.lib glu32.lib.
現在你可以把下面的例子拷貝到工程中去,編譯運行。你可以看到一個彩色三角形。
main函數中以glut開頭的函數都包含在glut.h中。GLUT庫的函數主要執行如處理多窗口繪製、處理回調驅動事件、生成層疊式彈出菜單、繪製位圖字體和筆畫字體,以及各種窗口管理等任務。
glutInit用來初始化GLUT庫並同窗口系統對話協商。
glutInitDisplayMode用來確定所創建窗口的顯示模式。參數GLUT_SINGLE 指定單緩存窗口,這也是缺省模式,對應的模式爲GLUT_DOUBLE 雙緩存窗口。參數GLUT_RGB指定顏色RGBA模式,這也是缺省模式,對應的模式爲GLUT_INDEX 顏色索引模式窗口。
glutInitWindowSize 初始化窗口的大小,第一個參數爲窗口的寬度,第二個參數爲窗口的高度,以像素爲單位。
glutInitWindowPosition 設置初始窗口的位置,第一個參數爲窗口左上角x的座標,第二個參數爲窗口左上角y的座標,以像素爲單位。屏幕的左上角的座標爲(0,0),橫座標向右逐漸增加,縱座標向下逐漸增加。
glutCreateWindow 創建頂層窗口,窗口的名字爲擴號中的參數。
glutDisplayFunc 註冊當前窗口的顯示回調函數。當一個窗口的圖像層需要重新繪製時,GLUT將調用該窗口的的顯示回調函數。在此例中的mydisplay就是顯示回調函數,顯示回調函數不帶任何參數,它負責整個圖像層的繪製。我們的大部分工作將集中在這個函數中。
glutMainLoop 進入GLUT事件處理循環。glutMainLoop函數在GLUT程序中最多隻能調用一次,它一旦被調用就不再返回,並且調用註冊過的回調函數。所以這個函數必須放在註冊回調函數的後面,此例中爲glutDisplayFunc 。
(1)創建一個Win32 Console Application。
(2)鏈接OpenGL libraries。在Visual C++中先右擊項目,選擇屬性,找到連接器標籤,最後在輸入中的附加依賴庫加上opengl32.lib glut32.lib glu32.lib.
現在你可以把下面的例子拷貝到工程中去,編譯運行。你可以看到一個彩色三角形。
- #include <stdlib.h>
- #include <GL/glut.h>
-
- void background(void)
- {
- glClearColor(0.0,0.0,0.0,0.0);//背景黑色
- }
-
- void myDisplay(void)//畫三角形回調函數
- {
- glClear(GL_COLOR_BUFFER_BIT);
- glBegin(GL_TRIANGLES);
- glShadeModel(GL_SMOOTH);
- glColor3f(1.0,0.0,0.0);
- glVertex2f(-1.0,-1.0);
- glColor3f(0.0,1.0,0.0);
- glVertex2f(0.0,-1.0);
- glColor3f(0.0,0.0,1.0);
- glVertex2f(-0.5,1.0);
- glEnd();
- glFlush();
- }
-
- void myReshape(GLsizei w,GLsizei h)
- {
- glViewport(0,0,w,h);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- if(w <= h)
- gluOrtho2D(-1.0,1.5,-1.5,1.5*(GLfloat)h/(GLfloat)w);
- else
- gluOrtho2D(-1.0,1.5*(GLfloat)w/(GLfloat)h,-1.5,1.5);
- glMatrixMode(GL_MODELVIEW);
- }
-
- int main(int argc, char* argv[])
- {
- /*初始化顯示模式、窗體位置及大小*/
- glutInit(&argc,argv);
- glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
- glutInitWindowSize(400,400);
- glutInitWindowPosition(200,200);
-
- /*創建窗口¨2*/
- glutCreateWindow("Triangle");
-
- /*繪製與顯示*/
- background();
- glutReshapeFunc(myReshape);//註冊回調函數
- glutDisplayFunc(myDisplay);
-
- glutMainLoop();//進入glut事件處理循環
- return 0;
- }
glutInit用來初始化GLUT庫並同窗口系統對話協商。
glutInitDisplayMode用來確定所創建窗口的顯示模式。參數GLUT_SINGLE 指定單緩存窗口,這也是缺省模式,對應的模式爲GLUT_DOUBLE 雙緩存窗口。參數GLUT_RGB指定顏色RGBA模式,這也是缺省模式,對應的模式爲GLUT_INDEX 顏色索引模式窗口。
glutInitWindowSize 初始化窗口的大小,第一個參數爲窗口的寬度,第二個參數爲窗口的高度,以像素爲單位。
glutInitWindowPosition 設置初始窗口的位置,第一個參數爲窗口左上角x的座標,第二個參數爲窗口左上角y的座標,以像素爲單位。屏幕的左上角的座標爲(0,0),橫座標向右逐漸增加,縱座標向下逐漸增加。
glutCreateWindow 創建頂層窗口,窗口的名字爲擴號中的參數。
glutDisplayFunc 註冊當前窗口的顯示回調函數。當一個窗口的圖像層需要重新繪製時,GLUT將調用該窗口的的顯示回調函數。在此例中的mydisplay就是顯示回調函數,顯示回調函數不帶任何參數,它負責整個圖像層的繪製。我們的大部分工作將集中在這個函數中。
glutMainLoop 進入GLUT事件處理循環。glutMainLoop函數在GLUT程序中最多隻能調用一次,它一旦被調用就不再返回,並且調用註冊過的回調函數。所以這個函數必須放在註冊回調函數的後面,此例中爲glutDisplayFunc 。