系统环境

Windows 7 Ultimate x64,Visual Studio Ultimate 2012 Update 4,和一块支持OpenGL 4.x的显卡。


准备工作

首先用GPU Caps Viewer检查机器最高支持的OpenGL及GLSL版本。比如我的机器可以支持OpenGL 4.5和GLSL 4.5:

下载GLEW和GLFW的源码。其中GLEW用来管理和载入OpenGL的各种扩展库,GLFW用来创建窗口和控制鼠标及键盘的交互。我使用的版本分别是glew-1.12.0和glfw-3.1.1。下载地址分别为:

     https://sourceforge.net/projects/glew/files/glew/1.12.0/glew-1.12.0.zip/download

http://sourceforge.net/projects/glfw/files/glfw/3.1.1/glfw-3.1.1.zip/download

下载并安装CMAKE。用来辅助编译GLFW。我使用的版本为cmake-3.2.1。下载地址为:

http://www.cmake.org/files/v3.2/cmake-3.2.1-win32-x86.exe


编译GLFW

打开CMAKE。点击“Browsw source…”选择GLFW的根目录,点击“Browse build…”任意选取一个新建的文件夹作为输出目录。点击“Configure”:

在弹出的窗口中选择“Visual Studio 11 2012”,点击“Finish”:

保持默认配置即可。如果想用头文件+.dll的方式调用GLFW,可以勾选“BUILD_SHARED_LINKS”;不勾选则是默认的头文件+.lib方式调用。为“CMAKE_INSTALL_PREFIX”选择一个新的位置,用来存放用VS2012编译输出的结果。然后点击“Generate”,VS2012项目文件就生成完毕了。

打开刚刚指定的Build目录,用Visual Studio 2012打开GLFW.sln文件。为保险起见,先用Debug方式编译ZERO_CHECK,如果没有报错,则用Release方式编译ALL_BUILD,再编译INSTALL。

如果编译成功,在之前指定的GLFW文件夹内会多出两个文件夹include和lib,这里面就包含着我们会用到的头文件和链接库文件:

把include中的GLFW文件夹拷贝到一个你觉得方便的位置,比如“E:\dev-lib\opengl4\include”:

把lib中的glfw3.lib文件拷贝到新的位置,比如“E:\dev-lib\opengl4\lib”:


编译GLEW

用Visual Studio 2012打开GLEW目录下build\vc10\glew.sln文件,第一次打开时会提示是否把VS2010项目转换成VS2012项目,选择是即可。选择Release方式,点击BUILD -> Build Solution:

如果编译成功,会发现在bin\Release\Win32目录下有3个新文件。把glew32.dll文件拷贝到C:\Windows\SysWOW64目录下。

glewinfo.exe和visualinfo.exe可以用来查看系统对OpenGL各个特性的支持情况,比如:

把lib\Release\Win32目录下的glew32.lib拷贝到之前的“E:\dev-lib\opengl4\lib”中。把include目录中的GL文件夹拷贝到之前的“E:\dev-lib\opengl4\include”中。


新建项目

打开Visual Studio 2012,点击FILE -> New -> Project…,选择Visual C++ -> Win32 Console Application。比如命名为“ogl4-test”:

右击项目名称,点击Properties。在Configuration Properties -> VC++ Directories中,为Include Directories添加“E:\dev-lib\opengl4\include;”;为Library Directories添加“E:\dev-lib\opengl4\lib;”。注意为Debug和Release都要添加:

在Configuration Properties -> Linker -> Input中,为Additional Dependencies添加“glew32.lib;glfw3.lib;opengl32.lib;”。注意为Debug和Release都要添加:

把以下代码拷贝到0gl4-test.cpp文件中。代码来自Anton's OpenGL 4 Tutorials

