青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天行健 君子當自強而不息

高級紋理映射技術(2)

紋理階段混合操作

紋理映射本質上就是從紋理中獲取顏色值,然后應用到物體的表面,多層紋理映射本質上就是混合多層紋理的顏色,然后應用到物體表面。為了處理上的方便,Direct3D將顏色的RGB通道和alpha通道分別進行處理,具體的操作方法通過紋理階段狀態進行設置。

設置紋理顏色混合操作的代碼大致如下:

// i表示紋理階段序號
pd3dDevice->SetTextureStageState(i, D3DTSS_COLORARG1, arg1);
pd3dDevice->SetTextureStageState(i, D3DTSS_COLORARG2, arg2);
pd3dDevice->SetTextureStageState(i, D3DTSS_COLOROP, op);

一般的,用D3DTSS_COLORARG1指定當前紋理層的顏色,用D3DTSS_COLORARG2指定已經過顏色混合處理后的前面所有紋理層的顏色,用D3DTSS_COLOROP指定混合方式。Direct3D使用下面的方式進行紋理混合:

Colorstage = D3DTSS_COLOROP(D3DTSS_COLORARG1, D3DTSS_COLORARG2)

渲染狀態D3DTSS_COLOROP用來指定紋理RGB通道混合方式,它們是屬于枚舉類型D3DTEXTUREOP的常量,D3DTEXTUREOP定義如下:

Defines per-stage texture-blending operations.

typedef enum D3DTEXTUREOP
{
D3DTOP_DISABLE = 1,
D3DTOP_SELECTARG1 = 2,
D3DTOP_SELECTARG2 = 3,
D3DTOP_MODULATE = 4,
D3DTOP_MODULATE2X = 5,
D3DTOP_MODULATE4X = 6,
D3DTOP_ADD = 7,
D3DTOP_ADDSIGNED = 8,
D3DTOP_ADDSIGNED2X = 9,
D3DTOP_SUBTRACT = 10,
D3DTOP_ADDSMOOTH = 11,
D3DTOP_BLENDDIFFUSEALPHA = 12,
D3DTOP_BLENDTEXTUREALPHA = 13,
D3DTOP_BLENDFACTORALPHA = 14,
D3DTOP_BLENDTEXTUREALPHAPM = 15,
D3DTOP_BLENDCURRENTALPHA = 16,
D3DTOP_PREMODULATE = 17,
D3DTOP_MODULATEALPHA_ADDCOLOR = 18,
D3DTOP_MODULATECOLOR_ADDALPHA = 19,
D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20,
D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21,
D3DTOP_BUMPENVMAP = 22,
D3DTOP_BUMPENVMAPLUMINANCE = 23,
D3DTOP_DOTPRODUCT3 = 24,
D3DTOP_MULTIPLYADD = 25,
D3DTOP_LERP = 26,
D3DTOP_FORCE_DWORD = 0x7fffffff,
} D3DTEXTUREOP, *LPD3DTEXTUREOP;

Constants

D3DTOP_DISABLE
Disables output from this texture stage and all stages with a higher index. To disable texture mapping, set this as the color operation for the first texture stage (stage 0). Alpha operations cannot be disabled when color operations are enabled. Setting the alpha operation to D3DTOP_DISABLE when color blending is enabled causes undefined behavior.
 
D3DTOP_SELECTARG1
Use this texture stage's first color or alpha argument, unmodified, as the output. This operation affects the color argument when used with the D3DTSS_COLOROP texture-stage state, and the alpha argument when used with D3DTSS_ALPHAOP.

SRGBA = Arg1
 

D3DTOP_SELECTARG2
Use this texture stage's second color or alpha argument, unmodified, as the output. This operation affects the color argument when used with the D3DTSS_COLOROP texture stage state, and the alpha argument when used with D3DTSS_ALPHAOP.

SRGBA = Arg2
 

D3DTOP_MODULATE
Multiply the components of the arguments.

SRGBA = Arg1 x Arg2
 

D3DTOP_MODULATE2X
Multiply the components of the arguments, and shift the products to the left 1 bit (effectively multiplying them by 2) for brightening.

SRGBA = (Arg1 x Arg2) << 1
 

