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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

多重纹理

發布時間:2025/3/13 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多重纹理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

多重紋理就是在渲染一個多邊形的時候可以用到多張紋理圖.把多張紋理圖進行一些顏色的操作,可以達到一些效果.但是多重紋理必須是在顯卡支持的情況下.但是還有一種多次渲染.可以替代多重紋理,但是這樣做的話,速度會很慢。

,在這個渲染過程中,你可以在不同的紋理單元分別放入第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 );
????
有了他們 就完成了混合函數的指定了,下面要做的事就是給一個幾何圖像同時綁上不同的紋理讓它們去按上面的公式混合吧 :
??????? glBegin(GL_QUADS);
??????? glNormal3f(0.0,0.0,1.0);
??????? glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0.0,0.0);
??????? glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0.0,0.0);
??????? glVertex3f(0.0f,0.0f,0.0f);
?
??????? glNormal3f(0.0,0.0,1.0);
??????? glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0.0,1.0);
??????? glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0.0,1.0);
?
??????? glVertex3f(0.0f,1.0f,0.0f);
?
??????? glNormal3f(0.0,0.0,1.0);
??????? glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1.0,1.0);
??????? glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1.0,1.0);
??????? glVertex3f(1.0f,1.0f,0.0f);
?
??????? glNormal3f(0.0,0.0,1.0);
??????? glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1.0,0.0);
??????? glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1.0,0.0);
??????? glVertex3f(1.0f,0.0f,0.0f);
??? glEnd();
?
???
======================== 提供一些直觀的對比 =====================================
float arr0[4] = {g_T0Blend, g_T0Blend, g_T0Blend, g_T0Blend};
float arr1[4] = {g_T1Blend, g_T1Blend, g_T1Blend, g_T1Blend};
float arr2[4] = {g_T2Blend, g_T2Blend, g_T2Blend, g_T2Blend};
如果:
??? g_T0Blend = 0.5f
??? g_T1Blend = 0.25f
?? g_T2Blend = 0.25f
rn 為混合器n 的返回值
tn 為第n單元的紋理值
//Texture0??
glActiveTextureARB(GL_TEXTURE0_ARB);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, tobjects[TO_EARTH1]);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_CONSTANT);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, arr0);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR);
以上為紋理單元0 所作的操作,其公式是:
r0 = 0.5*t0?
//Texture1
glActiveTextureARB(GL_TEXTURE1_ARB);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, tobjects[TO_EARTH1]);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_PREVIOUS);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB, GL_CONSTANT);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_SRC_COLOR);
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, arr1);
對應的公式是
r1 = (0.25*t1) + ((1-0.25)*r0) = 0.25*t1 + 0.375*t0
//Texture2
glActiveTextureARB(GL_TEXTURE2_ARB);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, tobjects[TO_EARTH2]);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_PREVIOUS);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB, GL_CONSTANT);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_SRC_COLOR);
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, arr2);
對應的公式是:
r2 = (0.25*t2) + ((1-0.25)*r1) = 0.25*t2 + 0.1875*t1 + 0.2813*t0

轉載于:https://www.cnblogs.com/ericleeviva/archive/2011/05/22/2053662.html

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 新亚洲天堂 | 女色综合 | brazzers欧美大波霸 | 精品国产乱码久久久久久88av | 无码人妻精品一区二区三区在线 | 野战少妇38p| 强行无套内谢大学生初次 | 欧美人与性动交xxⅹxx | 一级片免费 | 性欧美1819性猛交 | 传媒视频在线观看 | 国产乱淫片视频 | 6080午夜| 久久久久久久色 | av中文字幕网 | 久久少妇av | 人成网站在线观看 | 99精品视频免费观看 | 国产尤物在线观看 | 久久99精品国产麻豆婷婷洗澡 | 亚洲第七页 | 国产鲁鲁视频在线观看免费 | 亚洲深夜福利视频 | h网站免费在线观看 | 香蕉视频1024 | 熟妇人妻av无码一区二区三区 | 欧美精品日韩精品 | 99视频只有精品 | 欧美美女一区二区 | 午夜在线视频观看 | 欧美疯狂做受 | 91av官网 | 色妞av| 国产精品美女在线观看 | 黄色片视频免费看 | 在线观看午夜视频 | 久久久久亚洲av成人片 | www.4虎| 国产综合日韩 | 免费黄色小视频 | 国产高清一区二区三区 | 欧美日韩四区 | 日日色av | 90岁老太婆乱淫 | 亚洲国产精品尤物yw在线观看 | wwwjavhd| 蜜臀av性久久久久蜜臀aⅴ流畅 | 性欧美在线视频 | 最黄一级片 | 亚洲av不卡一区二区 | 日韩欧美亚洲国产精品字幕久久久 | 国产又爽又黄的激情精品视频 | 在线观看免费毛片 | 成人做爰100 | 豆国产97在线 | 亚洲 | 成人午夜福利视频 | www黄色片 | 欧美久久伊人 | 日韩av一区在线播放 | 1000部啪啪未满十八勿入 | 欧美在线黄色 | 长腿校花无力呻吟娇喘的视频 | 国产一区二区三区麻豆 | 欧美一区二区三区免 | 性免费视频 | 午夜啊啊啊 | 欧美三级色图 | 黄在线网站 | 在线免费观看成年人视频 | 久久青 | 精品日韩一区二区三区四区 | 超碰caoporen| 欧美三级理论片 | 国产一区二区三区在线视频 | avtt一区| 成人网在线| 国产精品七区 | 欧美xxxx中国 | 女性裸体不遮胸图片 | 第一次破处视频 | 精一区二区 | 国产妇女视频 | 91久久精品国产91久久性色tv | 亚洲一区成人在线 | 精品成人18| 夜色综合网 | 波多野结衣潜藏淫欲 | 91视频精品 | 国产精品一区二区毛片 | 国产精品成人久久 | 操操久久| 欧美一二三 | 无码人妻精品一区二区蜜桃视频 | 成人福利视频在线 | 插骚 | 日本三级少妇 | 午夜av免费| 污视频免费在线 | 亚洲逼院 |