1. 程式人生 > >Directx11教程40 紋理映射(10)

Directx11教程40 紋理映射(10)

inline put pad 圖像 pin manage ref d3d11 files

原文:Directx11教程40 紋理映射(10)

     本章嘗試使用紋理行列式,或者說紋理數組,在ps中,使用2個紋理,最終的像素顏色,是光照顏色*紋理1采樣顏色*紋理2采樣顏色,主要是想達到如下的效果:

技術分享圖片技術分享圖片

   把這兩個圖像以及光照產生的顏色融合生成以下圖像:

技術分享圖片

  為此我們新建一個lighttex2.ps文件,在其中定義:

//兩個紋理,可用於紋理混合,bump mapping等等
Texture2D shaderTexture[2];
SamplerState SampleType
;

float4 textureColor1 = shaderTexture[0].Sample(SampleType, input.tex);
float4 textureColor2 = shaderTexture[1].Sample(SampleType, input.tex);

textureColor = saturate((textureColor1 + textureColor2)/2.0);

//2.2是gamma校正值
finalcolor = finalcolor * pow(textureColor, 2.2)

另外定義一個LightTex2ShaderClass,專門用來處理lightex2.vs和lighttex2.ps,在該類中,我們通過

// 設置ps shader資源.
deviceContext->PSSetShaderResources(0, 2, texArray);

裝入一個紋理數組。

最後就是Graphics渲染類的修改,我們在左側再畫一面墻,是用一個紋理,而正面的墻,使用紋理融合。

m_textures[0] = m_TexManager->createTex(m_D3D->GetDevice(),string("stone01.dds"));
m_textures[1] = m_TexManager->createTex(m_D3D->GetDevice(),string("dirt01.dds"));

//執行平移操作,得到最終的模型世界矩陣
D3DXMatrixRotationX(&worldMatrix1, -1.57); //pai/2
D3DXMatrixTranslation(&worldMatrix2, 0.0, 0.0, 8.0);
D3DXMatrixMultiply(&worldMatrix3, &worldMatrix1, &worldMatrix2);

result = m_LightTex2Shader->Render(m_D3D->GetDeviceContext(), m_PlaneModel->GetIndexCount(), worldMatrix3, viewMatrix, projectionMatrix,
    light, material, camera,m_textures);
if(!result)
    {
    return false;
    }

//執行平移操作,得到最終的模型世界矩陣
D3DXMatrixRotationZ(&worldMatrix1, -1.57); //pai/2
D3DXMatrixTranslation(&worldMatrix2, -10.0, 0.0, 0.0);
D3DXMatrixMultiply(&worldMatrix3, &worldMatrix1, &worldMatrix2);


result = m_LightTexShader->Render(m_D3D->GetDeviceContext(), m_PlaneModel->GetIndexCount(), worldMatrix3, viewMatrix, projectionMatrix,
    light, material, camera,m_TexManager->createTex(m_D3D->GetDevice(),string("stone01.dds")));
if(!result)
    {
    return false;
    }

程序執行的界面如下:

技術分享圖片

完整的代碼請參考:

工程文件myTutorialD3D11_35

代碼下載:

http://files.cnblogs.com/mikewolf2002/d3d1127-28.zip

http://files.cnblogs.com/mikewolf2002/pictures.zip

Directx11教程40 紋理映射(10)