D3DTOP_MODULATE4X
Multiply the components of the arguments, and shift the products to the left 2 bits (effectively multiplying them by 4) for brightening.

SRGBA = (Arg1 x Arg2) << 2
 

D3DTOP_ADD
Add the components of the arguments.

SRGBA = Arg1 + Arg2
 

D3DTOP_ADDSIGNED
Add the components of the arguments with a - 0.5 bias, making the effective range of values from - 0.5 through 0.5.

SRGBA = Arg1 + Arg2 - 0.5
 

D3DTOP_ADDSIGNED2X
Add the components of the arguments with a - 0.5 bias, and shift the products to the left 1 bit.

SRGBA = (Arg1 + Arg2 - 0.5) << 1
 

D3DTOP_SUBTRACT
Subtract the components of the second argument from those of the first argument.

SRGBA = Arg1 - Arg2
 

D3DTOP_ADDSMOOTH
Add the first and second arguments; then subtract their product from the sum.

SRGBA = Arg1 + Arg2 - Arg1 x Arg2 = Arg1 + Arg2 x (1 - Arg1)

D3DTA

Texture argument constants are used as values for the following members of the D3DTEXTURESTAGESTATETYPE enumerated type:

  • D3DTSS_ALPHAARG0
  • D3DTSS_ALPHAARG1
  • D3DTSS_ALPHAARG2
  • D3DTSS_COLORARG0
  • D3DTSS_COLORARG1
  • D3DTSS_COLORARG2
  • D3DTSS_RESULTARG

Set and retrieve texture arguments by calling the IDirect3DDevice9::SetTextureStageState and IDirect3DDevice9::GetTextureStageState methods.

Argument flags

You can combine an argument flag with a modifier, but two argument flags cannot be combined.

#define Description
D3DTA_CONSTANT Select a constant from a texture stage. The default value is 0xffffffff.
D3DTA_CURRENT The texture argument is the result of the previous blending stage. In the first texture stage (stage 0), this argument is equivalent to D3DTA_DIFFUSE. If the previous blending stage uses a bump-map texture (the D3DTOP_BUMPENVMAP operation), the system chooses the texture from the stage before the bump-map texture. If s represents the current texture stage and s - 1 contains a bump-map texture, this argument becomes the result output by texture stage s - 2. Permissions are read/write.
D3DTA_DIFFUSE The texture argument is the diffuse color interpolated from vertex components during Gouraud shading. If the vertex does not contain a diffuse color, the default color is 0xffffffff. Permissions are read-only.
D3DTA_SELECTMASK Mask value for all arguments; not used when setting texture arguments.
D3DTA_SPECULAR The texture argument is the specular color interpolated from vertex components during Gouraud shading. If the vertex does not contain a specular color, the default color is 0xffffffff. Permissions are read-only.
D3DTA_TEMP The texture argument is a temporary register color for read or write. D3DTA_TEMP is supported if the D3DPMISCCAPS_TSSARGTEMP device capability is present. The default value for the register is (0.0, 0.0, 0.0, 0.0). Permissions are read/write.
D3DTA_TEXTURE The texture argument is the texture color for this texture stage. Permissions are read-only.
D3DTA_TFACTOR The texture argument is the texture factor set in a previous call to the IDirect3DDevice9::SetRenderState with the D3DRS_TEXTUREFACTOR render-state value. Permissions are read-only.

Modifier flags

An argument flag may be combined with one of the following modifier flags.

#define Description
D3DTA_ALPHAREPLICATE Replicate the alpha information to all color channels before the operation completes. This is a read modifier.
D3DTA_COMPLEMENT Take the complement of the argument x, (1.0 - x). This is a read modifier.

 

黑暗映射

在Direct3D的坐標變換和光照流水線中,光照效果是基于所謂的"逐頂點(per-vertex)"方式計算的,也就是說,參與實際數計算的是三角形的每個頂點,而不是針對每個像素進行。有時這會造成一些較為明顯的視覺錯誤,例如,有一個很大的三角形,其表面近處有一個光源,當光源靠近該三角形的一個頂點時,就會看到這個三角形的受光效果;當光源向三角形的重心靠近時,三角形的受光效果便會逐漸消失。最壞的情況是,當光源位于三角形的中央時,整個三角形只受非常少的光照,而在三角形的中央會有一個亮點。由此可見,如果頂點未受光照,則無法計算出正確的三角形面的顏色。為了解決這個問題,可以采用基于像素的光照計算,但是基于像素的光照計算其計算量比較大,通常采用紋理貼圖的方式模擬基于逐像素光照效果,其中紋理貼圖的內容正式所期望的類型光源照射在一張漆黑表面上的結果。

