windows下opengl扩展与多重纹理贴图

环境:windows8.1

参考:

http://www.cnblogs.com/madfrog/archive/2010/06/25/1765243.html

http://blog.csdn.net/xiangyunl/article/details/7933549

如果你在Windows平台下开发OpenGL程序,那么系统中自带的OpenGL库就是1.1的,如果想使用1.2或者更高版本的OpenGL库,那么只能使用OpenGL扩展。由于d3d的关系,windows对于opengl支持不是很积极。

Opengl扩展库种类:

具体参考:http://www.cnblogs.com/madfrog/archive/2010/06/25/1765243.html

(1)使用glext

需要wglGetProcAddress函数得到扩展函数的指针。

(2)使用glew库

opengl从3.0开始,所有实现全部由显卡厂商提供。而官方组织只是发布标准而已,由于没有这点儿认知,害的我到处找dll。GLEW是一个跨平台的C++扩展库,基于OpenGL图形接口。使用OpenGL的朋友都知道,window目前只支持OpenGL1.1的涵数,但OpenGL现在都发展到2.0以上了,要使用这些OpenGL的高级特性,就必须下载最新的扩展,另外,不同的显卡公司,也会发布一些只有自家显卡才支持的扩展函数,你要想用这数涵数,不得不去寻找最新的glext.h,有了GLEW扩展库,你就再也不用为找不到函数的接口而烦恼,因为GLEW能自动识别你的平台所支持的全部OpenGL高级扩展涵数。也就是说,只要包含一个glew.h头文件,你就能使用gl,glu,glext,wgl,glx的全部函数。GLEW支持目前流行的各种操作系统(including
Windows, Linux, Mac OS X, FreeBSD, Irix, and Solaris)

(3)使用glee库

下面主要讲述glew库的多重纹理贴图

1、glew初始化

GLenum err = glewInit();

err为0表示成功

主要点:该函数要在glut初始化的后面,进行初始化

   glutInit(&argc, argv);
	 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_MULTISAMPLE);
     glutInitWindowPosition(100, 100);
     glutInitWindowSize(WindowWidth, WindowHeight);
     glutCreateWindow(WindowTitle);
     glutDisplayFunc(&display);

	 //设定键盘响应函数

	 glutKeyboardFunc(&pressKeyboard);

	 //设定特殊的键盘响应函数

	 glutSpecialFunc(&specialKey);

	 glutReshapeFunc(&reshape);
 GLenum err = glewInit();

2、开启多重纹理

下面是两个纹理相乘的多重纹理开启代码:

 glActiveTexture(GL_TEXTURE0);
	 glEnable(GL_TEXTURE_2D);
	 glBindTexture(GL_TEXTURE_2D, texGround);
	 //Simply sample the texture
	 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

	 glActiveTexture(GL_TEXTURE1);
	 glEnable(GL_TEXTURE_2D);
	 glBindTexture(GL_TEXTURE_2D, windowTex);
	 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
	 //Sample RGB, multiply by previous texunit result
	 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE);   //Modulate RGB with RGB
	 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS);
	 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_TEXTURE);
	 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
	 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR);
	 //Sample ALPHA, multiply by previous texunit result
	 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_MODULATE);  //Modulate ALPHA with ALPHA
	 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_PREVIOUS);
	 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA, GL_TEXTURE);
	 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA);
	 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA, GL_SRC_ALPHA);

3、禁用多重纹理

下面是禁用多重纹理的代码:

	glActiveTexture(GL_TEXTURE0);
	glDisable(GL_TEXTURE_2D);

	glActiveTexture(GL_TEXTURE1);
	glDisable(GL_TEXTURE_2D);

注意点:

下面的代码可以确定opengl版本和支持的扩展

const GLubyte* OpenGLVersion = glGetString(GL_VERSION);

const GLubyte* extensions = glGetString(GL_EXTENSIONS);

时间: 2024-08-09 09:22:22

windows下opengl扩展与多重纹理贴图的相关文章

windows下Python扩展问题error: Unable to find vcvarsall.bat

由于对于Windows下Python扩展不熟,今天遇到一个安装问题,特此做个tag.解决方式在stackoverflow上,网址例如以下: http://stackoverflow.com/questions/2817869/error-unable-to-find-vcvarsall-bat

用OpenGL进行立方体表面纹理贴图

