如果你在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() ;来初始化一下方可使用扩展,如下:

初始化glew:
glutCreateWindow(argv[0])后,例如在init(void)函数体的开头: GLenum err = glewInit();
if (GLEW_OK != err)
{

cout<<"出错!"<<endl;
}

在程序开头时:

#pragma comment(lib , "glu32.lib")
#pragma comment(lib , "glut32.lib")
#pragma comment(lib , "opengl32.lib")
#pragma comment(lib , "glew32.lib")

#include <iostream>
#include <GL/glew.h>
#include <GL/glut.h>
using namespace std;

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

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

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

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

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

glBlendEquation相关推荐

  1. OpenGL硬件加速指南

    OpenGLRenderer.cpp位于Framewoks/base/libs/hwui中 1.构造函数: OpenGLRenderer::OpenGLRenderer(): mCaches(Cach ...

  2. OpenGL ES 2兼容函数列表

    关于OpenGL(含ES)的资料汗牛充栋,但是普遍存在的问题是,OES的资料不够系统,OGL的资料过于庞大 此列表详细记录了GLES2兼容函数的情况,使大家在学习时,对于算法和资料可以有针对性的选择 ...

  3. [Z]如何使用OpenGL扩展

    如果你在Windows平台下开发OpenGL程序,那么系统中自带的OpenGL库就是1.1的,如果想使用1.2或者更高版本的OpenGL库,那么只能使用OpenGL扩展,在网上关于如何使用OpenGL ...

  4. OPenGL 颜色混合(Blending)

    写在前面 上一节学习了使用模板缓冲来制作特殊效果,本节将继续学习一个高级主题-混色(Blending).通过使用混色,我们可以制作透明.半透明效果.本节示例代码均可以在我的github下载. 本节内容 ...

  5. OpenGL基础31:混合

    在很多游戏场景中,地面往往都不是完全干净和平坦的,如果是草坪,那么肯定会有一些长得比较高的杂草,而对于沙地,往往总会有一些奇形怪状的石头等,一般来讲确实可以用模型,但是贴图也是一个不错的选择 一.Al ...

  6. 南邮 | 计算机图形学大作业:Skybox + Shadow volume

    计算机图形学期末大作业:实现 Skybox 天空盒,以及 Shadow volume 阴影体. 写在前面 本人才疏学浅,水平有限,只实现了 Skybox ,Shadow volume 没有完全实现(我 ...

  7. Android opengl es 3.0 + ndk 绘画涂鸦项目

    前言 写一个opengl es 3.0 + ndk 的绘画涂鸦项目,命名为白板哈哈哈,记录自己遇到的问题,顺便学到的知识整合一遍,算是对自己一段时间的总结. 项目地址:Whiteboard 如果对你有 ...

  8. OpenGL入门学习

    OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性. 1.与C语言紧密结合.  2.强大的可移植性.  3.高性能的图形渲染. 总之,OpenGL是一个很NB的图形 ...

  9. OpenGL ES SDK for Android - 3

    Bloom 使用OpenGL ES 3.0的绽放效果. 绽放效果:强度从非常弱变为非常强烈. 该应用程序显示了bloom实现. 它绘制了以二维5x5阵列排列的立方体,只有对角线的阵列才绽放. 绽放效果 ...

最新文章

  1. VMware 提示”此虚拟机被配置为64位操作系统,然而,64位操作无法进行”
  2. 前端学习(869):高级事件导读
  3. 安卓牛客专项练习2020.12.31
  4. 【 2013华为杯编程大赛成都第三组前两题试题及答案】
  5. 阿里云护航罗振宇2018“时间的朋友”跨年演讲,与千万观众一起跨年 1
  6. Python实现FTP服务器和客户端
  7. CACHECLOUDV1.0慢日志定时任务创建流程分析
  8. [视频]AI 机器学习 深度学习 视频教程汇总
  9. android timepicker分割线颜色,Android TimePicker 的使用
  10. 《动手学深度学习》| 2 深度学习基础
  11. 计算机两万字符英语文献翻译,自动化专业相关英文文献加翻译(20000字符).doc
  12. 【优化求解】基于生物地理学结合重力引力搜索优化求解算法matlab代码
  13. 大部分Python库
  14. 超声检测的不同扫描方式
  15. 通信达股票数据格式读取程序
  16. 1.Apache Flume 简介
  17. Zynq7000开发系列-1(Vivado HLx 2016.4下载及安装)
  18. 事还得慢慢做,环境还得靠自己准备
  19. [SWPUCTF 2021 新生赛]
  20. 【MyBatis-Plus】简介 入门案例

热门文章

  1. 系统集成项目管理师 高项论文 项目整体管理
  2. 我的世界基岩版服务端 更换地图教程 minecraft bedrock 更换地图教程
  3. Android Studio TV开发教程(十六)让电视应用程序可搜索
  4. Javascript当中的 getElementsByTagName() 方法
  5. 哀悼日,页面变为黑白的效果,适用ie11
  6. IE浏览器系统兼容性问题
  7. Faster RCNN近似端到端法详解
  8. Git本地新项目推送到远程仓库
  9. 华为技术支持经历(转)
  10. 企业为什么要融资和上市