通過紋理映射來模擬逐像素光照效果,通常是將第一層紋理設置為物體原來的表面紋理,將第二層紋理設置為光照紋理,然后將兩張紋理的顏色相乘,所以有時將兩張紋理的顏色相乘稱為光照映射(light mapping)。由于這種技術經常被用于使一張紋理變暗,有時也稱為黑暗映射(dark mapping)。示例代碼如下:

pd3dDevice->SetTexture(0, g_base_texture);
pd3dDevice->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
pd3dDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
pd3dDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);

pd3dDevice->SetTexture(1, g_dark_texture);
pd3dDevice->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 0);
pd3dDevice->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE);
pd3dDevice->SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_CURRENT);
pd3dDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_MODULATE);

物體紋理

光照紋理

 

黑暗映射的效果:

這種類型的多層紋理之所以稱為"黑暗映射",是因為最終結果中未受到"光照"的紋理元素比原圖中的紋理元素更暗。

黑暗映射通常有三種調制操作:D3DTOP_MODULATE,D3DTOP_MODULATE2X,D3DTOP_MODULATE4X。

當應用程序選擇了一張紋理作為當前紋理,也就是指示Direct3D將該紋理應用于此后所有將要渲染的圖元,直到再次改變當前紋理為止。如果一個三維場景中的每個圖元都有各自不同的紋理,則必須在渲染每個圖元之前先設置相應的紋理。


posted on 2008-05-20 13:10 lovedday 閱讀(2959) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


公告

導航

統計

常用鏈接

隨筆分類(178)

