OpenGL+VS2010(64位)開發環境搭建(原創)

平臺: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替代。
        配置一:(freeglut):freeglut下載地址:http://sourceforge.net/projects/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 文件夾中
        (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
#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;
}
 
        配置二(glut不建議使用):glut下載地址:(大小約爲150k) http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip 
        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文件夾中。 
(3)把glut.dll和glut32.dll放到操作系統目錄下面的system32文件夾內。(x64的位置爲:C:\Windows\SysWOW64)  
(注:如在開發應用程序時用到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. 
        現在你可以把下面的例子拷貝到工程中去,編譯運行。你可以看到一個彩色三角形。 
  1. #include <stdlib.h>
  2. #include <GL/glut.h>

  3. void background(void)
  4. {
  5. glClearColor(0.0,0.0,0.0,0.0);//背景黑色 
  6. }

  7. void myDisplay(void)//畫三角形回調函數
  8. {
  9. glClear(GL_COLOR_BUFFER_BIT);
  10. glBegin(GL_TRIANGLES);
  11. glShadeModel(GL_SMOOTH);
  12. glColor3f(1.0,0.0,0.0);
  13. glVertex2f(-1.0,-1.0);
  14. glColor3f(0.0,1.0,0.0);
  15. glVertex2f(0.0,-1.0);
  16. glColor3f(0.0,0.0,1.0);
  17. glVertex2f(-0.5,1.0);
  18. glEnd();
  19. glFlush();
  20. }

  21. void myReshape(GLsizei w,GLsizei h)
  22. {
  23. glViewport(0,0,w,h);
  24. glMatrixMode(GL_PROJECTION);
  25. glLoadIdentity();
  26. if(w <= h)
  27. gluOrtho2D(-1.0,1.5,-1.5,1.5*(GLfloat)h/(GLfloat)w);
  28. else
  29. gluOrtho2D(-1.0,1.5*(GLfloat)w/(GLfloat)h,-1.5,1.5);
  30. glMatrixMode(GL_MODELVIEW);
  31. }

  32. int main(int argc, char* argv[])
  33. {
  34. /*初始化顯示模式、窗體位置及大小*/
  35. glutInit(&argc,argv);
  36. glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
  37. glutInitWindowSize(400,400);
  38. glutInitWindowPosition(200,200);

  39. /*創建窗口¨2*/
  40. glutCreateWindow("Triangle");

  41. /*繪製與顯示*/
  42. background();
  43. glutReshapeFunc(myReshape);//註冊回調函數
  44. glutDisplayFunc(myDisplay);

  45. glutMainLoop();//進入glut事件處理循環
  46. return 0;
  47. }
        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 。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章