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);



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

上一篇:使用Bootstrap 3开发响应式网站实践05,使用Tab、Modal、Form展示内容,使用Popover、Tooltip展示提示信息


下一篇:LeetCode[Hash Table]: Minimum Window Substring