3D游戲編程相關鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美精品成人一区二区在线观看 | 99精品欧美一区| 国产欧美一区二区视频| 国产精品电影观看| 国产麻豆日韩欧美久久| 国内精品视频在线播放| 伊人精品久久久久7777| 最新国产拍偷乱拍精品| 99精品国产在热久久下载| 在线视频精品一| 久久国产黑丝| 亚洲高清不卡一区| 在线中文字幕一区| 欧美专区一区二区三区| 欧美激情91| 国产日韩亚洲欧美综合| 亚洲福利免费| 亚洲免费在线视频| 欧美成人在线网站| 亚洲欧美激情四射在线日| 老司机67194精品线观看| 欧美日韩一区二区三区在线看 | 亚洲精品免费在线| 亚洲欧美日韩久久精品| 免费看亚洲片| 国产精品永久在线| 夜夜爽99久久国产综合精品女不卡| 亚洲欧美日韩高清| 亚洲国产成人精品久久久国产成人一区| 一区二区三区四区在线| 麻豆国产精品一区二区三区 | 欧美视频中文字幕在线| 在线国产精品播放| 一区二区精品在线观看| 亚洲国产精品尤物yw在线观看| 日韩一级黄色大片| 久久人人97超碰国产公开结果| 欧美天堂亚洲电影院在线观看| 在线成人激情黄色| 久久久久成人精品| 在线视频亚洲一区| 欧美日韩视频在线第一区| 亚洲国产综合91精品麻豆| 久久精品国产综合精品| 中文在线资源观看网站视频免费不卡| 免费日韩av电影| 亚洲国产高潮在线观看| 久久久久国产免费免费| 亚洲一区一卡| 国产精品免费看| 亚洲一区网站| 亚洲视频久久| 国产精品久在线观看| 亚洲综合社区| 亚洲一级黄色av| 国产精品丝袜白浆摸在线| 亚洲网址在线| 亚洲一区二区三区视频| 欧美午夜不卡| 亚洲欧洲av一区二区| 一区二区三区四区蜜桃| 欧美日韩免费一区二区三区| 日韩一区二区精品葵司在线| 亚洲欧洲一区| 欧美手机在线视频| 羞羞答答国产精品www一本| 亚洲一区日韩| 国色天香一区二区| 欧美成人黄色小视频| 蜜臀av性久久久久蜜臀aⅴ| 亚洲三级视频在线观看| 亚洲精品国产品国语在线app| 欧美国产在线电影| 亚洲伊人观看| 香蕉久久久久久久av网站| 国内精品久久久| 欧美韩国一区| 欧美小视频在线观看| 欧美影片第一页| 久久免费99精品久久久久久| 亚洲经典三级| 亚洲午夜三级在线| 激情小说另类小说亚洲欧美 | 蜜月aⅴ免费一区二区三区| 日韩午夜精品视频| 亚洲一区二区少妇| 一区久久精品| 一本色道**综合亚洲精品蜜桃冫| 91久久精品久久国产性色也91| 欧美日韩国产精品一区二区亚洲| 久久久蜜桃精品| 久久久久久久久久久一区 | 亚洲网站在线看| 国产三级精品三级| 亚洲国产精品久久久久婷婷老年| 国产精品国产三级国产aⅴ入口| 久久久久久伊人| 欧美午夜一区二区福利视频| 久久伊人免费视频| 国产精品99免视看9| 女主播福利一区| 国产欧美日韩在线视频| 亚洲人成在线播放网站岛国| 国产亚洲成av人片在线观看桃| 最新中文字幕亚洲| 影音先锋日韩精品| 亚洲尤物在线| 亚洲免费观看| 另类图片国产| 久久亚洲综合色| 国产精品永久免费| 在线亚洲一区观看| 99www免费人成精品| 久热爱精品视频线路一| 久久狠狠婷婷| 国产精品亚洲网站| 艳女tv在线观看国产一区| 亚洲欧洲另类国产综合| 欧美一区激情| 欧美专区在线观看| 国产精品久久久久久久7电影 | 在线亚洲精品| 欧美精品日韩| 亚洲日韩成人| 亚洲精品视频一区| 免费观看不卡av| 欧美成人一区二区在线| 狠狠久久亚洲欧美专区| 欧美在线1区| 久久久亚洲精品一区二区三区| 国产精品爽爽ⅴa在线观看| 在线视频欧美日韩| 亚洲一区观看| 国产精品日日摸夜夜摸av| 一区二区久久久久久| 亚洲伊人久久综合| 国产精品一区二区女厕厕| 亚洲欧美日韩一区在线| 久久精品成人一区二区三区| 国产一区清纯| 蜜桃av综合| 亚洲另类视频| 午夜精品福利电影| 欧美韩日一区| 一区二区三区欧美日韩| 欧美午夜不卡视频| 亚洲欧美在线看| 免费永久网站黄欧美| 日韩视频免费| 国产精品国产三级国产普通话蜜臀 | 亚洲免费视频在线观看| 欧美一区二区三区精品| 国产一区二区激情| 久久亚洲春色中文字幕| 亚洲国产mv| 亚洲欧美制服另类日韩| 韩国亚洲精品| 欧美日韩八区| 欧美亚洲一区| 亚洲国产精品电影| 欧美亚洲自偷自偷| 亚洲黄色视屏| 国产伦精品一区二区三区视频黑人| 先锋资源久久| 亚洲精品一区二区在线观看| 午夜亚洲激情| 亚洲日本成人女熟在线观看| 国产精品成人一区二区三区夜夜夜| 性欧美video另类hd性玩具| 欧美第一黄色网| 亚洲欧美激情在线视频| 一区二区三区在线观看欧美| 欧美激情免费在线| 欧美在线首页| 夜夜嗨av一区二区三区网页| 久久综合九色欧美综合狠狠| 一区二区三区蜜桃网| 国产一区二区三区观看| 欧美三级小说| 欧美成人高清视频| 亚洲欧美激情精品一区二区| 亚洲国产精品免费| 久久免费视频网| 亚洲欧美清纯在线制服| 亚洲人被黑人高潮完整版| 国产一区二区三区免费观看| 欧美视频一区二区在线观看| 另类亚洲自拍| 久久久久久成人| 欧美亚洲免费电影| 亚洲私人影院在线观看| 亚洲欧洲精品一区二区三区不卡| 久久在线91| 欧美影院成人| 午夜亚洲福利| 午夜老司机精品| 亚洲欧美影音先锋| 亚洲色图综合久久| 一区二区动漫| 在线亚洲一区|