更多内容可参考
已解决freeglut
配置安装,接下来处理Glew
和 GLTools
注:GLew中的GL目录下的内容没有问题,不确定freeglut中GL下的内容有没有问题。vs2012安装路径(E:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\GL)
前言
第一个OpenGL项目Triangle
实现所需要的工具和库
1、vs2012中文版
2、OpenGL超级宝典(中文第五版):蓝宝书里要用到三个库(freeglut、glew和GLTools)
3、freeglut-3.0.0 下载地址:http://freeglut.sourceforge.net/
4、glew-1.13.0 下载地址:http://glew.sourceforge.net/
5、GLTools 下载地址:https://github.com/HazimGazov/GLTools
一、配置GLUT
GLUT代表openGL应用工具包,英文名称
OpenGL Utility ToolKit
,是一个和窗口系统无关的软件包,它由Mark Kilgard在SGI时写的。作为AUX库的功能更强大的替代品,用于隐藏不同窗口系统API的复杂性。是一个学习OpenGL编程的一个良好开端。
首先,安装GLUT工具包
GLUT不是OpenGL所必须的,但它会给我们的学习带来很多的一定的方便,推荐使用。
Windows环境下的GLUT下载地址:(大小约为150k)
http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip
Windows环境下安装GLUT的步骤:
1、将下载的压缩包解开,将得到5个文件
2、glut.h
在“我的电脑”中搜索“gl.h”,并找到其所在文件夹
如果是VS2012,则应该将glut.h复制在“E:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\GL文件夹”)。如果没有GL这个文件夹则可以自己新建一个。VisualStudio2010和2008一样把glut.h复制到X:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\GL。(X是你安装VS的盘符号,如果装的是VC++的话,里面有个gl文件,VisualStudio 2008则需要自己去新建一个)。
3、glut32.lib
把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹":\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib"(即与include并排的lib文件夹下)。
4、glut.dll
把解压得到的glut.dll和glut32.dll放到操作系统目录文件下"C:\Windows\System32",系统是64位则把文件放在目录C:\Windows\SysWOW64。
然后,建立一个OpenGL工程
无论VS还是VC++6:
选择File->New->Project,然后选择Win32 ConsoleApplication,选择一个名字,然后按OK。在谈出的对话框左边点Application Settings,找到Empty project并勾上,选择Finish。然后向该工程添加一个代码文件(Ctr+Shift+A: 新建cpp代码文件),取名为“OpenGL.cpp”。
搞定了,就跟平时的工程没什么两样的。
注意:包含头文件:
#include <GL/glut.h>
#pragma comment(lib,"opengl32.lib")
#pragma comment(lib, "glu32.lib")
#pragma comment(lib, "glut32.lib")
也可在工程属性->配置属性->连接器->命令行,的附加选项中加入上述三个lib文件
下面就可以开始我们的第一个OpenGL程序
一个简单的OpenGL程序如下:(注意,如果需要编译并运行,需要正确安装GLUT,安装方法如上所述)
#include <GLTools.h>
#include <GLShaderManager.h>
#include<gl/glut.h>
#include<gl/glu.h>
#include<gl/gl.h>
GLBatch triangleBatch;
GLShaderManager shaderManager;
void ChangeSize(int w, int h)
{
glViewport(0, 0, w, h);
}
void SetupRc()
{
glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
shaderManager.InitializeStockShaders();
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();
}
void RenderScene(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
GLfloat vReed[] = {1.0f, 0.0f, 0.0f, 1.0f};
shaderManager.UseStockShader(GLT_SHADER_IDENTITY,vReed);
triangleBatch.Draw();
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;
}