DirectX11-硬件多实例渲染
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-硬件多实例渲染相关推荐
- Three.js BIM模型轻量化 FPS渲染速率优化 多 实例渲染[Instance]+顶点合并[Merge]
BIM模型不经过处理,直接加载到Three.js 创建的场景中,很大可能会很使fps帧率下降,原因在于模型的个数太多,有的模型是多材质的话还需要在Three.js中绘制两次,这样会导致drawcall ...
- 实例渲染(Instanced Rendering)
Instanced Rendering 实例渲染 Introduction 介绍 Qt Quick 3D supports instancing of Model objects. Instancin ...
- 实例渲染Instanced Rendering
实例渲染Instanced Rendering 0.前言 在此之前红宝书已经介绍了不少关于缓存和绘制的命令,并给出了用同样的顶点绘制几个三角形的例程,但是此前的例程实现起来非常麻烦,每个三角形要指定一 ...
- 【 Threejs 】- Shader 着色器实例渲染教程
着色器在threejs中是一个难点,话不多说,先来看看着色器是什么? 如果您已经有使用计算机绘图的经验,您就会知道在这个过程中您先画一个圆,然后画一个矩形.一条线.一些三角形,直到您组成您想要的图像. ...
- linux下查看系统硬件,Linux 查看系统硬件信息 Linux 查看系统硬件信息(实例详解)...
linux查看系统的硬件信息,并不像windows那么直观,这里我罗列了查看系统信息的实用命令,并作了分类,实例解说.html cpu lscpu命令,查看的是cpu的统计信息.linux blue@ ...
- 单片机硬件电路设计实例分析
1, 先得了解MCU 的功能及每一个管脚的作用,确定用什么样的电源输入,有无大电流负载及一些安规方面的要求,体积封装大小有无规定. 2, 采用电池供电时是否要考虑做一些省电低功耗线路 3, 带检测功能 ...
- Directx11教程(52) 实例(instancing)的简单应用
有些时候,我们需要在场景中渲染大量的重复的物体,比如体育场中的观众,森林里面的树木等等,这些物体具有相似的形状,比如很多树木,只是位置不同,或者贴图不同而已,如果重复渲染这些树木,用billboard ...
- simulink仿真实例详解_三菱FX 5U PLC模块硬件精品实例,附接线图
今天说说三菱FX5U 模块硬件的接线实例,主要有以下几个方面:电源AC.DC接线.输入输出接线.模拟量接线.不同原理有不同的接线方式,现在给大家仔细讲解分享! AC电源接线例 漏型输入[-公共端]时的 ...
- linux看系统硬件,Linux 查看系统硬件信息(实例详解)
cpulscpu命令,查看的是cpu的统计信息.blue@blue-pc:~$lscpuArchitecture:i686#cpu架构CPUop-mode(s):32-bit,64-bitByteOr ...
最新文章
- 单身程序猿适合找单身程序媛吗?
- flex布局一行三个_CSS Flex布局
- rabbitmq代码
- [资源分享] 推荐两本电子书
- [C++]实现委托模型
- python安装到桌面的路径是什么_Python 获取windows桌面路径的5种方法小结
- mysql存储过程实验几轮_想问下数据库中有关存储过程的实验,求大神!
- 5、Spring Cloud-声明式调用 Feign(下)
- wordpress 添加友情链接
- wpsoffice 安装包_WPS office (安卓、ios) 企业版 软件介绍(附安装包)
- Kafka权威指南总结
- 环洋市场调研-2021年全球Camlock联轴器行业调研及趋势分析报告
- linux php虚拟主机,linux上php虚拟主机(linux搭建虚拟主机)
- python 同步记事本_如何使用Python同步文件夹
- CSS hover改变背景图片过渡动画生硬
- 0910---scipy.signal.argrelextrema 计算多维数组局部极值问题
- JDK中java.exe,javadoc.exe,jdb.exe,javaprof.exe分别是什么,有什么作用?
- TestBird《2021中国手游测试白皮书》---国内手游
- 【数据分析与挖掘】数据分析学习及跟课学习 | csdn_Part 02 数据结构基础
- Half a million dollars is or are a lot of money?
热门文章
- 计算机网络——IP地址的作用
- stc89C51系列单片机介绍
- 给出一个123 456的矩阵,输出转置矩阵
- disk2vhd系统转换成虚拟镜像工具
- 曲神的hu测 T2.Van(左偏树+dp)T3.Gay
- 进军NFT?方文山×周杰伦联名款公仔今日发售,将引入NFT防伪认证!
- 有什么好用的画画的app?这8款可以免费使用赶紧收藏吧!
- 二维码读取之2d_data_codes_rectify_symbol.hdev
- 带你了解现有UWB技术及原理
- CRM客户关系管理系统开发第十三讲——实现联系人管理模块中修改联系人的功能