opengl多重纹理映射
生活随笔
收集整理的這篇文章主要介紹了
opengl多重纹理映射
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
關于多重紋理:
首先如果一個顯卡支持多重紋理,表示它可以將幾次渲染合為一次來進行,在這個渲染過程中,你可以在不同的紋理單元分別放入第0次,第1次,第2次需要渲染的對象.當程序向屏幕繪圖時,將這些渲染結果疊加起來,將最終結果顯示到屏幕.
每個紋理單元對應有其紋理環境,這個紋理環境指明了渲染的紋理圖片、渲染參數、過濾參數等等,其中有一個重要的項目指明了,程序在將渲染結果進行逐個疊加的過程中,當前的紋理單元內的內容如何與前面的內容進行混合.
這個些參數中包含了:
a .?要進行混合的紋理的來源
這個來源要分兩步指定:
1. 對象來自哪個紋理單元[例如GL_TEXTURE0, GL_TEXTURE1],?
2.該單元中的什么成分[例如:GL_SRC_COLOR,GL_ONE_MINUS_SRC_COLOR]
b. 混合所使用的函數
例如GL_ADD,GL_MODULATE,GL_INTERPLATE等
通俗一點來說呢, 如果我們要進行一次多重渲染就是要把兩個紋理進行一次數學運算把得到的結果投放到屏幕。?
當然這個數學運算是需要你自己指定的這包括運算類型,操作數來源,操作數的值, 就像下面這個簡單的代數式一樣:
C = A + B
要算出這個結果,那么我們首先要指定要進行什么運算(這里是+),然后指定這個運算的兩個操作數(這里是a和b,對于渲染還要知道他們來自哪個紋理單元).
這些參數的指定都是通過用不同的參數來調用glTexEnv 完成的。然后我們就可以運算了。這個C就是我們渲染的最終結果。
具體來說:如果我們要進行一次多重渲染:
那么首先我們要在各個紋理單元里面放入不同的紋理圖片
例如在第0號單元 放入texture[0]所對應的圖片:
glActiveTextureARB( GL_TEXTURE0_ARB );
glEnable( GL_TEXTURE_2D );
glBindTexture( GL_TEXTURE_2D, texture[0] );
例如在第1號單元 放入texture[1]所對應的圖片:
glActiveTextureARB( GL_TEXTURE2_ARB );
glEnable( GL_TEXTURE_2D );
glBindTexture( GL_TEXTURE_2D, texture[1] );
然后 我們開始指定我們的代數運算:
首先告訴OpenGL 我們要把兩個單元的紋理進行混合:
glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB );
然后告訴OpenGL我們要進行的運算:
glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE_ARB );
這里?INTERPOLATE 是指線性插值,它的公式是這樣的:
C = Arg0*Arg2 + Arg1*(1-Arg2);
翻譯成代數的是這樣:
C = a*ω +?b*(1-ω) ; 這下大家可以清楚的看到它是一個線性插值表達式了吧
其中:?Arg0 是第一個操作數,Arg1是第二個操作數,Arg2 是線性插值的系數就是那個ω了。
這些都要通過下面的函數調用來指定。當然,混合函數還可以是GL_ADD “加”,
GL_SUBTRACT “減”,GL_MODULATE “乘” 等等.
下面來說?Arg0,Arg1,Arg2 的指定:
前面提到過:要指定一個操作數,需要指定它來自于哪個紋理單元,和來自于該紋理單元的哪個部分:
所以我們在下面可以看到,指定一個Arg用了兩句話,第一個指定了這個操作數的內容來自哪個紋理單元,第二個指定了來自于紋理單元里的哪個部分:
//前一個 這里指0號單元
glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB );
//0號單元中的COLOR部分即RGB
glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR );
//這個GL_TEXTURE指當前活動的紋理單元也就是1號紋理單元
glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE );
glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR );
//由紋理環境變量GL_PRIMARY_COLOR_ARB指定的值
glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_PRIMARY_COLOR_ARB );
glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_SRC_COLOR );
有了他們 就完成了混合函數的指定了,下面要做的事就是給一個幾何圖像同時綁上不同的紋理讓它們去按上面的公式混合吧 :
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的opengl多重纹理映射的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二叉树遍历解析
- 下一篇: CDH 6 安装服务哈希验证失败 解决方