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

隨筆 - 132  文章 - 51  trackbacks - 0
<2011年7月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

常用鏈接

留言簿(7)

隨筆分類

隨筆檔案

文章分類

文章檔案

cocos2d-x

OGRE

OPenGL

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

使用紋理的時候,你需要告訴DX如何將紋理貼到幾何體上,可以通過為每個頂點指定一個紋理坐標來實現:

下面的頂點結構使用了2套紋理坐標:
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ| D3DFVF_DIFFUSE| D3DFVF_TEX2)
struct CUSTOMVERTEX
{   FLOAT x, y, z;                    //未經過坐標轉換的頂點坐標
       DWORD color;               //頂點漫反射顏色值
       FLOAT u,v ;                        //頂點紋理坐標
       FLOAT u1,v1 ;                     //頂點紋理坐標
}
;

你可以通過SetTextureStageState()函數來指定哪一層紋理使用哪一套坐標,例如:

g_pd3dDevice->SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX, 1 ); // 0號紋理:使用1號紋理索引
g_pd3dDevice->SetTextureStageState( 1, D3DTSS_TEXCOORDINDEX, 0 ); // 1號紋理:使用0號紋理索引
 


在下面的頂點結構中只為每個頂點定義了一套紋理坐標:

#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ| D3DFVF_DIFFUSE| D3DFVF_TEX2)
struct CUSTOMVERTEX
{   FLOAT x, y, z;                    //未經過坐標轉換的頂點坐標
       DWORD color;               //頂點漫反射顏色值
       FLOAT u,v ;                        //頂點紋理坐標
}
;

但并不意味著不能使用多層紋理,只不過每個頂點只有一套紋理坐標紋理坐標供選用,例如:

g_pd3dDevice->SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX, 0 ); /**//// 0號紋理:使用0號紋理索引
g_pd3dDevice->SetTextureStageState( 1, D3DTSS_TEXCOORDINDEX, 0 ); /**//// 1號紋理:使用0號紋理索引
 


紋理混合的應用:
原文地址:http://m.shnenglu.com/kesalin/archive/2008/03/23/45183.html
本文列舉了Direct3D中各種紋理應用實現:黑暗貼圖,發光貼圖,漫反射映射貼圖,細節紋理,紋理混合,有較詳盡的注解。其中黑暗貼圖,發光貼圖,細節紋理都是采用多重紋理的方法實現(也可以采用多次渲染混合實現)。

示例代碼使用Beginning direct3D game programming中的框架,省去不少事情,可以專注紋理話題。代碼:點此下載

下面來看代碼與效果:

正常的紋理貼圖效果:


正常的紋理貼圖代碼:
 1//基本紋理
 2void drawNormalTexture()
 3{
 4    // 設置box紋理貼圖
 5    Device->SetTexture(0, texBox);
 6    Device->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);    //使用紋理坐標
 7    Device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);    // 顏色來源-材質
 8    Device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1); // 使用當前顏色作為第一個texture stage的輸出
 9
10    // 描繪box
11    Box->draw(000);
12}

黑暗紋理貼圖效果:


黑暗紋理貼圖代碼:
 1//黑暗映射紋理
 2void drawDarkMapTexture()
 3{
 4    // Multi texture:多重紋理,此處為兩重紋理
 5    // finalColor = destPixelColor * sourcePixelColor
 6    // 設置box紋理貼圖
 7    Device->SetTexture(0, texBox);
 8    Device->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
 9    Device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);    // 顏色來源-材質
10    Device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1); // 使用當前顏色作為第一個texture stage的輸出
11
12    // 設置黑暗紋理貼圖
13    Device->SetTexture(1, texAlpha);
14    Device->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 0);
15    Device->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE);    // 顏色來源-材質
16    Device->SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_CURRENT);    // 顏色來源-前一個texture stage
17    Device->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_MODULATE);    // 顏色混合:相乘
18
19    // 描繪box
20    Box->draw(000);
21}

漫反射映射貼圖效果:夜光鏡效果


漫反射映射貼圖代碼:
 1//漫射光映射紋理
 2void drawDiffuseTexture()
 3{
 4    // 設置box紋理貼圖
 5    Device->SetTexture(0, texBox);
 6    Device->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
 7    Device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);    // 顏色來源-材質
 8    Device->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);    // 顏色來源-漫反射
 9    Device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);    // 顏色混合
10
11    // 設置材質:綠色材質實現類似夜光鏡的效果
12    Device->SetMaterial(&d3d::GREEN_MTRL);
13
14    // 描繪box
15    Box->draw(000);
16}

發光映射紋理貼圖效果:


發光映射紋理貼圖代碼:
 1//發光映射紋理
 2void drawGlowMapTexture()
 3{
 4    // Multi texture:多重紋理,此處為兩重紋理
 5    // finalColor = sourcePixelColor * 1.0 + destPixelColor * 1.0
 6    // 設置box紋理貼圖
 7    Device->SetTexture(0, texBox);
 8    Device->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
 9    Device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);    // 顏色來源-材質
