参考:http://blog.sina.com.cn/s/blog_4a082449010138kt.html

转自:http://www.cnblogs.com/waytofall/archive/2012/07/30/2615190.html

如果你在Windows平台下开发OpenGL程序,那么系统中自带的OpenGL库就是1.1的,如果想使用1.2或者更高版本的OpenGL库,那么只能使用OpenGL扩展,在网上关于如何使用OpenGL扩展的文章很多,但是多数都是简单带过,抄来抄去,很少有实际的代码,我当时也遇到过同样的问题,几经周折终于找到了解决办法,不敢独享,拿出来与大家分享,如果有什么不当之处,一定告诉我,感激不尽!

一. 概念的澄清

经常会看到论坛里面有人这样问:

哪里能下载OpenGL2.0的头文件和库文件?

其实,对于一个刚刚接触OpenGL的新手来说,如果是在Windows平台下开发,这个问题是一定会经历的,为什么呢?因为很多参考书上都会提到OpenGL2.0,但是微软对OpenGL的支持只到1.1,1.1以后微软就不再支持了,为什么,因为微软更想发展自家的DirectX。所以如果想使用OpenGL1.1以上的功能或者函数,只能使用OpenGL扩展,这些扩展是一些OpenGL团体或个人开发出来的能Windows上使用的OpenGL1.1以后的一些功能及函数。所以,在Windows上根本就没有什么OpenGL2.0的头文件或库文件了,OpenGL1.1以后的东西都已经以扩展的形式存在了,而且,并没有一个统一的标准,你可以使用glex,glew,glee等等。下面我给出两种常用的方法:

大多数人都是在运行红宝书中的程序时遇到这个问题,比如这个函数glBlendEquation,它就是GL_ARB_imaging扩展中的一个函数。所以,在使用一个扩展之前,首先要做的就是判断你的显卡是否支持该扩展。

二. 如何判断显卡所支持的扩展:

使用函数glGetString,看一下它的原型:

const     GLubyte   * glGetString( GLenum name )

我们以GL_EXTENSIONS为参数调用该函数,就能获得当前显卡所支持的所有扩展,像下面这样:

const GLubyte *str = glGetString(GL_EXTENSIONS) ;

cout << str << endl ;

输出的各个扩展之间以空格分隔,如果这些扩展中包含GL_ARB_imaging,那么你就可以使用glBlendEquation这个函数了。

当然,这样查询的只是gl扩展,还可以用gluGetString获得glu扩展。

三. 使用扩展函数

在判断了显卡所支持的扩展以后,就可以使用该扩展中所包含的函数了下面详细介绍两种使用扩展函数的具体方法:

使用glext

这里下载:(http://graphics.ethz.ch/pointshop3d/sourcedoc/html/glext_8h-source.html)

a)头文件的包含 这个文件并不是Windows系统中原有的,需要到网上下载。使用的时候有一点要注意,如果程序中还用到了glut.h文件,那么一定要把glext.h放在glut.h的后面,因为glext.h要用到gl.h,而glut.h中包含了gl.h,如果顺序搞错了,编译的时候会有一大堆错误,正确的顺序如下:

#include <iostream>

#include <windows.h>

#include <GL/glut.h>

#include <GL/glext.h>

b)获取函数指针

先定义函数指针,PFNGLBLENDEQUATIONPROC  glBlendEquation = NULL;

再获取函数地址, 使用wglGetProcAddress函数,注意这一句要加在使用glBlendEquation函数的语句之前才有效,最后后面紧跟着使用glBlendEquation的函数语句,切记不要加在所有子程序的外面,否则获取的指针是无效的

glBlendEquation = (PFNGLBLENDEQUATIONPROC)wglGetProcAddress("glBlendEquation");

例如可以这样加:

PFNGLBLENDEQUATIONPROC glBlendEquation = (PFNGLBLENDEQUATIONPROC)wglGetProcAddress("glBlendEquation");

switch(key)

