无意义的感慨
曾经一直幻想有一天能够像大家一样,写着博客,一遍激励自己,一遍给曾经帮过我的众多网友一点有意义的内容,不过个人比较懒,一直拖,如今已经快大学毕业了,时间怎么也算不上紧了,所以就逼迫自己写些东西吧,希望能有一点点帮助。
注意:笔者采用的是window下的VS2013,如果是你们是其他系统就不用看了。
内容开始
使用openGL需要配置,网上资料众多,这里就做一个小小的归纳吧
根据《OpenGL超级宝典》一书中的要求,需要先配置文件包括free_glut以及GLTools。虽然free_glut包含了glut中的全部内容,但是说句实话有点虚,所以我这里也把glut配置了。
glut配置
打开glut,其中包含有了如下的内容
将其中.h的头文件导入复制到VS目录下VC的include中(最好是再考到GL文件夹中,没有的就新建一个吧[因为在书附加的代码中导入时为 GL/GLUT.h]说明是GL文件下的GLUT.h文件),如果和笔者一样装vs是走默认位置的话地址应该是:
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\
复制完成后,将lib也就是SourceBrower复制到VS目录下VC的lib文件夹中
最后把DLL结尾的这些文件考到操作系统下的System32中,因为我们采用的是win32 Console Application 所以采用的是在32位的系统,如果不放心也建议把DLL考到SystemWow64下(对应64位系统)
一般地址在:C:\Windows\System32
这样就完成了对glut的配置
free_glut配置
对于free_glut,网上最主流的free_glut需要自己建立库文件,(太白了,暂时不会,所以采用老一点的free_glut),free_glut 2.8中已经建立好动态库文件了,所以
与配置glut时相同
freeglut.h,freeglut_ext.h,freeglut_std.h放到VS下VC的include文件夹中
freeglut.dll放到VS下VC的lib中
freeglut(应用程序扩展)放到System32中
GLTools配置
默默地吐槽一句,GLTools在网络中的资源良莠不齐啊。
GLTools打开资源,里面为
与上面的步骤不同,因为没有了应用程序扩展程序,所以不直接配置,笔者采用的是动态库导入的方式
首先记住得GLTools所在的位置(笔者将GLTools文件夹复制到VS下),
建立win32 Console Application项目,把然后右键创建的项目,选择Add,如图
x
选择已存在文件
然后把之间GLTools下的release中的gltools.lib选中,确定
之后会在项目的source下出现gltools.lib
接着将把这个gltools的lib文件找出来复制到VS下VC的lib文件夹下
配置结束
接下来试一试书中提供的程序
注意在include<GL\GLUT.h>前需要写上 #define GLUT_DISABLE_ATEXIT_HACK
以为OpenGL库与stdlib.h中存在类似的部分,如果win32在编译过程中,会忽略掉其中的一部分,所以会报错,具体请参看:
http://blog.sina.com.cn/s/blog_7e7b66a80101a9yk.html
知道大家都比较追求效率,所以把我中书上敲下了的直接粘贴到就行了
#include <GLTools.h>
#include <GLSHaderManager.h>
#ifdef _APPLE_
#include <glut/glut.h>
#else
#define GLUT_DISABLE_ATEXIT_HACK
#define FREEGLUT_STATIC
#include <GL/GLUT.H>
#endif
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 vRed[] = { 1.0f, 0.0f, 0.0f, 1.0f };
shaderManager.UseStockShader(GLT_SHADER_IDENTITY,vRed);
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;
}
最后附上需要的资料:
http://download.youkuaiyun.com/detail/warband/9726682
如果有各位有多余的积分,可以选择下面的地址,谢谢(资源是一样的)