10    Device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1); // 使用當前顏色作為第一個texture stage的輸出
11
12    // 設置黑暗紋理貼圖
13    Device->SetTexture(1, texAlpha);
14    Device->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 0);
15    Device->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE);    // 顏色來源-材質
16    Device->SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_CURRENT);    // 顏色來源-前一個texture stage
17    Device->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_ADD);    // 顏色混合:相加
18
19    // 描繪box
20    Box->draw(000);
21}

細節映射紋理貼圖:實現粗糙的凹凸效果


細節映射紋理貼圖代碼:
 1//細節映射紋理:實現凹凸效果
 2void drawDetailMapTexture()
 3{
 4    // Multi texture:多重紋理,此處為兩重紋理
 5    // finalColor = sourcePixelColor * destPixelColor + destPixelColor * sourcePixelColor
 6    // 設置box紋理貼圖
 7    Device->SetTexture(0, texBox);
 8    Device->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
 9    Device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);    // 顏色來源-材質
10    Device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1); // 使用當前顏色作為第一個texture stage的輸出
11
12    // 設置細節紋理貼圖
13    Device->SetTexture(1, texDetail);
14    Device->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 0);
15    Device->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE);    // 顏色來源-材質
16    Device->SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_CURRENT);    // 顏色來源-前一個渲染通道
17    Device->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_ADDSIGNED);    // 顏色混合
18
19    // 描繪box
20    Box->draw(000);
21}

alpha紋理混合效果:多次渲染實現


alph紋理混合代碼:
 1//alpha混合紋理
 2void drawAlphaBlendTexture()
 3{
 4    // 多次渲染實現紋理混合
 5    // finalColor = sourcePixelColor * sourceBlendFactor + destPixelColor * destBlendFactor
 6    // 設置紋理混合參數
 7    Device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);    // alpha值來自紋理
 8    Device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
 9