#include "stdafx.h"
#include <GL/glew.h>
//#define GLFW_DLL
#include <GLFW/glfw3.h>int main(int argc, _TCHAR* argv[])
{// start GL context and O/S window using the GLFW helper libraryif (!glfwInit ()) {fprintf (stderr, "ERROR: could not start GLFW3\n");return 1;} GLFWwindow* window = glfwCreateWindow (800, 600, "Hello Triangle", NULL, NULL);if (!window) {fprintf (stderr, "ERROR: could not open window with GLFW3\n");glfwTerminate();return 1;}glfwMakeContextCurrent (window);// start GLEW extension handlerglewExperimental = GL_TRUE;glewInit ();// get version infoconst GLubyte* renderer = glGetString (GL_RENDERER); // get renderer stringconst GLubyte* version = glGetString (GL_VERSION); // version as a stringprintf ("Renderer: %s\n", renderer);printf ("OpenGL version supported %s\n", version);// tell GL to only draw onto a pixel if the shape is closer to the viewerglEnable (GL_DEPTH_TEST); // enable depth-testingglDepthFunc (GL_LESS); // depth-testing interprets a smaller value as "closer"float points[] = {0.0f,  0.5f,  0.0f,0.5f, -0.5f,  0.0f,-0.5f, -0.5f,  0.0f};GLuint vbo = 0;glGenBuffers (1, &vbo);glBindBuffer (GL_ARRAY_BUFFER, vbo);glBufferData (GL_ARRAY_BUFFER, 9 * sizeof (float), points, GL_STATIC_DRAW);GLuint vao = 0;glGenVertexArrays (1, &vao);glBindVertexArray (vao);glEnableVertexAttribArray (0);glBindBuffer (GL_ARRAY_BUFFER, vbo);glVertexAttribPointer (0, 3, GL_FLOAT, GL_FALSE, 0, NULL);const char* vertex_shader ="#version 400\n""in vec3 vp;""void main () {""  gl_Position = vec4 (vp, 1.0);""}";const char* fragment_shader ="#version 400\n""out vec4 frag_colour;""void main () {""  frag_colour = vec4 (0.5, 0.0, 0.5, 1.0);""}";GLuint vs = glCreateShader (GL_VERTEX_SHADER);glShaderSource (vs, 1, &vertex_shader, NULL);glCompileShader (vs);GLuint fs = glCreateShader (GL_FRAGMENT_SHADER);glShaderSource (fs, 1, &fragment_shader, NULL);glCompileShader (fs);GLuint shader_programme = glCreateProgram ();glAttachShader (shader_programme, fs);glAttachShader (shader_programme, vs);glLinkProgram (shader_programme);// Loop until the user closes the windowwhile (!glfwWindowShouldClose(window)){// wipe the drawing surface clearglClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glUseProgram (shader_programme);glBindVertexArray (vao);// draw points 0-3 from the currently bound VAO with current in-use shaderglDrawArrays (GL_TRIANGLES, 0, 3);// update other events like input handling
        glfwPollEvents ();// put the stuff we've been drawing onto the display
        glfwSwapBuffers (window);}// close GL context and any other GLFW resources
    glfwTerminate();return 0;
}

点击“Local Windows Debugger”,就可以看见如下效果:


另一枚例子

这是一个用合成的Gerstner波绘制水面的例子,根据《水面的简单渲染 – Gerstner波》修改而来。完整代码下载地址:http://pan.baidu.com/s/1gdzoe4b,所需的配置文件下载地址:http://pan.baidu.com/s/1pJ81kyZ。项目托管地址:https://github.com/johnhany/OpenGLProjects/tree/master/GerstnerWave。

效果如下:

原文链接:Windows7+VS2012下OpenGL 4的环境配置

转载于:https://www.cnblogs.com/rainbow70626/p/5557636.html

