VS2015运行OpenGL编程指南第8版的第一个示例
来源:互联网 发布:小米平板2怎么连接网络 编辑:程序博客网 时间:2024/05/19 02:43
VS2015运行OpenGL编程指南第8版的第一个示例
杂谈
- 一直在入门OpenGL,难得找到一本不错的参考书,发现里面的示例在自己的VS2015中运行有问题。在网上找了很多博客,VS2015中跑OpenGL红宝书第八版的示例代码这篇写的比较不错。但是具体实现存在一点小问题。
- 其中第三步是将“Platform Toolset”设置为VS2013,而我只装了VS2015,没有比他更低的平台工具。其实这一步可以换一种方式实现。
- 错误主要是:无法解析的外部符号
_sscanf、 ___iob_func
等。这个问题很好解决,主要是VS2015相对于之前的版本有所改动,具体可以自行百度。解决方法如下: - 1.右键项目–>属性–>链接器–>输入–>附加依赖项:
legacy_stdio_definitions.lib
- 2.在源文件中添加以下代码
#if _MSC_VER>=1900#include "stdio.h"_ACRTIMP_ALT FILE* __cdecl __acrt_iob_func(unsigned);#ifdef __cplusplusextern "C"#endifFILE* __cdecl __iob_func(unsigned i) { return __acrt_iob_func(i);}#endif /* _MSC_VER>=1900 */
- 上述方法可以代替他的第三步。本人由于不想用书上源代码中提供的库,自己从开源网站上下了最新版本的freeglut和flew。捣鼓了好久,终于调通了,记录一下这个过程。
一、下载freeglut和glew
freeglut-MSVC-3.0.0-2.mp.zip (访问密码 b137)
glew-2.0.0-win32.zip (访问密码 7112)
二、VS2015新建项目
1 新建“win32控制台应用程序”
2.附加选项:空项目
3.新建triangles.cpp文件,添加书上的代码,可以直接拷贝以下内容。其中有一部分和源码不一致,下面代码中已经标出。
/////////////////////////////////////////////////////////////////////////// triangles.cpp/////////////////////////////////////////////////////////////////////////#include <iostream>using namespace std;/** 注意:* 不想使用源码中提供的库,所以注释了vgl.h头文件,这就需要增加下面三行代码*///#include "vgl.h"#include <GL/glew.h>#include <GL/freeglut.h>#define BUFFER_OFFSET(x) ((const void*) (x))#include "LoadShaders.h"enum VAO_IDs { Triangles, NumVAOs };enum Buffer_IDs { ArrayBuffer, NumBuffers };enum Attrib_IDs { vPosition = 0 };GLuint VAOs[NumVAOs];GLuint Buffers[NumBuffers];const GLuint NumVertices = 6;//---------------------------------------------------------------------//// init//void init(void){ glGenVertexArrays(NumVAOs, VAOs); glBindVertexArray(VAOs[Triangles]); GLfloat vertices[NumVertices][2] = { { -0.90, -0.90 }, // Triangle 1 { 0.85, -0.90 }, { -0.90, 0.85 }, { 0.90, -0.85 }, // Triangle 2 { 0.90, 0.90 }, { -0.85, 0.90 } }; glGenBuffers(NumBuffers, Buffers); glBindBuffer(GL_ARRAY_BUFFER, Buffers[ArrayBuffer]); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); ShaderInfo shaders[] = { { GL_VERTEX_SHADER, "triangles.vert" }, { GL_FRAGMENT_SHADER, "triangles.frag" }, { GL_NONE, NULL } }; GLuint program = LoadShaders(shaders); glUseProgram(program); glVertexAttribPointer(vPosition, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0)); glEnableVertexAttribArray(vPosition);}//---------------------------------------------------------------------//// display//void display(void){ glClear(GL_COLOR_BUFFER_BIT); glBindVertexArray(VAOs[Triangles]); glDrawArrays(GL_TRIANGLES, 0, NumVertices); glFlush();}//---------------------------------------------------------------------//// main//int main(int argc, char** argv){ glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA); glutInitWindowSize(512, 512); glutInitContextVersion(4, 3); glutInitContextProfile(GLUT_CORE_PROFILE); glutCreateWindow(argv[0]); if (glewInit()) { cerr << "Unable to initialize GLEW ... exiting" << endl; exit(EXIT_FAILURE); } init(); glutDisplayFunc(display); glutMainLoop();}
- 4.将源文件中的LoadShaders.cpp和LoadShaders.h文件一同拷到triangles.cpp所在的目录下,同时右键工程–>添加现有项,将他们添加到项目中。在LoadShaders.cpp中找到
#define GLEW_STATIC
,将其注释掉。
三、添加freeglut和glew
在项目根目录下新建include和lib文件(个人习惯)。
将下载的freeglut和glew文件中的include文件拷贝进来。
同时右键工程–>属性–>C/C++–>常规–>附加包含目录,输入
..\include
根据你需要的编译目标,选择相应的lib文件。我这里编译的是32程序,所以将freeglut和glew文件中32位的freeglut.lib和glew32.lib拷贝到了lib目录下。
右键工程–>属性–>链接器–>常规–>附加库目录,输入
..\lib
同时还需要在链接器–>输入–>附加依赖项中添加
freeglut.lib、glew32.lib
这时你运行程序会发现缺少dll文件,将freeglut和glew文件中的
freeglut.dll和glew32.dll
拷贝到可执行文件所在的Debug目录下。
四、添加顶点着色器和片段着色器
在项目目录中新建两个文本分别命名为triangles.vert和triangles.frag
- 1.triangles.vert
#version 430 corelayout(location = 0) in vec4 vPosition;voidmain(){ gl_Position = vPosition;}
- 2.triangles.frag
#version 430 coreout vec4 fColor;voidmain(){ fColor = vec4(0.0, 0.0, 1.0, 1.0);}
五、运行结果
1 0
- VS2015运行OpenGL编程指南第8版的第一个示例
- 在vs2013上运行OpenGL编程指南第8版第一个程序
- OpenGL编程指南(第八版)第一个渲染三角形案例代码在win8双显卡电脑VS2015中运行方法总结
- opengl编程指南第一例
- opengl编程指南第8版 环境搭建及原理
- Win10下配置OpenGL编程指南(第8版)例1.1的一些问题
- 学习《Opengl编程指南》第7版 第1章
- 《OpenGL编程指南》示例笔记--序
- OpenGL编程指南2:环境搭配与第一个实例剖析
- OpenGL编程指南(第六版)学习-第0天
- 《OpenGL编程指南第7版》3视图
- [OpenGL学习] mac上运行第一个openGL程序
- OpenGL学习笔记(六):创建第一个VS2015 OpenGL工程模板(与平台无关)
- openGL的第一个程序
- OpenGL 编程指南笔记——第8章 OpenGL 绘制像素、位图、字体和图像
- win7运行第一个opencv程序,基于opencv3.2,官方vc14编译版本,QT5.8 VS2015平台
- 学习《Opengl编程指南》第7版 第2章(一)
- 学习《Opengl编程指南》第7版 第2章(二)
- AngularJS 服务
- SVN问题:previous operation has not finished;run 'cleanup' if it was interrupted
- 调用系统相机录像,压缩保存到相册(附仿微信视频录制demo)
- linux echo命令
- SELinux 开启和关闭
- VS2015运行OpenGL编程指南第8版的第一个示例
- windows进程间各种通信方式浅谈
- HDU5769后缀数组的简单应用
- CXF与Spring框架的整合
- Android Studio入门到精通
- 题目274 正三角形的外界圆面积
- Different sampler types for same sample texture unit in fragment shader.
- caffe命令行解析
- POJ1459