10    // 設置混合因子實現透明效果
11    Device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
12    Device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
13
14    //使用box紋理貼圖實現第一次渲染,無alpha混合
15    Device->SetTexture(0, texBox);
16    Device->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
17    Device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);    // 顏色來源-材質
18    Device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1); // 使用當前顏色作為第一個texture stage的輸出
19
20    // 第一次描繪box
21    Box->draw(&boxWorldMatrix, 00);
22
23    //使用帶alpha值得flower紋理貼圖實現第二次渲染,有alpha混合
24    Device->SetTexture(0, texAlphaFlower);
25    Device->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
26    Device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);    // 顏色來源-材質
27    Device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1); // 使用當前顏色作為第一個texture stage的輸出
28
29    // 打開紋理混合
30    Device->SetRenderState(D3DRS_ALPHABLENDENABLE, true);
31
32    // 第一次描繪box
33    Box->draw(&boxWorldMatrix, 00);
34
35    // 關閉紋理混合
36    Device->SetRenderState(D3DRS_ALPHABLENDENABLE, false);
37}
posted on 2010-08-12 22:51 風輕云淡 閱讀(582) 評論(0)  編輯 收藏 引用 所屬分類: DX
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久国产精品久久久久久电车 | 亚洲毛片在线看| 久久久亚洲高清| 午夜欧美大片免费观看| 亚洲主播在线播放| 性色av一区二区三区红粉影视| 亚洲综合精品一区二区| 性欧美精品高清| 久久精品欧美| 女女同性精品视频| 亚洲国产91精品在线观看| 久久综合99re88久久爱| 亚洲福利专区| 夜夜嗨av一区二区三区网站四季av| 亚洲免费高清| 亚洲欧美国产精品桃花| 久久gogo国模裸体人体| 欧美激情一区二区三区全黄| 欧美日韩一区二区在线视频| 国产日产精品一区二区三区四区的观看方式 | 国产精品jizz在线观看美国| 国产精品黄页免费高清在线观看| 国产一区二区三区视频在线观看 | 亚洲电影毛片| 99精品视频免费观看| 亚洲欧美国产日韩天堂区| 欧美中文字幕| 欧美日韩国内| 黄色成人片子| 欧美一区二区三区四区视频| 亚洲视频在线观看视频| 午夜一区二区三视频在线观看| 久久精品99无色码中文字幕| 欧美激情精品久久久久久黑人| 99re视频这里只有精品| 久久国产主播精品| 欧美日韩视频在线一区二区观看视频| 国产夜色精品一区二区av| 亚洲老司机av| 久久女同精品一区二区| 亚洲免费高清| 欧美华人在线视频| 极品av少妇一区二区| 亚洲一区欧美| 亚洲欧洲午夜| 六月丁香综合| 国内一区二区三区| 欧美亚洲一区二区在线| 亚洲精品综合久久中文字幕| 久久久无码精品亚洲日韩按摩| 国产精品v亚洲精品v日韩精品 | 国产嫩草影院久久久久| 一区二区三区 在线观看视频| 免费不卡在线观看av| 午夜精品视频网站| 国产精品日韩精品欧美精品| 亚洲精品美女久久7777777| 久久婷婷人人澡人人喊人人爽| 亚洲天天影视| 国产精品嫩草影院av蜜臀| 一区二区三区日韩欧美精品| 欧美激情中文字幕一区二区| 久久琪琪电影院| 亚洲高清一区二| 你懂的国产精品永久在线| 久久精品成人| 狠狠久久亚洲欧美专区| 免费视频最近日韩| 久久人体大胆视频| 亚洲国产精品嫩草影院| 欧美大片网址| 欧美国产日本高清在线| 亚洲精品视频在线观看免费| 欧美激情一区二区三区成人| 欧美激情乱人伦| 在线亚洲精品| 亚洲欧美第一页| 国产一区二区三区网站| 久久漫画官网| 欧美成人性网| 亚洲深夜影院| 先锋资源久久| 亚洲国产91精品在线观看| 亚洲福利在线看| 欧美色123| 久久本道综合色狠狠五月| 久久一区国产| 亚洲国产美女| 欧美视频中文在线看| 午夜精品美女久久久久av福利| 亚洲免费视频观看| 在线不卡中文字幕| 亚洲日本成人在线观看| 欧美午夜精品久久久久久孕妇| 性感少妇一区| 久久深夜福利免费观看| 一本久久综合亚洲鲁鲁| 性欧美暴力猛交69hd| 亚洲日本va午夜在线电影 | 欧美福利视频一区| 欧美日韩精品二区| 久久久精品国产一区二区三区 | 欧美gay视频激情| 亚洲视频精选在线| 久久国产欧美精品| 日韩午夜视频在线观看| 亚洲一区视频在线观看视频| 精品9999| 亚洲一区免费网站| 夜夜嗨av色一区二区不卡| 先锋亚洲精品| 中文精品视频| 久久亚洲二区| 欧美一区二区高清在线观看| 免费久久99精品国产自| 香蕉久久夜色精品国产使用方法| 久久中文精品| 久久精品一本| 国产精品二区影院| 亚洲国产老妈| 欧美人成在线| 亚洲第一福利在线观看| 国产亚洲欧美日韩在线一区| 99国产精品一区| 亚洲国产精品一区二区三区 | 欧美日韩国产成人在线| 久久久久久久成人| 国产精品v欧美精品v日本精品动漫| 欧美成人精品高清在线播放| 国产精品美女一区二区| 日韩视频一区二区在线观看| 久久精品综合网| 久久久久88色偷偷免费| 欧美激情一区二区三区不卡| 另类激情亚洲| 国产精品免费观看视频| 夜夜嗨av一区二区三区网站四季av| 黄色精品一区| 久久精品理论片| 精品91免费| 久久精品国产一区二区电影 | 午夜精品久久久久久| 国产精品igao视频网网址不卡日韩| 99在线热播精品免费99热| 一区三区视频| 欧美伊人影院| 亚洲欧洲精品一区二区| 麻豆精品在线播放| 麻豆久久婷婷| 国产欧美一区二区精品婷婷| 亚洲一区在线观看视频 | 午夜精品一区二区三区电影天堂 | 久久久久国产免费免费| 欧美性生交xxxxx久久久| 日韩一级欧洲| 日韩午夜免费| 国产精品www网站| 老司机亚洲精品| 91久久久久久| 99re热精品| 亚洲香蕉在线观看| 国产欧美欧美| 欧美一区二区三区免费大片| 久久久人成影片一区二区三区观看 | 欧美日韩综合视频| 亚洲国产三级在线| 亚洲福利视频专区| 欧美黑人在线播放| 久久久久国产一区二区三区| 伊人久久亚洲影院| 欧美日韩国产成人在线| 亚洲精品一区中文| 欧美一区二区三区精品| 国产精品视频免费在线观看| 久久精品99| 亚洲精品欧洲| 国产亚洲精品成人av久久ww| 欧美一区二区视频观看视频| 欧美成人蜜桃| 亚洲美女精品久久| 国产欧美日韩视频在线观看| 欧美www在线| 一区二区av在线| 欧美成人在线网站| 9l国产精品久久久久麻豆| 国产欧美精品在线| 久久一区二区三区四区| 亚洲视屏在线播放| 亚洲视频网在线直播| 红桃视频一区| 欧美三级电影网| 亚洲视屏在线播放| 欧美成人一区二区三区| 先锋影音久久| 亚洲高清久久| 国产综合香蕉五月婷在线| 国产精品久久久久77777| 久久精品2019中文字幕| 亚洲一级电影| 欧美国产日韩一区二区|