{

case 'a':

case 'A':

//Note: glBlendEquation is a subset of GL_ARB_imaging, please call glGetString

//first to confirm whether your video card support this extension.

glBlendEquation(GL_FUNC_ADD) ;

break ;

case 's':

case 'S':

glBlendEquation(GL_FUNC_SUBTRACT) ;

break ;

如果觉得上面的方法麻烦,那么可以使用下面的方法:我推荐这种方法:

1.   使用glew

glew也是一个扩展库,包含了OpenGL中许多核心及扩展函数,现在的版本是1.3.5,支持OpenGL2.1,可以到这里下载:

http://glew.sourceforge.net/

上面的方法可能有些麻烦,如果已经下载了glew库的话,那么可以直接使用该扩展,但是使用之前首先要确定你的显卡是否支持该扩展。方法如下:首先还是要判断显卡是否支持该扩展,我们这里假定已经支持,

1.包含头文件glew.h,注意这里和上面不同,这回glut.h要放在glew.h的后面了

像下面这样

#include <GL/glew.h>

#include <GL/glut.h>

然后就可以在程序中直接使用glBlendEquation了,其他扩展的判断和使用方法与此类似。

最后还有一点切记!那就是还要调用glewInit() ;来初始化一下方可使用扩展,如下:

GLenum err = glewInit() ;

if (GLEW_OK != err)

{

MessageBoxA(NULL, "error", "My Window", 1) ;

}

.在project->setting中,打开link选项卡,加上glew.lib 
或在文件中加上#progmma comment(lib, "glew.lib")

好了,现在可以放心使用扩展了,赶快继续你的OpenGL之旅吧!

说明:上面的链接都是国外的官方站点链接,所以如果上不去外网,我可以给大家传一份

再提供几个好一点的OpenGL站点:

第一位:当然是http://www.opengl.org/

第二位:入门的好站点:http://www.opengl.org/wiki/index.php/Main_Page

windows下opengl多重纹理贴图相关推荐

  1. OpenGL立方体纹理贴图

    OpenGL正方体纹理贴图 0. 写在最前面 1. 正方体顶点属性构建 2. 绑定多个VAO.VBO 3. 创建多个纹理 4. 渲染循环 5. 实现代码 6. 多个立方体纹理贴图 0. 写在最前面 要 ...

  2. openCV读入图片,openGL实现纹理贴图

    本文结合结合openCV,openGL的优点,实现混合编程. (1)OpenCV提供图形处理和计算机视觉方面的通用算法,读入二维图片很方便: (2)OpenGL是跨平台的图形程序接口,它用于二维,三维 ...

  3. OpenGL多重纹理使用与理解

    函数 对于opengl 扩展函数必须在初始化窗口结束后才能使用 wglGetProcAddress 获得 Opengl 没有重载函数,对于功能相同但参数类型和数量不同的函数加上后缀,最长可达4个,第一 ...

  4. OpenGL曲面纹理贴图技术--波浪的模拟(转 作者 Y_Y)

    学过OpenGL的人都很容易的把图片贴到四边形和三角行上,但将纹理贴到一般的曲面上认为很困难,其实 通过本文的简单分析,其实很简单.本文以波浪模拟为例,来介绍一般纹理贴图技术,大家很容易举一反三来 模 ...

  5. 纹理窗口Qt+OpenGL之纹理贴图

    上班之余抽点时间出来写写博文,希望对新接触的朋友有帮助.今天在这里和大家一起学习一下纹理窗口 NeNe的代码中是加载到了一个正方体当中,代码很长.其实单纯的想要纹理贴图是很便利的.具体的纹理贴图技巧在 ...

  6. Opengl实现纹理贴图

    纹理贴图的步骤 创建纹理对象,并为它指定一个纹理 确定纹理如何应用到每个像素上 启用纹理贴图功能 绘制场景,提供纹理坐标和几何图形坐 Tips:纹理坐标必须在RGBA模式下才能使用,在颜色索引模式下是 ...

  7. OpenGL:纹理贴图

    纹理贴图是在栅格化的模型表面上覆盖图像的技术.它是为渲染场景添加真实感的最基本和最重要的方法之一.硬件也为纹理贴图提供了硬件支持,使得它具备实现实时的照片级真实感的超高性能.纹理单元是专为纹理设计的硬 ...

  8. 手把手教会OpenGL之纹理贴图、包含纹理载入、纹理过滤、边界处理、纹理参数设置(入门级别案例,棋盘)

    一.OpenGL中纹理的加载(对glTexImage2D函数的使用) 二.纹理过滤(glTexParameteri参数中的GL_TEXTURE_MAG_FILTER与 GL_TEXTURE_MIN_F ...

  9. Python下Open3D实现纹理贴图渲染

    利用open3d的python库来实现三维模型的纹理贴图渲染. 渲染原理类似OpenGL,需要指定顶点信息,三角网格顶点的索引,以及UV贴图坐标. 需要提前安装open3d库: pip install ...

最新文章

  1. 今日直播 | 全国高校人工智能人才与科技莫干山论坛直播来袭!
  2. chrome开发总结(交互/权限/存储)-爬虫
  3. 推荐一个在线查看.cer文件的网站
  4. jvmti_JVMTI标记如何影响GC暂停
  5. (11)FPGA面试技能提升篇(Cadence)
  6. Android开发笔记(八十九)单例模式
  7. XTU 1339 Interprime
  8. w ndows7怎么设置打印机,Windows7系统如何添加打印机
  9. SCI收录的IEEE期刊
  10. 小马智行获准在北京开启无人化出行服务商业化试点;华为成为Sisvel Wi-Fi 6专利池创始成员 | 美通企业日报...
  11. PHP:执行 PHP 文件
  12. android 禁用触摸屏,Touch Protector-安卓禁用手机触摸屏软件
  13. vue3 打印插件 vue-print-nb
  14. 表的列被set unused的机制
  15. Nginx配置项优化详解
  16. 已解决FileNotFoundError: [WinError 2] 系统找不到指定的文件。
  17. (PHP)获取微信支付平台证书步骤
  18. 《华为项目管理法》读书笔记
  19. mipi摄像头linux,VS-RK3399 在linux系统下面调试Mipi camera接口介绍
  20. android实现分享url,分享 URL,然后启动安卓 APP

热门文章

  1. 联合国全球契约组织与罗盛咨询研究发现可持续商界领袖的特征
  2. db2 LIKE 语句
  3. 自动化测试框架 splinter安装
  4. While()和scanf的搭配使用问题
  5. fdfs_client
  6. 使用python爬虫爬取法律条文,并存入MYSQL
  7. android 自定义下载器,表盘自定义工具下载-表盘自定义工具 安卓版v4.1.0-pc6手机下载...
  8. excel-函数及应用场景
  9. Ruthless J2EE+ANDROID+jQuery
  10. Unity新手如何进入游戏行业