vs2012配置OpenGL SuperBible5環境

剛拿到opengl編程寶典第五版,打算配置好書中源碼的編程環境,折騰了一天,終於弄好了,現在記錄下完整的過程:

參考博客:http://www.csdn123.com/html/mycsdn20140110/e5/e55a7b5fee7751000622fef61ddec425.html


爲了方便,可以新建三個文件夾,用來放置所需的h文件,lib文件,dll文件。

這裏我把所有以下的文件提供下載,包括h,lib,dll三個文件夾,地址爲:http://pan.baidu.com/s/1pJG6NAb


1.freeglut

下載地址:http://http://sourceforge.net/projects/freeglut/files/freeglut/2.8.1

下載完成後,打開\freeglut-2.8.1\VisualStudio\2012路徑下的sln文件,分別用release和release_static生成解決方案。在\freeglut-2.8.1\lib\x86路徑下得到文件:freeglut.dll,freeglut.lib,freeglut_static.lib,放入lib文件夾中,另外在\freeglut-2.8.1\include\GL路徑下得到文件:freeglut.h,freeglut_ext.h,freeglut_std.h,glut.h,則可以在h文件夾中新建一個GL文件夾,把新得到的四個h文件放置進去。

2.glew

下載地址:http://sourceforge.net/projects/glew/files/glew/1.7.0/

鏈接中有win32版本和win64版本,請按照自己電腦的實際位數進行下載。將\glew-1.7.0\include\GL路徑下的三個文件加入h\GL中去,將\glew-1.7.0\lib路徑下的四個lib文件加入lib文件夾中,將\glew-1.7.0\bin路徑下的兩個dll文件放入dll文件夾中。

3.glut

下載地址:網上很多,百度即有。

解壓後將其中的lib和dll文件放入相對應的文件夾中。

注意的是其中也有glut.h文件,複製到h\GL中,替換原來的glut.h文件(freeglut中來)。

4.GLTools(折騰好久才弄明白)

這個我從書中附帶源碼中得到,書中實例下載地址:http://www.starstonesoftware.com/OpenGL

在vs2012中新建一個win32控制檯程序,項目名設爲gltools,點擊下一步,選擇靜態庫,注意不要選擇預編譯頭

將\SB5\Src\GLTools\src下的六個文件添加到源文件中,然後需要進一步配置:

項目右鍵->屬性->配置屬性->VC++目錄->包含目錄中添加F:\opengl\SB5\Src\GLTools\include和F:\opengl\SB5\Src\GLTools\include\GL(這個根據自己實際情況添加)。

項目右鍵->屬性->c/c++->預處理器->預處理器定義中添加_CRT_SECURE_NO_WARNINGSGLTools\include

在release下生成,就可以得到gltools.lib,添加到lib文件夾下。

將GLTools\include\中的h文件添加到h\中,注意GLTools\include\GL中的文件會覆蓋。


下一步我們需要把三個文件夾中的文件添加到vs2012的環境中(根據自己實際情況,即vs2012的安裝路徑可能會不同):

將h文件直接拷貝至E:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include

將lib文件拷貝至E:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib

將dll文件拷貝至E:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin


接下來可以嘗試跑如下實例:

新建win32控制檯程序,並稍作配置:

項目右鍵->屬性->連接器->輸入->依賴項,添加gltools.lib;freeglut.lib;glew32.lib;

   忽略特定默認庫,添加LIBCMT;MSVCRT;


<pre name="code" class="cpp">// Triangle.cpp
// Our first OpenGL program that will just draw a triangle on the screen.

#include <GLTools.h>            // OpenGL toolkit
#include <GLShaderManager.h>    // Shader Manager Class

#ifdef __APPLE__
#include <glut/glut.h>          // OS X version of GLUT
#else
#define FREEGLUT_STATIC
#include <GL/glut.h>            // Windows FreeGlut equivalent
#endif

GLBatch	triangleBatch;
GLShaderManager	shaderManager;

///////////////////////////////////////////////////////////////////////////////
// Window has changed size, or has just been created. In either case, we need
// to use the window dimensions to set the viewport and the projection matrix.
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();
	}


///////////////////////////////////////////////////////////////////////////////
// Main entry point for GLUT based programs
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;
	}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章