【DirectX11】【学习笔记(9)练习】纹理贴图

上一节对我们所绘制的物体设置了纹理,但主要对其中一个函数有些疑问:

ID3D11DeviceContext :: PSSetShaderResource()

当我们对一个物体想设置多个纹理,或者想同时传入两个纹理进行混合时该怎么办?

第一种方法:

针对上面这个函数,第一个参数是穿入shader的槽。

我们在effect file中写的texture变量后面可以加寄存器(槽),如下

Texture2D texture04 : register(t0);  
TextureCube myCubeMap : register(t1); 

这样我们改变第一个参数为1时,就会传入到myCubeMap中,当然也可以一次传入多个贴图,

ID3D11DeviceContext :: PSSetShaderResource(0,2,&data);

这样的话就会同时给t0和t1传入,前提是data包含了两个贴图的数据。

最后在PS函数中修改对应的贴图即可。

第二种方法:

直接将effect file中的贴图变量声明为数组,在传入时传入两个贴图数据,说明代码如下:

for (int i = 0 ; i < nNumTex ; ++i) {
		hr = D3DX11CreateShaderResourceViewFromFile(pDevice, texFileName[i], nullptr, nullptr, &pShaderResourceView[i], nullptr);
		if (FAILED(hr)) {
			MessageBox(nullptr, "ERROR::CreateShaderResourceView", "Error", MB_OK);
			return hr;
		}
	}



PSSetShaderResources(0, nNumTex, pShaderResourceView); //here





effect file中的对应修改如下:

Texture2D tex[2];
float4 PS(VS_OUTPUT input) : SV_TARGET
{
   return tex[0].Sample(samp, input.texcoord) * 0.5f + tex[1].Sample(samp, input.texcoord) * 0.5;
}

这样也可以实现一次传入两个贴图并且进行混合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值