標籤:
環境: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擴充與多重紋理貼圖