<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Direct3D中的紋理應用示例

      Direct3D中的紋理應用示例
      本文遵循“署名-非商業用途-保持一致”創作公用協議

      本文列舉了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 @ 2008-03-23 14:18  飄飄白云  閱讀(722)  評論(0)    收藏  舉報
      本博客遵循 Creative Commons License “署名-非商業用途-保持一致”創作共用協議。 與我聯系
      主站蜘蛛池模板: 亚洲国产精品男人的天堂| 国产av成人精品播放| 久久精品视频一二三四区| 久久月本道色综合久久| 国产精品欧美福利久久| 亚洲性一交一乱一伦视频| 国产中年熟女大集合| 亚洲国产精品久久久天堂麻豆宅男| 亚洲男人天堂一级黄色片| 麻豆精品一区二区三区蜜桃| 白嫩少妇无套内谢视频| 精品国产中文字幕av| 永久免费AV无码国产网站| 资兴市| 国产精品天天看天天狠| 亚洲精品网站在线观看不卡无广告| 无遮无挡爽爽免费视频| 国产av丝袜熟女一二三| 欧美日韩视频综合一区无弹窗| 中文字幕无码av不卡一区| 国产精品国产三级国产试看 | 亚洲成在人线在线播放无码| 国产精品乱一区二区三区| 国产mv在线天堂mv免费观看 | 国产高清精品一区二区三区| 99热在线观看| 在线精品另类自拍视频| 亚洲男人AV天堂午夜在| 国产精品成人午夜福利| 亚洲精品一区二区三区蜜臀| 国产乱理伦片在线观看| 亚洲av色夜色精品一区| 国产999久久高清免费观看| 好男人官网资源在线观看| 国产成人高清亚洲一区91| 国产成人精品三级麻豆| 二区三区亚洲精品国产| 白白发布视频一区二区视频| 99精品国产一区二区三区| 国产va免费精品观看| 亚洲免费观看一区二区三区|