OpenGL 在Win7(32)上配置开发环境流程及注意问题

来源:互联网 发布:结构分析软件 编辑:程序博客网 时间:2024/05/22 21:47

在Win7 32位计算机上配置 OpenGL开发环境:Visual Studio 2013(编程环境)+库文件(freeglut,glew,gltools,glut)


具体步骤:

1.安装Visual Studio 2013(或者其他版本)。需要先安装IE10。


2.安装GLUT工具包。第一步:下载GLUT,将解压得到的.h文件放到Visual Studio 2013安装目录下“VC/include”下。可以在include目录下面新建一个GL文件夹,专门放置OpenGL的头文件,这样在编程时包含头文件时注意写成“#include<GL/glut.h>”。也可以不新建GL文件夹,这样在编程时包含头文件时注意写成“#include<glut.h>”。

       第二步:将解压得到的glut.lib和glut32.lib放到Visual Studio 2013安装目录“VC/lib”。

       第三步:将解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32文件夹下,典型位置:“C/Windows/System32”。假如是64位系统,放到“C/Windows/Syswow64”。


3.安装glew工具包。下载GLEW,将解压得到的.h文件,.lib文件,.dll文件按照安装GLUT工具包的路径放到相应的文件夹下面。


4.安装freeglut工具包。下载freeglut,解压。第一步:打开Visual Studio 2013开发环境。通过Visual Studio 2013打开解压freeglut后得到的工程文件(freeglut.sln)。将Visual Studio 2013的解决方案配置由Debug改为Release_Static。然后对整个工程生成解决方案。

第二步:第一步编译通过后,回到freeglut文件夹,编译会生成lib文件(在“lib/x86”文件夹下面找)。将lib文件和freeglut文件夹下的.h文件以及.dll文件按照安装GLUT工具包的路径放到相应的文件夹下面。


5.安装gltools工具包。下载gltools,解压。第一步:打开Visual Studio 2013开发环境。新建一个空的控制台项目。然后将解压后文件夹下的“Src\GLTools\src”目录下的所有cpp文件加入刚才新建的空的工程中。然后编译生成解决方案。

第二步:参考安装freeglut工具包,将.h文件,和编译生成的.lib文件放到相应的文件夹下。


6.打开Visual Studio 2013,新建一个工程(编写代码测试OpenGL用),进入“项目->属性->配置属性->链接器->输入->附加依赖项”,添加“freeglut.lib;glut32.lib;glew32s.lib;gltools.lib;”特别注意这几个lib的排列顺序,排列前后顺序不对的话,会导致编写的OpenGL程序编译出错,或者就算编译通过后,运行会卡死、停止工作等情况。


7.在刚才新建的工程中新建一个cpp文件,新建测试程序。具体的OpenGL代码如下:

#include <GLTools.h>            // OpenGL toolkit
#include <GLShaderManager.h>    // Shader Manager Class
#include<GLFrustum.h>
#include<math3d.h>
#include<StopWatch.h>
#include <GL/glut.h>            // Windows FreeGlut equivalent

GLBatch triangleBatch;
GLShaderManager shaderManager;
GLTriangleBatch sphere;
GLFrustum frustum;

M3DMatrix44f translation, rotation, modelviewmatrix, finalmatrix;

///////////////////////////////////////////////////////////////////////////////

void ChangeSize(int w, int h)
{
if (h == 0)
h = 1;
glViewport(0, 0, w, h);

frustum.SetPerspective(45.0, float(w) / float(h), 1.0, 10.0);
}

///////////////////////////////////////////////////////////////////////////////

void SetupRC()
{
// Blue background
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
shaderManager.InitializeStockShaders();
gltMakeSphere(sphere, 0.6,40, 20);
glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
}

///////////////////////////////////////////////////////////////////////////////

void RenderScene(void)
{
// Clear the window with current clearing color
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
static CStopWatch time;
GLfloat deg = time.GetElapsedSeconds()*45.0f;
m3dTranslationMatrix44(translation, 0.0f, 0.0f, x);
m3dRotationMatrix44(rotation, m3dDegToRad(deg), 1.0f, 0.0f, 0.0f);
m3dMatrixMultiply44(modelviewmatrix, translation, rotation);
m3dMatrixMultiply44(finalmatrix, frustum.GetProjectionMatrix(), modelviewmatrix);
GLfloat vBlack[] = { 0.0f, 0.0f, 0.0f, 1.0f };
shaderManager.UseStockShader(GLT_SHADER_FLAT, finalmatrix,vBlack);
sphere.Draw();
// Perform the buffer swap to display back buffer
glutSwapBuffers();
glutPostRedisplay();
}

///////////////////////////////////////////////////////////////////////////////

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;
}







0 0