windows下opengl擴充與多重紋理貼圖

來源:互聯網
上載者:User

標籤:

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.