SetStreamSourceFreq

 start 参数指示第一个寄存器的序号,count指示四维向量值的数目,value指向一个值的数组。下面的例子将在寄存器c15里面存放一个值:

const float data[4] = {1.f,0.f,0.f,0.f};

device->SetVertexShaderConstantF(15,&data[0],1);

    顶点shader constant随着顶点shader 声明隐式的变化。constant寄存器的内容一直维持到设备rest。如果几个顶点shader使用同样的constant寄存器layout,constant寄存器可以只load一次,应用程序能够在几个顶点shader里面前后前换,而不必重新load constant寄存器。 设备能支持的最大的constant寄存器的数目定义在D3DCAPS9::MaxVertexShaderConst。版本1.1至少是96个。

    如果D3DCAPS9::VertexShaderVersion非0,设备将支持顶点shader。

Drawing Multiple Instances

   顶点shader 3.0架构支持以不同的速率采样不同的顶点流。这使我们能够能够绘制一个模型的多个实例,模型的数据将随着每个顶点和每个实例变化。场景数据被至少将被分成两组流,一组为每顶点的数据,一组为每实例的数据。source流的采样频率可以通过方法SetStreamSourceFreq方法设置。

HRESULT  SetStreamSourceFreq(UINT stream, UINT frequency);

   frequency将告诉runtime库在跳到下一组组件之前每组顶点组件将需要重用多少次。Flags 将告诉runtime库是否将将流解析成每顶点或者每实例。顶点shader 3.0版本支持instancing的索引流。顶点流的序号一般是从0开始,实例流的序号一般从大序号开始。

   最简单的例子如,使用相同的几何体,不同的每实例数据绘制n个几何体实例。 几何体数据将重复n次,实例数据将只重复一次。

   对于indexed primitives,将几何流的频率设置为D3DSTREAMSOURCE_INDEXDATA与流重复次数的“或”连接,将实例流的平率设置为D3DSTREAMSOURCE_INSTANCEDATA 与重用次数的"或"连接。

   如下例子:

struct GeometryVertex

{

        D3DVECTOR m_position;

       D3DVECTOR  m_normal;

}

struct InstanceVertex

{

        D3DVECTOR m_offset; //每个实例位置的偏移量

        D3DCOLOR  m_diffuse; //每个实例的diffuse color

}

IDirect3DVertexBuffer9 *geometry = fill_geometry();//一个几何体

IDirect3DVertexBuffer9* instance = fill_instance();

THR(device->SetStreamSource(0,geometry,0,sizeof(GeometryVertex)));

THR(device->SetStreamSourceFreq(0,D3DSTREAMSOURCE_INDEXEDDATA|20));//20几个体

THR(device->SetStreamSource(1,instances,0,sizeof(InstanceVertex)));

THR(device->SetStreamSourceFreq(1,D3DSTREAMSOURCE_INSTANCEDATA | 1));//渲染一次

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值