本节内容主要学习了如何把代码中的变量传到vertex shader中去。通过这个来设置一个静态的摄像机。
但是自己写代码下来,还是对其中的一些细节产生了疑问。比如说:
1.Effect File中的缓冲区和代码中缓冲区(或者结构体)名称是否保持一致?
A:不必保持一致,只需要结构体中的内容保持一致就而可以。
2.如果要设置多个变量个多个EffectFile中的缓冲区怎么办?
A:注意代码中我们调用了d3d11DevCon->VSSetConstantBuffers(0, 1, &constantbuffer);
第一个参数是对应的缓冲槽,当我们在Effect中定义缓冲区时可以指定槽,代码如下:
cbuffer cbPerObject1:register(b2)
{
float4x4 WVP1;
};
第二个参数是要绑定的缓冲区个数。我们这里只绑定一个。
在CreateBuffer时,就可以创建多个Buffer,如果这里要绑定两个buffer,那么就可以这么调用调用函数
ID3D11Buffer ** test = &constantbuffer;
test[1] = constantbuffer;
hr = d3d11Device->CreateBuffer(&cbbd, NULL, test);(这里创建两个缓冲区)
在UpdateSubresource函数调用之后,我们把test[1]赋值为constantbuffer(这样test有了两个缓冲区,并且都指向constantbuffer)
最后设置Effectfile中的缓冲区
d3d11DevCon->VSSetConstantBuffers(2, 2, test);
这样我们就可以在EffectFile中的register(b2)和register(b3)中找到设置的两个缓冲区了。