一.目的: 掌握OpenGL中纹理对象的创建.绑定与使用方法. 二.简单介绍: 1,连接静态库 #pragma comment(lib, "glut32.lib") #pragma comment(lib, "glaux.lib") 2,载入位图图像到内存(这是固定用法) AUX_RGBImageRec *LoadBMP(CHAR *Filename) { FILE *File = NULL; // 文件句柄 if (!Filename) // 确保文件名已提供 {

windows 下 gcc/g++ 的安装(有图,一步一步)

下载 mingw 首先打开 www.mingw.org .(注意版本,建议64bit) www.mingw.org 直接点击右上方的 Download Installer 即可下载. 点击 Download Installer 进入下载页面 在打开的新页面会提示我们等待几秒秒后将开始下载.如果十多秒后也没有反应,可以点击进度条下方的direct link手动下载. 等待几秒后页面才会弹出下载界面 想下载其他的版本,可以点击右上角的 Downloads . 点击Downloads 然后在打开的下载

Windows下CURL扩展无效之终极解决办法。

本地开发环境使用WAMP快速搭建,在使用PHP的CURL时可能会存在无法载入情况,这里提供终极解决方法. 1.在php.ini配置文件中启用 php_curll.dll 扩展: (环境已经自动附带 libeay32.dll,ssleay32.dll). 2.网络上各种将libeay32.dll.ssleay32.dll.php_curll.dll拷贝到system32的方法极为不妥,正常的方法应该是这样的:我的电脑->右键属性->高级系统设置->环境变量->系统变量->找到P

Windows下CURL扩展无效之终极解决办法

最近安装了一个opencart的B2C电商网站,网站需要开启CURL扩展,参考网上方法木有成功,最后研究了很久,现在整理出来,和大家分享一下,希望大家少走弯路. 不废话,直接来干货!操作分四步: 1.启动配置文件php.ini文件php_curll.dll扩展,至于配置文件php.ini的文件路径根据各位的安装环境而定,我的目录是"D:\Develop\PHP\"下: 2.网上常用的libeay32.dll.ssleay32.dll.php_curll.dll拷贝到"C:\S

(一)在Windows下编译扩展OpenCV 3.1.0 + opencv_contrib 及一些问题

一.准备工作: 1.下载OpenCV安装包:https://github.com/opencv/opencv 安装过程实际上就是解压过程,安装完成后得到(这里修改了文件名): 2.下载opencv_contrib源码:https://github.com/opencv/opencv_contrib 下载之后直接解压,得到源码目录: 3.下载cmake-gui工具:http://www.cmake.org/cmake/resources/software.html 选择不安装版的,根据自己的机型选

在Windows下编译扩展OpenCV 3.1.0 + opencv_contrib

为什么要CMake,这里我陈述自己的想法,作为一个刚使用opencv库的小白来说,有以下大概三点内容 1.由于在学习图像处理滤波器中,需要用到各种边缘保护滤波器(EPS)算法,但是这些算法在OpenCV 3.1.0的Release版本中存在很少,因为他们把大量的算法存放在opencv_contrib目录下面的未稳定功能模块里的ximgproc文件夹下,所以如果我们想要使用这个目录的功能,就需要自己重新进行OpenCV的编译. 2.由于现在官方的opencv3.1.0要在x64上使用,而且在vis

windows下 pycharm开发spark

一 部署本地spark环境 1.1  安装好JDK       下载并安装好jdk1.7,配置完环境变量. 1.2 Spark环境变量配置 去http://spark.apache.org/downloads.html网站下载相应hadoop对应的版本,我下载的是spark-1.6.0-bin-hadoop2.6.tgz,spark版本是1.6,对应的hadoop版本是2.6 解压下载的文件,假设解压 目录为:D:\spark-1.6.0-bin-hadoop2.6.将D:\spark-1.6.

应用纹理贴图

为了在OpenGL  ES中启用纹理贴图功能,可以在Renderer实现类的onSurfaceCreated(GL10  gl  ,  EGLConfig   config)方法中启动纹理贴图,例如如下代码: //启用2D纹理贴图 gl.glEnable(GL10.GL_TEXTURE_2D); 接下来就需要准备一张图片来作为纹理贴图了,建议改图片的长宽是2的N次方,把这张准备贴图的位图放在Android项目的/res/drawable-mdpi目录下,方便应用程序加载该图片资源. 接下来程序开