Windows7+VS2012下OpenGL 4的环境配置相关推荐

  1. OpenGL C#绘图环境配置

    OpenGL C#绘图环境配置 OpenGL简介 OpenGL作为一种图形学编程接口已经非常流行, 虽然在大型游戏方面DirectX有一定的市场占有率, 但由于OpenGL的开放性,可移植性等优点,O ...

  2. M1芯片下Fabric测试网络环境配置

    M1芯片下Fabric测试网络环境配置 系统配置 系统:Ubuntu 20.04 LTS 内核:Arm64 硬盘大小:10GB 1.技术框架环境搭建 安装Vim sudo apt install -y ...

  3. Mac下Qt for android 环境配置

    Mac下Qt for android 环境配置 文章目录 Mac下Qt for android 环境配置 1. 需要准备工具 2. 下载时版本搭配解释 3. 下载工具过程 4. 环境变量设置 5.qt ...

  4. LibOpenCM3(一) Linux下命令行开发环境配置

    目录 LibOpenCM3(一) Linux下命令行开发环境配置 LibOpenCM3(二) 项目模板 Makefile分析 LibOpenCM3(三) .ld文件(连接器脚本)和startup代码说 ...

  5. win10系统下nodejs安装及环境配置

    win10系统下nodejs安装及环境配置 一.下载对应的nodejs安装包 1.官网地址:https://nodejs.org/en/ (可以下载旧版本:打开 https://nodejs.org/ ...

  6. windows下VS安装CUDA环境配置

    CUDA安装见:https://blog.csdn.net/Ang_go/article/details/122329715 本文内容均在已安装VS和CUDA情况下,如需安装教程,请自行搜索. win ...

  7. Mac下cocos2dx-3.2+Xcode环境配置和项目创建

    这是有关环境配置的第二篇教程,第一篇讲的是win8下的环境配置.这里我们使用C++.所有如果你用其他语言如Lua和js进行cocos2d开发,那么可以再找一找其他的配置文档. 下面要说Mac os 下 ...

  8. Android官方开发文档Training系列课程中文版:OpenGL绘图之环境配置

    原文地址:http://android.xsoftlab.net/training/graphics/opengl/index.html 引言 Android framework层为创建绚丽的功能性U ...

  9. windows 7 64bit 下apache php mysql 环境配置

    在64位环境下安装apache,php和配置过程 准备好安装包.(64位版本) Apache 下载地址:http://www.apachelounge.com/download/ Php 下载地址:h ...

最新文章

  1. linux6.5 sftp,CentOS下实现SFTP CHROOT的几种方法
  2. linux在机房设置ip,双线机房双IP linux设置路由
  3. 机械制图手册_42条机械制图基础常识,带徒师傅必备!
  4. 后现代婚礼机器人显神通_机器人显神通
  5. opencv 中 快速傅里叶变换 FFT
  6. linux 常见试题(2)-选择
  7. 来自未来团队伙伴的一封信
  8. html语言dl与ul,HTML中DL、UL、OL用哪个比较好
  9. Cray:XC50提供了最高密度的性能
  10. ODP.NET数据访问
  11. PHP100个知识点之2 日期时间(一)
  12. redis和sqlserver数据同步_redis缓存和mysql数据库同步
  13. asp.net 实现动态显示当前时间(不用javascript不考虑开销)
  14. Cube IDE 的下载安装
  15. 思维导图—Git命令全集
  16. 运用mysql实现工资管理系统_企业工资管理系统的设计与实现(MySQL)
  17. 解释什么是计算机硬件和软件,什么叫软件,什么叫硬件?(要详细)
  18. 超全 泛微 E8 E-cology 8 开发资料大全 开源下载资料
  19. 舱机器人尾巴毛茸茸_第一千五百二十四章 毛茸茸【二合一】
  20. codesys电子凸轮挺杆点的设置与使用

热门文章

  1. Windows与Linux下tftp服务的使用
  2. [react] create-react-app有什么好处?
  3. React开发(209):react错误边界
  4. React开发(131):ant design学习指南之form中的resetFields
  5. 前端学习(3211):react中类中方法的this指向三
  6. [html] HTML5拖拽事件的顺序是什么?
  7. 工作215:打印出父子组件的this
  8. 工作125:各个接口需要的token不同 token是获取数据的关键
  9. 前端学习(2250)拉取代码文件
  10. 前端学习(1920)vue之电商管理系统电商系统之角色列表路由的切换