学习资料:opengl 超级宝典 第5版
环境:vs2013
准备:1、freeglut库 http://freeglut.sourceforge.net/index.php#download
freeglut用来替代glut的,虽然现在好像glfw更好,但是因为跟着书来所以还是先使用freeglut学习一下
http://www.learnopengl.com/ 这个网站教程使用的是glfw
下载好freeglut的windows下msvc编译好的版本,解压缩
bin内是freeglut.dll文件,将64位的dll放入Syswow中,将32位的放入system32中
include的是几个头文件,放入vs的include文件的gl文件夹中,我的目录在C:\Program Files (x86)\Windows Kits\8.1\Include\um\gl下,不同系统可能不同,但是在vs中可以看
lib中的文件也同样放在vs的lib文件夹下,我的目录在C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um,按照64位和32位分好文件夹就行。
接下来在vs2013中创建项目,然后配置工程的属性,在链接器-------输入-------附加依赖项 中加入几个lib
opengl32.lib glu32.lib freeglut.lib 都在刚才的lib文件夹中了,gltools.lib是接下来要搞的lib
这样glut的库是完成了,但是在超级宝典中还需要一个gltools的库,先需要找到超级宝典第5版的源代码,我从csdn下载上找到了这个源码
http://download.csdn.net/detail/zhanyong168/4863389
http://download.csdn.net/detail/zhanyong168/4889777
两部分,需要都下载下来,解压后可以看到:
这里已经包含freeglut了,不过是2.6版本,的现在最新的已经是3.0版本了。
这里的src文件夹里中gltools的源代码,而VS2008文件夹里是编译好的gltools的lib。
这里要使用gltools有两种方法,一是笨一点的将gltools的头文件和源文件都导入到我们的项目中去,直接编译是ok的,就是有点笨重。
第二种方法就是将头文件和库文件加入我们的工程就行:
首先在我们的工程-----属性-----VC++目录-------包含目录中将Src中的头文件的目录加进去,这样,就可以使用gltools.h 和glshadermanager.h等头文件了。。
然后再将VS2008中的lib加到VS的lib目录中或者在属性------VC++目录-------库目录中将lib的目录加进去,然后再链接器------输入--------附加依赖项中将gltools.lib加进去。但是这里可能因为lib是VS2008编译的原因,我这里编译的时候好像不能正常的连接到库中,所以我用vs2013重新编译了以下gltool的源文件,在VS2008的目录下可以看见VS的工程,用VS2013打开后,将头文件什么的路径先改一下,然后编译,报了个安全什么什么的错误,可以在属性-----C/C++-------预处理器--------预处理器定义中加入_CRT_SECURE_NO_WARNINGS,这样就可以成功编译了,编译的结果会输出个新的gltools.lib,将这个lib的路径加入,就成功的配置好了opengl的环境。
按照书上的源码:
#include
#include
#include // ==freeglut.h
GLBatch triangleBatch;
GLShaderManager shaderManager;
void ChangeSize(int w, int h);
void RenderScene(void);
void SetupRC();
int main(int argc, char* argv[])
{
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;
}
void ChangeSize(int w, int h)
{
glViewport(0, 0, w, h);
}
void RenderScene(void)
{
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();
glutSwapBuffers();
}
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();
}
大功告成,搞了半天结果也就类似弄了个helloworld一样的东西,这环境真的有点难配置ORZ