1.设置输入装配描述符
关键字:D3D11_INPUT_PER_INSTANCE_DATA
注意矩阵的更新方式,因为DXGI_FORMAT一次最多仅能够表达128位(16字节)数据,在对应矩阵的语义时,需要重复描述4次,区别在于语义索引为0-3.

const D3D11_INPUT_ELEMENT_DESC GameApp::VertexPosColor::inputLayout[] = {{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },{ "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 },{ "World", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, 0, D3D11_INPUT_PER_INSTANCE_DATA, 1},{ "World", 1, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, 16, D3D11_INPUT_PER_INSTANCE_DATA, 1},{ "World", 2, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, 32, D3D11_INPUT_PER_INSTANCE_DATA, 1},{ "World", 3, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, 48, D3D11_INPUT_PER_INSTANCE_DATA, 1}
};

2.创建实例缓冲区
注意:需要能够动态更新

 D3D11_BUFFER_DESC vbd;ZeroMemory(&vbd, sizeof(vbd));vbd.Usage = D3D11_USAGE_DYNAMIC;vbd.ByteWidth = sizeof(InstancedData) * instances.size();vbd.BindFlags = D3D11_BIND_VERTEX_BUFFER;vbd.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;D3D11_SUBRESOURCE_DATA InitData;ZeroMemory(&InitData, sizeof(InitData));InitData.pSysMem = instances.data();HR(m_pd3dDevice->CreateBuffer(&vbd, &InitData, m_pInstanceBuffer.GetAddressOf()));

3.输入装配阶段设置顶点缓冲和实例缓冲

   // 输入装配阶段的顶点缓冲区设置UINT strides[2] = { sizeof(VertexPosColor), sizeof(InstancedData)}; // 跨越字节数UINT offsets[2] = { 0,0};ID3D11Buffer* buffers[2] = { m_pVertexBuffer.Get(), m_pInstanceBuffer.Get() };// 起始偏移量m_pd3dImmediateContext->IASetVertexBuffers(0, 2, buffers, strides, offsets);

4.绘制实例

 m_pd3dImmediateContext->DrawIndexedInstanced(6, m_instancedNum, 0, 0, 0);

5.着色器设置
实例缓冲区的数据全都设置到顶点输入结构体中

struct VertexIn
{float3 posL : POSITION;// 来自输入槽0float4 color : COLOR;// 来自输入槽0matrix world : World;        // 来自输入槽1
};

DirectX11-硬件多实例渲染相关推荐

  1. Three.js BIM模型轻量化 FPS渲染速率优化 多 实例渲染[Instance]+顶点合并[Merge]

    BIM模型不经过处理,直接加载到Three.js 创建的场景中,很大可能会很使fps帧率下降,原因在于模型的个数太多,有的模型是多材质的话还需要在Three.js中绘制两次,这样会导致drawcall ...

  2. 实例渲染(Instanced Rendering)

    Instanced Rendering 实例渲染 Introduction 介绍 Qt Quick 3D supports instancing of Model objects. Instancin ...

  3. 实例渲染Instanced Rendering

    实例渲染Instanced Rendering 0.前言 在此之前红宝书已经介绍了不少关于缓存和绘制的命令,并给出了用同样的顶点绘制几个三角形的例程,但是此前的例程实现起来非常麻烦,每个三角形要指定一 ...

  4. 【 Threejs 】- Shader 着色器实例渲染教程

    着色器在threejs中是一个难点,话不多说,先来看看着色器是什么? 如果您已经有使用计算机绘图的经验,您就会知道在这个过程中您先画一个圆,然后画一个矩形.一条线.一些三角形,直到您组成您想要的图像. ...

  5. linux下查看系统硬件,Linux 查看系统硬件信息 Linux 查看系统硬件信息(实例详解)...

    linux查看系统的硬件信息,并不像windows那么直观,这里我罗列了查看系统信息的实用命令,并作了分类,实例解说.html cpu lscpu命令,查看的是cpu的统计信息.linux blue@ ...

  6. 单片机硬件电路设计实例分析

    1, 先得了解MCU 的功能及每一个管脚的作用,确定用什么样的电源输入,有无大电流负载及一些安规方面的要求,体积封装大小有无规定. 2, 采用电池供电时是否要考虑做一些省电低功耗线路 3, 带检测功能 ...

  7. Directx11教程(52) 实例(instancing)的简单应用

    有些时候,我们需要在场景中渲染大量的重复的物体,比如体育场中的观众,森林里面的树木等等,这些物体具有相似的形状,比如很多树木,只是位置不同,或者贴图不同而已,如果重复渲染这些树木,用billboard ...

  8. simulink仿真实例详解_三菱FX 5U PLC模块硬件精品实例,附接线图

    今天说说三菱FX5U 模块硬件的接线实例,主要有以下几个方面:电源AC.DC接线.输入输出接线.模拟量接线.不同原理有不同的接线方式,现在给大家仔细讲解分享! AC电源接线例 漏型输入[-公共端]时的 ...

  9. linux看系统硬件,Linux 查看系统硬件信息(实例详解)

    cpulscpu命令,查看的是cpu的统计信息.blue@blue-pc:~$lscpuArchitecture:i686#cpu架构CPUop-mode(s):32-bit,64-bitByteOr ...

最新文章

  1. 单身程序猿适合找单身程序媛吗?
  2. flex布局一行三个_CSS Flex布局
  3. rabbitmq代码
  4. [资源分享] 推荐两本电子书
  5. [C++]实现委托模型
  6. python安装到桌面的路径是什么_Python 获取windows桌面路径的5种方法小结
  7. mysql存储过程实验几轮_想问下数据库中有关存储过程的实验,求大神!
  8. 5、Spring Cloud-声明式调用 Feign(下)
  9. wordpress 添加友情链接
  10. wpsoffice 安装包_WPS office (安卓、ios) 企业版 软件介绍(附安装包)
  11. Kafka权威指南总结
  12. 环洋市场调研-2021年全球Camlock联轴器行业调研及趋势分析报告
  13. linux php虚拟主机,linux上php虚拟主机(linux搭建虚拟主机)
  14. python 同步记事本_如何使用Python同步文件夹
  15. CSS hover改变背景图片过渡动画生硬
  16. 0910---scipy.signal.argrelextrema 计算多维数组局部极值问题
  17. JDK中java.exe,javadoc.exe,jdb.exe,javaprof.exe分别是什么,有什么作用?
  18. TestBird《2021中国手游测试白皮书》---国内手游
  19. 【数据分析与挖掘】数据分析学习及跟课学习 | csdn_Part 02 数据结构基础
  20. Half a million dollars is or are a lot of money?

热门文章

  1. 计算机网络——IP地址的作用
  2. stc89C51系列单片机介绍
  3. 给出一个123 456的矩阵,输出转置矩阵
  4. disk2vhd系统转换成虚拟镜像工具
  5. 曲神的hu测 T2.Van(左偏树+dp)T3.Gay
  6. 进军NFT?方文山×周杰伦联名款公仔今日发售,将引入NFT防伪认证!
  7. 有什么好用的画画的app?这8款可以免费使用赶紧收藏吧!
  8. 二维码读取之2d_data_codes_rectify_symbol.hdev
  9. 带你了解现有UWB技术及原理
  10. CRM客户关系管理系统开发第十三讲——实现联系人管理模块中修改联系人的功能