日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

opengl多重纹理映射

發(fā)布時間:2024/8/23 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opengl多重纹理映射 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
關(guān)于多重紋理: 首先如果一個顯卡支持多重紋理,表示它可以將幾次渲染合為一次來進(jìn)行,在這個渲染過程中,你可以在不同的紋理單元分別放入第0次,第1次,第2次需要渲染的對象.當(dāng)程序向屏幕繪圖時,將這些渲染結(jié)果疊加起來,將最終結(jié)果顯示到屏幕. 每個紋理單元對應(yīng)有其紋理環(huán)境,這個紋理環(huán)境指明了渲染的紋理圖片、渲染參數(shù)、過濾參數(shù)等等,其中有一個重要的項目指明了,程序在將渲染結(jié)果進(jìn)行逐個疊加的過程中,當(dāng)前的紋理單元內(nèi)的內(nèi)容如何與前面的內(nèi)容進(jìn)行混合. 這個些參數(shù)中包含了: a .?要進(jìn)行混合的紋理的來源 這個來源要分兩步指定: 1. 對象來自哪個紋理單元[例如GL_TEXTURE0, GL_TEXTURE1],? 2.該單元中的什么成分[例如:GL_SRC_COLOR,GL_ONE_MINUS_SRC_COLOR] b. 混合所使用的函數(shù) 例如GL_ADD,GL_MODULATE,GL_INTERPLATE等 通俗一點來說呢, 如果我們要進(jìn)行一次多重渲染就是要把兩個紋理進(jìn)行一次數(shù)學(xué)運算把得到的結(jié)果投放到屏幕。? 當(dāng)然這個數(shù)學(xué)運算是需要你自己指定的這包括運算類型,操作數(shù)來源,操作數(shù)的值, 就像下面這個簡單的代數(shù)式一樣: C = A + B 要算出這個結(jié)果,那么我們首先要指定要進(jìn)行什么運算(這里是+),然后指定這個運算的兩個操作數(shù)(這里是a和b,對于渲染還要知道他們來自哪個紋理單元). 這些參數(shù)的指定都是通過用不同的參數(shù)來調(diào)用glTexEnv 完成的。然后我們就可以運算了。這個C就是我們渲染的最終結(jié)果。 具體來說:如果我們要進(jìn)行一次多重渲染: 那么首先我們要在各個紋理單元里面放入不同的紋理圖片 例如在第0號單元 放入texture[0]所對應(yīng)的圖片: glActiveTextureARB( GL_TEXTURE0_ARB ); glEnable( GL_TEXTURE_2D ); glBindTexture( GL_TEXTURE_2D, texture[0] ); 例如在第1號單元 放入texture[1]所對應(yīng)的圖片: glActiveTextureARB( GL_TEXTURE2_ARB ); glEnable( GL_TEXTURE_2D ); glBindTexture( GL_TEXTURE_2D, texture[1] ); 然后 我們開始指定我們的代數(shù)運算: 首先告訴OpenGL 我們要把兩個單元的紋理進(jìn)行混合: glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB ); 然后告訴OpenGL我們要進(jìn)行的運算: glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE_ARB ); 這里?INTERPOLATE 是指線性插值,它的公式是這樣的: C = Arg0*Arg2 + Arg1*(1-Arg2); 翻譯成代數(shù)的是這樣: C = a*ω +?b*(1-ω) ; 這下大家可以清楚的看到它是一個線性插值表達(dá)式了吧 其中:?Arg0 是第一個操作數(shù),Arg1是第二個操作數(shù),Arg2 是線性插值的系數(shù)就是那個ω了。 這些都要通過下面的函數(shù)調(diào)用來指定。當(dāng)然,混合函數(shù)還可以是GL_ADD “加”, GL_SUBTRACT “減”,GL_MODULATE “乘” 等等. 下面來說?Arg0,Arg1,Arg2 的指定: 前面提到過:要指定一個操作數(shù),需要指定它來自于哪個紋理單元,和來自于該紋理單元的哪個部分: 所以我們在下面可以看到,指定一個Arg用了兩句話,第一個指定了這個操作數(shù)的內(nèi)容來自哪個紋理單元,第二個指定了來自于紋理單元里的哪個部分: //前一個 這里指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指當(dāng)前活動的紋理單元也就是1號紋理單元 glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE ); glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR ); //由紋理環(huán)境變量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 ); 有了他們 就完成了混合函數(shù)的指定了,下面要做的事就是給一個幾何圖像同時綁上不同的紋理讓它們?nèi)グ瓷厦娴墓交旌习?: 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的opengl多重纹理映射的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。