<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Clayman's Graphics Corner</title><subtitle type="text">DirectX,XNA, Shader &amp; Game Engine Programming</subtitle><id>http://feed.cnblogs.com/blog/u/56161/rss</id><updated>2011-11-20T07:42:20Z</updated><author><name>clayman</name><uri>http://www.cnblogs.com/clayman/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/clayman/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/56161/rss"/><entry><id>http://www.cnblogs.com/clayman/archive/2011/10/25/2224532.html</id><title type="text">The Beauty of DirectX 11 (4) -- Append/Consume,Byte Address and Indirect Argument Buffer</title><summary type="text">Append/Consume,Byte Address and Indirect Argument Buffer</summary><published>2011-10-25T14:42:00Z</published><updated>2011-10-25T14:42:00Z</updated><author><name>clayman</name><uri>http://www.cnblogs.com/clayman/</uri></author><link rel="alternate" href="http://www.cnblogs.com/clayman/archive/2011/10/25/2224532.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/clayman/archive/2011/10/25/2224532.html"/><content type="html">&lt;p&gt;&lt;span style="color: #000080"&gt;&lt;span style="color: rgb(0,0,255); font-size: 18pt"&gt;&lt;strong&gt;The Beauty of DirectX 11 (4) -- Append/Consume,Byte Address and Indirect Argument Buffer&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&lt;span style="color: rgb(0,0,255); font-size: 18pt"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000080"&gt;&lt;span style="color: rgb(0,0,255); font-size: 18pt"&gt;&lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;&lt;strong&gt;作者：clayman&lt;/strong&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: rgb(255,0,0)"&gt;&lt;strong&gt;仅供个人学习使用，请勿转载，勿用于任何商业用途。&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/span&gt;&lt;span style="color: #000080"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff; font-size: 14pt"&gt;Append/Consume Buffers&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Append&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;和&lt;/span&gt;&lt;span style="color: #000080"&gt;comsume buffer&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;都是&lt;/span&gt;&lt;span style="color: #000080"&gt;SBV&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;的变体。本质上，他们都是需要&lt;/span&gt;&lt;span style="color: #000080"&gt;UAV&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;绑定的资源，但他们在&lt;/span&gt;&lt;span style="color: #000080"&gt;HLSL&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;中实现了一种类似堆栈的访问行为：使用&lt;/span&gt;&lt;span style="color: #000080"&gt;append()&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;函数把元素&lt;/span&gt;&lt;span style="color: #000080"&gt;push&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;到&lt;/span&gt;&lt;span style="color: #000080"&gt;buffer&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;中，或者用&lt;/span&gt;&lt;span style="color: #000080"&gt;consume()&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;函数拉出元素。对于这两种&lt;/span&gt;&lt;span style="color: #000080"&gt;buffer&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;来说，添加元素的顺序并不重要，但所添加元素的数量很重要。&lt;/span&gt;&lt;span style="color: #000080"&gt;UAV&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;内部会记录添向&lt;/span&gt;&lt;span style="color: #000080"&gt;buffer&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;中添加或者删除的元素数量，因此当不同的&lt;/span&gt;&lt;span style="color: #000080"&gt;GPU&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;线程同时操作这样的&lt;/span&gt;&lt;span style="color: #000080"&gt;buffer&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;时，并不需要同步，大大提高了效率。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;我们通过一个简单的例子来介绍这种&lt;/span&gt;&lt;span style="color: #000080"&gt;buffer&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;的用途，一个基于&lt;/span&gt;&lt;span style="color: #000080"&gt;GPU&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;的粒子系统：系统使用&lt;/span&gt;&lt;span style="color: #000080"&gt;2&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;块&lt;/span&gt;&lt;span style="color: #000080"&gt;buffer&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;保存粒子信息，一块保存粒子当前的状态，另一块保存更新过的粒子。运行时，&lt;/span&gt;&lt;span style="color: #000080"&gt;computer shader&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;中的每个一个&lt;/span&gt;&lt;span style="color: #000080"&gt;GPU&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;线程都使用&lt;/span&gt;&lt;span style="color: #000080"&gt;consume()&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;方法读取当前粒子信息，进行更新计算，然后，用&lt;/span&gt;&lt;span style="color: #000080"&gt;append()&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;方法把结果写到另一块&lt;/span&gt;&lt;span style="color: #000080"&gt;buffer&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;中。由于每个粒子的状态都是独立的，所以&lt;/span&gt;&lt;span style="color: #000080"&gt;buffer&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;中粒子的顺序无关紧要，只要保证数量正确即可。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;创建&lt;/span&gt;&lt;span style="color: #000080"&gt;A/C&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;类型的&lt;/span&gt;&lt;span style="color: #000080"&gt;buffer&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;约束比较严格，因为&lt;/span&gt;&lt;span style="color: #000080"&gt;buffer&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;需要可同时读写，需要使用&lt;/span&gt;&lt;span style="color: #000080"&gt;D3D11_USAGE_DEFAULT&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;标志，此外绑定标识必须包含&lt;/span&gt;&lt;span style="color: #000080"&gt;3D311_BIND_UNORDERED_ACCESS&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;标识，一般还需要加上&lt;/span&gt;&lt;span style="color: #000080"&gt;D3D11_BIND_SHADER_RESOURCE&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;。创建相应的&lt;/span&gt;&lt;span style="color: #000080"&gt;RV&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;时，数据格式总是&lt;/span&gt;&lt;span style="color: #000080"&gt;DXGI_FORMAT_R32_UNKNOWN&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;，同时无论是&lt;/span&gt;&lt;span style="color: #000080"&gt;append&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;还是&lt;/span&gt;&lt;span style="color: #000080"&gt;comsume buffer&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;都必须用&lt;/span&gt;&lt;span style="color: #000080"&gt;D3D11_BUFFER_UAV_FLAG_APPEND&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;参数。上一部分介绍&lt;/span&gt;&lt;span style="color: #000080"&gt;B/S buffer&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;时曾经说个可以把&lt;/span&gt;&lt;span style="color: #000080"&gt;B/S buffer&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;划分为多个&lt;/span&gt;&lt;span style="color: #000080"&gt;subresource&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;，分别使用不同的&lt;/span&gt;&lt;span style="color: #000080"&gt;RV&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;，但是，对于允许读写操作&lt;/span&gt;&lt;span style="color: #000080"&gt;UAV&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;来说却不行，这样的资源只能作为一个整体。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;下面是在&lt;/span&gt;&lt;span style="color: #000080"&gt;HLSL&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;中声明&lt;/span&gt;&lt;span style="color: #000080"&gt;A/C buffer&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;的代码&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff"&gt;struc Particle&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; float3 position;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; float3 velocity;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; float time;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff"&gt;AppendStructuredBuffer&amp;lt;Particle&amp;gt;&amp;nbsp;newSimulationState : register(u0);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff"&gt;ConsumeStrucuredBuffer&amp;lt;Particle&amp;gt;&amp;nbsp;currentSimulationState : register (u1);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff; font-size: 14pt"&gt;Byte Address Buffers&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BAB&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;为&lt;/span&gt;&lt;span style="color: #000080"&gt;HLSL&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;提供了一种相对低级的方式来访问显存块。与通过索引访问元素的方法不同，&lt;/span&gt;&lt;span style="color: #000080"&gt;BAB&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;使用字节地址访问其中的元素&lt;/span&gt;&lt;span style="color: #000080"&gt;: &lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;字节地址&lt;/span&gt;&lt;span style="color: #000080"&gt;n&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;代表的值为从资源开头偏移&lt;/span&gt;&lt;span style="color: #000080"&gt;n&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;个字节后的&lt;/span&gt;&lt;span style="color: #000080"&gt;4&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;个&lt;/span&gt;&lt;span style="color: #000080"&gt;32&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;位无符号整数的值，注意，&lt;/span&gt;&lt;span style="color: #000080"&gt;n&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;必须为&lt;/span&gt;&lt;span style="color: #000080"&gt;4&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;的倍数，指向的&lt;/span&gt;&lt;span style="color: #000080"&gt;4&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;个&lt;/span&gt;&lt;span style="color: #000080"&gt;32&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;位无符号整数也可以通过转型转义为其他类型的值。这种类型的&lt;/span&gt;&lt;span style="color: #000080"&gt;buffer&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;为&lt;/span&gt;&lt;span style="color: #000080"&gt;HLSL&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;提供了强大的数据管理操作能力，几乎可以用它来实现任意类型的数据结构。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;举例来说，一个储存&lt;/span&gt;&lt;span style="color: #000080"&gt;32&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;位颜色值的链表，每个链表节点由一个颜色值和指向下一个元素的标记组成。当添加第一个元素时，颜色值被写到偏移值为&lt;/span&gt;&lt;span style="color: #000080"&gt;0&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;的位置，指向下一个元素的索引为&lt;/span&gt;&lt;span style="color: #000080"&gt;-1&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;。&lt;/span&gt; &lt;span style="font-family: 宋体; color: #000080"&gt;添加第二个元素时，程序首先读取偏移值为&lt;/span&gt;&lt;span style="color: #000080"&gt;0&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;处的&lt;/span&gt;&lt;span style="color: #000080"&gt;2&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;个&lt;/span&gt;&lt;span style="color: #000080"&gt;32&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;位值，然后通过索引，依次找到链表末端，最后完成添加。使用&lt;/span&gt;&lt;span style="color: #000080"&gt;BAB&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;，以前很多只能在&lt;/span&gt;&lt;span style="color: #000080"&gt;CPU&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;上计算的传统算法，都可以能&lt;/span&gt;&lt;span style="color: #000080"&gt;GPU&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;上实现了！&lt;/span&gt; &lt;span style="font-family: 宋体; color: #000080"&gt;当然，由于&lt;/span&gt;&lt;span style="color: #000080"&gt;GPU&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;天生的平行性，实际情况要稍微复杂一些，以后会仔细介绍。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BAB&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;的创建方式与前面介绍的几种资源基本一致，唯一的区别是需要把&lt;/span&gt;&lt;span style="color: #000080"&gt;MiscFlags&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;指定为&lt;/span&gt;&lt;span style="color: #000080"&gt;D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;。只读的&lt;/span&gt;&lt;span style="color: #000080"&gt;BAB&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;可以通过&lt;/span&gt;&lt;span style="color: #000080"&gt;shader resource view&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;绑定到任意&lt;/span&gt;&lt;span style="color: #000080"&gt;shader&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;阶段；作为&lt;/span&gt;&lt;span style="color: #000080"&gt;UAV&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;使用的可读写&lt;/span&gt;&lt;span style="color: #000080"&gt;BAB&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;则只能绑定到&lt;/span&gt;&lt;span style="color: #000080"&gt;pixel shader&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;和&lt;/span&gt;&lt;span style="color: #000080"&gt;compute shader&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;阶段。两种情况下，&lt;/span&gt;&lt;span style="color: #000080"&gt;RV&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;都必须是&lt;/span&gt;&lt;span style="color: #000080"&gt;DXGI_FORMAT_R32_TYPELESS&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;格式，&lt;/span&gt;&lt;span style="color: #000080"&gt;UAV&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;还必须加上&lt;/span&gt;&lt;span style="color: #000080"&gt;D3D11_BUFFER_UAV_FLAG_RAW&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;标识。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;在&lt;/span&gt;&lt;span style="color: #000080"&gt;HLSL&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;中，用以下代码声明&lt;/span&gt;&lt;span style="color: #000080"&gt;BAB&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;资源：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff"&gt;ByteAddressBuffer rawBuffer0;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff"&gt;RWByteAddressBuffer rawBUffer1;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff; font-size: 14pt"&gt;Indirect Argument Buffers&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;前面介绍的几种&lt;/span&gt;&lt;span style="color: #000080"&gt;buffer&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;主要用于把数据从&lt;/span&gt;&lt;span style="color: #000080"&gt;CPU&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;端传递到&lt;/span&gt;&lt;span style="color: #000080"&gt;GPU&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;端，而&lt;/span&gt;&lt;span style="color: #000080"&gt;IAB&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;的设计理念是允许&lt;/span&gt;&lt;span style="color: #000080"&gt;GPU&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;自己填充数据，并且在后面的计算中使用。&lt;/span&gt;&lt;span style="color: #000080"&gt;IAB&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;主要在以下三个函数中使用：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff"&gt;DrawInstancedIndirect(ID3D11Buffer* pBufferForArgs, UINT AlignedByteOffsetForArgs);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff"&gt;DrawIndexedInstancedIndirect(ID3D11Buffer *pBufferForArgs,UINT AlignedByteOffsetForArgs);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff"&gt;void DispatchIndirect(ID3D11Buffer *pBufferForArgs,UINT AlignedOffsetForArgs);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;三个函数都以&lt;/span&gt;&lt;span style="color: #000080"&gt;indirect&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;后缀结尾，与没有&lt;/span&gt;&lt;span style="color: #000080"&gt;indirect&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;后缀的方法相比，虽然参数类型不同，本质却相同，比如&lt;/span&gt;&lt;span style="color: #000080"&gt;DrawInstanced()&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;接受&lt;/span&gt;&lt;span style="color: #000080"&gt;4&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;个参数：&lt;/span&gt;&lt;span style="color: #000080"&gt;vertexCountPerInstance,instanceCount,startVertexLocation&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;和&lt;/span&gt;&lt;span style="color: #000080"&gt;startInstanceLocation&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;。&lt;/span&gt;&lt;span style="color: #000080"&gt;Indirect&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;版本同样需要这&lt;/span&gt;&lt;span style="color: #000080"&gt;4&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;个参数，只不过把他们放到了第一个参数&lt;/span&gt;&lt;span style="color: #000080"&gt;pBufferForArgs&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;中，并且通过第二个参数定位他们在&lt;/span&gt;&lt;span style="color: #000080"&gt;buffer&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;中的位置。因此，必须保证&lt;/span&gt;&lt;span style="color: #000080"&gt;pBufferForArgs&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;在指定偏移位置有&lt;/span&gt;&lt;span style="color: #000080"&gt;4&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;个有效的&lt;/span&gt;&lt;span style="color: #000080"&gt;uint&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;值，并且偏移值必须以&lt;/span&gt;&lt;span style="color: #000080"&gt;4byte&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;对齐的，&lt;/span&gt;&lt;span style="color: #000080"&gt;pBufferForArgs&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;可以在不同位置，包含多组不同的参数值，通过&lt;/span&gt;&lt;span style="color: #000080"&gt;offset&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;选择希望使用的参数。这样的好处在于&lt;/span&gt;&lt;span style="color: #000080"&gt; buffer&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;数据可由&lt;/span&gt;&lt;span style="color: #000080"&gt;GPU&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;填充，所以&lt;/span&gt;&lt;span style="color: #000080"&gt;CPU&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;完全不需要知道要绘制多少图元！图形管线输出的数据和&lt;/span&gt;&lt;span style="color: #000080"&gt;CPU&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;计算的结果都可以用来更新&lt;/span&gt;&lt;span style="color: #000080"&gt;IAB&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;数据。&lt;/span&gt; &lt;span style="font-family: 宋体; color: #000080"&gt;比如，把&lt;/span&gt;&lt;span style="color: #000080"&gt;compute shader&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;的计算结果保存到&lt;/span&gt;&lt;span style="color: #000080"&gt;AppendStructuredBuffer&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;中，使用&lt;/span&gt;&lt;span style="color: #000080"&gt;ID3D11DeviceContext:CopyStructureCount&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;把&lt;/span&gt;&lt;span style="color: #000080"&gt;AppendStructuredBuffer&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;中的数据复制到&lt;/span&gt;&lt;span style="color: #000080"&gt;IAB&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;中，最后使用&lt;/span&gt;&lt;span style="color: #000080"&gt;DrawInstancedIndirect()&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;把&lt;/span&gt;&lt;span style="color: #000080"&gt;CS&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;计算的数据直接渲染出来，整个过程只需要很少的&lt;/span&gt;&lt;span style="color: #000080"&gt;CPU&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;参与，&lt;/span&gt;&lt;span style="color: #000080"&gt;CPU&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;完全不用知道渲染了多少图形。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;创建&lt;/span&gt;&lt;span style="color: #000080"&gt;IAB&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;的方法和前面几种&lt;/span&gt;&lt;span style="color: #000080"&gt;buffer&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;没有太多区别，一般来说，如果希望用&lt;/span&gt;&lt;span style="color: #000080"&gt;GPU&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;填充数据，那么一定要使用&lt;/span&gt;&lt;span style="color: #000080"&gt;default usage&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;，此外，&lt;/span&gt;&lt;span style="color: #000080"&gt;MiscFlags&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;必须是&lt;/span&gt;&lt;span style="color: #000080"&gt;D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;，最后，&lt;/span&gt;&lt;span style="color: #000080"&gt;byteWidth&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;必须是&lt;/span&gt;&lt;span style="color: #000080"&gt;4byte&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;的&lt;/span&gt;&lt;span style="color: #000080"&gt;n&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;倍。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;当由&lt;/span&gt;&lt;span style="color: #000080"&gt;GPU&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;填充&lt;/span&gt;&lt;span style="color: #000080"&gt;IAB&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;数据时，比如通过&lt;/span&gt;&lt;span style="color: #000080"&gt;stream out&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;，&lt;/span&gt;&lt;span style="color: #000080"&gt;render target&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;或者&lt;/span&gt;&lt;span style="color: #000080"&gt;UAV&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;方式，必须和配合相应的&lt;/span&gt;&lt;span style="color: #000080"&gt;resource view&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;一起使用，当由&lt;/span&gt;&lt;span style="color: #000080"&gt;CPU&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;填充数据时，则主要通过&lt;/span&gt;&lt;span style="color: #000080"&gt;UpdateSubresource&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;方法和&lt;/span&gt;&lt;span style="color: #000080"&gt;CopyStructureCount&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 至此，我们介绍了DirectX 11中的所有buffer resource，下一部分将讨论texture resource。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;------------------------------to be continue----------------------------------------------&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;再次提醒，已经发了的四篇文章对DX11的介绍都比较抽象，如果觉得看不太懂，那么应该先找一些有demo的DX11的入门教程来看。这系列的文章偏重对DX11 API原理的介绍和梳理，适合作为参考资料，而不是第一本入门教程。未来的内容在介绍完texture resource之后，还主要有以下几个部分：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;Rendering Pipeline 介绍流水线的每一个阶段&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;Tessellation Pipeline&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;Computation Pipeline&amp;nbsp;&amp;nbsp; 着重介绍DX11中两个最重要的功能&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;HLSL 5.0&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;Multithreaded Rendering&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/clayman/aggbug/2224532.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/clayman/archive/2011/10/25/2224532.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/clayman/archive/2011/10/18/2216889.html</id><title type="text">The Beauty of DirectX 11 (3) --- constant buffer, buffered/structure buffer</title><summary type="text">constant buffer &amp; buffered/structure buffer</summary><published>2011-10-18T13:24:00Z</published><updated>2011-10-18T13:24:00Z</updated><author><name>clayman</name><uri>http://www.cnblogs.com/clayman/</uri></author><link rel="alternate" href="http://www.cnblogs.com/clayman/archive/2011/10/18/2216889.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/clayman/archive/2011/10/18/2216889.html"/><content type="html">&lt;p class="MsoNormal" align="center"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: rgb(0,0,255); font-size: 18pt"&gt;&lt;strong&gt;The Beauty of DirectX 11 (3) --- constant buffer, buffered/structure buffer&lt;/strong&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: rgb(0,0,255); font-size: 18pt"&gt;&lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;&lt;strong&gt;作者：clayman&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: rgb(255,0,0)"&gt;&lt;strong&gt;仅供个人学习使用，请勿转载，勿用于任何商业用途。&lt;/strong&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;p class="MsoNormal"&gt;&lt;span style="color: #0000ff" lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #0000ff; font-size: 18pt"&gt;Constant Buffer&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #0000ff; mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;Constant buffer(cb)&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;DX10&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;中引入的概念，它取代了&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;DX9&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;时代&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;GPU&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;常量寄存器的概念，允许通过一块大小可变的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;向&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;shader&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;提供常量数据，而不是之前数量非常受限的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;n&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;个寄存器，这&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;也是我们遇到的第一种可在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;shader&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;着色阶段由&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;HLSL&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;访问的资源。&lt;/span&gt;&lt;font face="Calibri"&gt; &lt;/font&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;管线的每个可编程阶段都能同时访问一个或者几个&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;cb&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，对于&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;shader&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;代码来说，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;cb&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;中的数据都是全局常量，作为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;cb&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;而创建的资源不能绑定到其他&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;*&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;类型&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;*&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;的管线位置，但同一个&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;cb&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;可以同时绑定到管线的多个不同阶段。&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;span style="mso-tab-count: 1"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;虽然&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;cb&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;与&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;DX&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;中&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;shader constant&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;的用法几乎一样，但要特别注意，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;cb&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;中的数据总是作为一个整体被提交给&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;GPU&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，这意味着即使&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;cb&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;中只有一个变量改变了，也必须重新提交整个&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;cb&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;。因此，所有关于&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;DX10/11&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;的文章都会强调不要把所有变量都放到一个&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;cb&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;中，而是按照变量改变的频率来组织变量，以尽量减少带宽消耗。比如，把&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;viewMatrix,viewProjMatrix,eyePosition,sunVector&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;等&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;per-frame&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;数据放到&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;cb0&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;中，只要每帧渲染前更新一次即可；把&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;worldMatrix&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;localLight&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;objectColor&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;等作为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;per-object&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;参数放到另外一块&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;cb&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;中，每次渲染物体时更新。游戏总是以每秒&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;30fps&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;以上的速度运行，并且每帧需要渲染大量物体，因此，合理组织&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;cb&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;非常重要！&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;span style="mso-tab-count: 1"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;创建&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;cb&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;的代码和上一次创建&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;vertex buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;的代码类似，大部分参数的用途也一致，选择合适的枚举，以获得最好性能。有三点需要注意的地方，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;1. cb&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;中的数据结构应该直接对应着&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;HLSL&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;中的数据结构，这样更新&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;cb&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;时，只需要直接复制数据即可；&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;2. cb&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;的大小必须是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;16byte&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;n&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;倍&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;(n&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;个&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;float4&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;大小&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;)&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;；&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;3. cb&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;bind flag&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;只能是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;D3D11_BIND_CONSTANT_BUFFER&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，不能与其他位标记组合使用。使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;cb&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;时，不需要&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;resource view&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，可以直接绑定到管线。&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;span style="mso-tab-count: 1"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;因为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;cb&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;shader&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;直接可访问的资源，在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;HLSL&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;中，用以下语法声明&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;cb&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;：&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;cbuffer&amp;nbsp;Tramsform&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;matrix&amp;nbsp;worldMatrix;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;matrix&amp;nbsp;worldViewProjMatrix;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;matrix&amp;nbsp;bones[&lt;span style="color: #800080"&gt;26&lt;/span&gt;];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;cbuffer&amp;nbsp;View&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;float3&amp;nbsp;eyePosition;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;matrix&amp;nbsp;viewMatrix;&lt;br /&gt;}&lt;/div&gt;&lt;/div&gt;&lt;p class="MsoNormal"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;span lang="EN-US"&gt;&lt;span style="mso-tab-count: 1"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #0000ff"&gt;cbuffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;关键字声明&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;cb&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;cb&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;的名称一般对&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;HLSL&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;没太多用处，而是让&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;C++&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;应用程序端来识别特定&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;cb&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;。可以通过&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;shader reflection API&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;获得每个&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;cb&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;中的数据结构信息，在介绍&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;HLSL&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;的部分会详细讨论。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #0000ff; font-size: 18pt"&gt;Buffer/Structured Buffer Resource&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;span style="mso-tab-count: 1"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;接下来的一种资源，根据所保存的数据类型不同，又分为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #0000ff"&gt;standard(buffered) buffer resouce(&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;扭曲的名字&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;)&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #0000ff"&gt;structured buffer resource&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;。两者都是类似数组的结构，区别在于&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;BBR&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;的元素是普通内置类型，比如&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;float4&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，而&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;SBR&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;的元素则是自定义的结构。之所以要做区分，原因是底层在处理数据映射到&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;HLSL&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;时的方式稍有不同。这种类型的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;特别适合于&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;shader&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;需要访问大量数据的情况。也是目前为止第一种需要通过&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;resource view&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;绑定到管线的资源。所有可编程&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;shader&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;阶段都可访问&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;b/s buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;pixel shader&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;computer shader&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;中还允许写入操作。通过不同的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;resource view&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;来控制&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;b/s buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;的可访问性，比如&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;shader resource view, unordered access view&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;或者两者一起使用，任何&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;shade&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;都可以使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;shader resource view&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;标志，而&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;unordered access view&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;则只能对&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;ps&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;cs&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;使用。当&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;b/s buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;为只读时，可以同时绑定到管线的多个阶段；允许写入时（使用了&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;uav&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;标志）则只能绑定到一个位置。&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #000080"&gt;B/S buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;有三种典型的用途，第一种，用来保存静态数据，比如预计算的辐射传播&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;(PRT)&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;数据；第二种，运行时，由&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;CPU&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;计算出的数据，比如很多涉及到&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;GPGPU&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;的算法；最后一种则是由&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;GPU&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;计算填充的数据，比如由&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;GPU&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;计算的物理模拟结果。创建&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;b/s buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;时，通常根据这三种用途，选择合适的访问参数。对于&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;structured buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;来说，除了指定&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;大小之外，还需要提供每个结构的大小。以下是创建&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;structured buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;的代码：&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;ID3D11Buffer*&amp;nbsp;CreateStructuredBuffer(&lt;span style="color: #0000ff"&gt;uint&lt;/span&gt;&amp;nbsp;count,&lt;span style="color: #0000ff"&gt;uint&lt;/span&gt;&amp;nbsp;structSize,&lt;span style="color: #0000ff"&gt;bool&lt;/span&gt;&amp;nbsp;CPUWritable,&lt;span style="color: #0000ff"&gt;bool&lt;/span&gt;&amp;nbsp;GPUWritable,D3D11_SUBRESOURCE_DATA*&amp;nbsp;pData)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;D3D11_BUFFER_DESC&amp;nbsp;desc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;desc.ByteWidth&amp;nbsp;=&amp;nbsp;count&amp;nbsp;*&amp;nbsp;structSize;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;desc.MiscFlags&amp;nbsp;=&amp;nbsp;D3D11_RESOURCE_MISC_MUFFER_STRUCTURED;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;desc.StructureByteStride&amp;nbsp;=&amp;nbsp;structSize;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(!CPUWritable&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;!GPUWriteable)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;desc.BindFlags&amp;nbsp;=&amp;nbsp;D3D11_BIND_SHADER_RESOURCE;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;desc.Usage&amp;nbsp;=&amp;nbsp;D3D11_USAGE_IMMUTABLE;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;desc.CPUAccessFlags&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080"&gt;0&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(&amp;nbsp;CPUWritable&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;!GPUWritable)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; desc.BindFlags&amp;nbsp;=&amp;nbsp;D3D11_BIND_SHADER_RESOURCE;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;desc.Usage&amp;nbsp;=&amp;nbsp;D3D11_USAGE_DYNAMIC;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;desc.CPUAccessFlags&amp;nbsp;=&amp;nbsp;D3D11_CPU_ACCESS_WRITE;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(&amp;nbsp;!CPUWritable&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;GPUWritable&amp;nbsp;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;desc.BindFlags&amp;nbsp;=&amp;nbsp;D3D11_BIND_SHADER_RESOURCE&amp;nbsp;|&amp;nbsp;D3D11_BIND_UNORDERED_ACCESS;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;desc.Usage&amp;nbsp;=&amp;nbsp;D3D11_USAGE_DEFAULT;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;desc.CPUAccessFlags&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080"&gt;0&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&amp;nbsp;(&amp;nbsp;CPUWritable&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;GPUWritable)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;error&amp;nbsp;handling&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;resource&amp;nbsp;acan&amp;#8217;t&amp;nbsp;be&amp;nbsp;write&amp;nbsp;by&amp;nbsp;both&amp;nbsp;CPU&amp;nbsp;and&amp;nbsp;GPU&amp;nbsp;simultaneously&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID3D11BUFFER*&amp;nbsp;pBuffe&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080"&gt;0&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HRESULT&amp;nbsp;hr&amp;nbsp;=&amp;nbsp;pDevice-&amp;gt;CreateBuffer(&amp;nbsp;&amp;amp;desc,pData,&amp;amp;pBuffer);&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/span&gt;(FAILED(hr))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800080"&gt;0&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&lt;/span&gt;&amp;nbsp;pBuffer;&lt;br /&gt;}&lt;/div&gt;&lt;/div&gt;&lt;p class="MsoNormal"&gt;&lt;/o:p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #000080"&gt;B/S buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;需要通过&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;RV&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;才能绑定到管线上，并且只能是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;shader resource view&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;或者&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;unordered access view&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;。需要在创建&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;RV&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;时提供&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;的数据格式，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;BBR&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;的格式必须是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;DXGI&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;中定义的格式之一，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;SBR&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;的格式总是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;DXGI_FORMAT_UNKNOWN&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;。创建&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;RV&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;时，可以指定开始元素&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;(ElementOffset)&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;的位置和元素个数&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;(ElementWidth)&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，可以选择把整个或者一部分&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;数据包含在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;view&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;中。对于&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;HLSL&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;来说，绑定到管线的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;则总是一个下表标从在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;[0,ElementWidth]&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;之间的数组。&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;ID3D11ShaderResourceVIew*&amp;nbsp;CreateBufferSRV&amp;nbsp;(&amp;nbsp;ID3D11Rsource*&amp;nbsp;pResource)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;D3D11_SHADER_RESOURCE_VIEW_DESC&amp;nbsp;desc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;desc.Format&amp;nbsp;=&amp;nbsp;DXGI_FORMAT_R32G32B32_FLOAT;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;desc.ViewDimension&amp;nbsp;=&amp;nbsp;D3D11_SRV_DIMENSION_BUFFER;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;desc.Buffer.ElementOffset&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080"&gt;0&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;desc.Buffer.ElementWidth&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080"&gt;100&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID3D11ShaderResourceView*&amp;nbsp;view&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080"&gt;0&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HRESULT&amp;nbsp;hr&amp;nbsp;=&amp;nbsp;pDevice-&amp;gt;CreateShaderResourceView(pResource,&amp;nbsp;&amp;amp;desc,&amp;nbsp;&amp;amp;pView);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&amp;nbsp;pView;&lt;br /&gt;}&lt;/div&gt;&lt;/div&gt;&lt;p class="MsoNormal"&gt;&lt;font color="#000080" face="宋体"&gt;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;span lang="EN-US"&gt;&lt;span style="mso-tab-count: 1"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;ElementOffset&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;ElementWidth&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;参数，可以把同一个&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;B/S buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;分成多个子&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，每个子&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;都可以有独立的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;RV&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;。创建&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;UAV&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;的方法和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;SRV&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;类似，但需要额外加一个属性：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;desc.Buffer.Flags = D3D11_BUFFER_UAV_FLAG_COUNTER;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;span style="mso-tab-count: 1"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;为了在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;shader&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;中访问&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;B/S buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;数据，&lt;/span&gt;&lt;font face="Calibri"&gt; &lt;span style="color: #000080" lang="EN-US"&gt;HLSL&lt;/span&gt;&lt;/font&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;中也要用类似一种模板或泛型的语法声明相应的变量，下面是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;SBR&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;的声明：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #0000ff"&gt;struct&lt;/span&gt;&amp;nbsp;GridPoint&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;float&lt;/span&gt;&amp;nbsp;height;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float4&amp;nbsp;flow;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;RWStructuredBuffer&amp;lt;GridPoint&amp;gt;&amp;nbsp;newWaterState&amp;nbsp;&amp;nbsp;:register(u0);&lt;br /&gt;StructuredBuffer&amp;lt;GridPoint&amp;gt;&amp;nbsp;currentWaterState&amp;nbsp;&amp;nbsp;:register(t0);&lt;/div&gt;&lt;/div&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;span style="mso-tab-count: 1"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;可以通过两种方法声明结构化&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;RWStructuredBuffer&amp;lt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;StructuredBuffer&amp;lt; &amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;。区别在于前者对应着可读可写的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;（&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;UAV&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;），后者则是只读的数据（&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;SRV&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;），注意，不同&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;对应的寄存器标识也不一样。声明了&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;HLSL&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;变量以后，就能用普通数组的语法，通过索引访问&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;中的数据了。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;HLSL&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;中提供&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;GetDimensions()&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;函数，可以返回&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;大小，或者是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;SBR&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;中的数组元素个数。对于使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;UAV&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;绑定的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;SRB&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;来说，由于指定了&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;D3D11_BUFFER_UAV_FLAG_COUNTER&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;标记，还可以使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;IncrementCounter()&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;DecrementCounter&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;函数管理数据。&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;-------------------------------------to be continue----------------------------------&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/clayman/aggbug/2216889.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/clayman/archive/2011/10/18/2216889.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/clayman/archive/2011/10/09/2204295.html</id><title type="text">The Beauty of DirectX 11 (2) --- Resource View &amp;amp; Vertex Buffer</title><summary type="text">Resource view and buffered resource in DirectX 11</summary><published>2011-10-09T14:00:00Z</published><updated>2011-10-09T14:00:00Z</updated><author><name>clayman</name><uri>http://www.cnblogs.com/clayman/</uri></author><link rel="alternate" href="http://www.cnblogs.com/clayman/archive/2011/10/09/2204295.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/clayman/archive/2011/10/09/2204295.html"/><content type="html">&lt;p class="MsoNormal" align="center"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: rgb(0,0,255); font-size: 18pt"&gt;&lt;strong&gt;The Beauty of DirectX 11 (2) --- Resource View &amp;amp; Vertex Buffer&lt;/strong&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: rgb(0,0,255); font-size: 18pt"&gt;&lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;&lt;strong&gt;作者：clayman&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: rgb(255,0,0)"&gt;&lt;strong&gt;仅供个人学习使用，请勿转载，勿用于任何商业用途。&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #0000ff; font-size: 12pt"&gt;CPU Access Flag(D3D11_CPU_ACCESS_FLAG)&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;span style="mso-tab-count: 1"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;这是一个位标记，在指定&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;usage flage&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;之后，进一步说明是否允许&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;cpu&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;访问某块资源&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;(&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;其实个人觉得这个枚举稍微有些多余&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;)&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;。这个标记必须配合&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;usage&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;使用，比如只有&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;dynamic&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;stagin&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;资源能设置为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;D3D11_CPU_ACCESS_WRITE&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;。如果一块资源不需要被&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;CPU&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;访问，那么必须把值设置为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;0.&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #0000ff; font-size: 12pt"&gt;Bind Flags&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;span style="mso-tab-count: 1"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;指定资源可以绑定到&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;pipeline&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;的哪些位置。这同样是一个位标记，因此可以组合起来，允许资源绑定到流水线的多个位置。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #0000ff"&gt;D3D11_BIND_FLAG {&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;D3D11_BIND_VERTEX_BUFFER,&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;D3D11_BIND_INDEX_BUFFER,&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;D3D11_BIND_CONSTANT_BUFFER,&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;D3D11_BIND_SHADER_RESOURCE,&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;D3D11_BIND_STREAM_OUTPUT,&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;D3D11_BIND_RENDER_TARGET,&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;D3D11_BIND_DEPTH_STENCIL,&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;D3D11_BIND_UNORDERED_ACCESS &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #0000ff"&gt;}&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;span style="mso-tab-count: 1"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;整个管线只有&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;8&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;种类型的位置可以绑定资源，分别对应&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;D3D11_BIND_FLAG&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;中的一个值。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;Vertex/index buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;表示资源可以作为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;input assembler&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;阶段的输入数据；&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;render target&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;depth stencil&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;表示资源可以接收&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;output merger&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;阶段的数据；&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;stream out&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;表示可以接收来自于&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;pipeline&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;生成的几何数据。这几个枚举分别对应着管线中的一个可绑定点。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;Constant buffer, shader resource&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;unorderer access&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;则都可以作为可编程阶段的输入数据。后面会讨论三者之间的区别。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;span style="mso-tab-count: 1"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;此外&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #0000ff"&gt;Miscellaneous Flags&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;中的枚举值，用来指定一些特别的用途，大部分值都不经常用到，不再仔细介绍，详见文档。唯一值得一提的是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #0000ff"&gt;D3D11_RESOURCE_MISC_GDI_COMPATIBLE&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，这个值允许创建与&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;GDI&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;兼容的资源，对于需要用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;GDI&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;创建文字的程序可能会用到。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #0000ff; font-size: 14pt"&gt;Resource View&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;span style="mso-tab-count: 1"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;有两种方法把资源绑定到&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;pipeline&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，如前所述的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;8&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;种绑定点中，有一半可以直接绑定资源，分别是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;vertex/index/const/stream buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;；其他&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;4&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;种类型则必须通过&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;Resource View&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;（&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;RV&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;）绑定。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;Resource View&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;是在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;DirectX10&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;时代引入的概念，它实际上是连接&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;resouce&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;pipeline&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;绑定点之间的一种适配器对象，作用类似翻译。同一种资源可以对应多个不同的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;RV&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，允许它被绑定到不同的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;pipline&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;阶段。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #0000ff; font-size: 12pt"&gt;resource type&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;span style="mso-tab-count: 1"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;有四种不同类型的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;RV&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，分别对应着&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;pipeline&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;中的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;4&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;个可绑定位置：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;Render target view (ID3D11RenderTargetView)&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;Depth stencil view (ID3D11DepthStencilView)&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;Shader resource view (ID3D11ShaderResourceView)&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;Unordered access view (ID3D11UnorderedAccessView)&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;span style="mso-tab-count: 1"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;第一种就是常见的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;render target&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，大家应该很熟悉，没有太多可说的。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;DSV&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;RTV&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;的区别在于为了优化性能，可以选择&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;DSV&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;是否可写。不可写的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;DSV&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;资源既可以绑定为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;depth stencil buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;做&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;depth stencil test&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，又能&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;*&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;同时&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;*&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;绑定为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;SRV&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;使用。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;SRV&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;其实和之前&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;DX&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;中纹理的作用几乎一样。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;UVA&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;则稍微有些特别，和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;SRV&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;类似，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;UVA&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;也可以为某个&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;shader&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;阶段提供数据，不仅如此，它还允许在同一个&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;shader&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;阶段，同时读取和写入数据，并且能把数据写入到资源的任意位置，灵活性非常高，但只能在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;pixel shader&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;compute shader&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;中使用。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #0000ff; font-size: 12pt"&gt;Resource View Creation&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;span style="mso-tab-count: 1"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;创建&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;RV&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;的模式和创建资源的模式类似，也通过&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;ID3DDevice&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;的成员函数完成，每个&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;Create&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;函数接收&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;3&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;个参数，第一个是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;RV&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;所依赖的资源；第三个是所创建的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;RV&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;对象。第二个参数则是每个类型都不同的一个属性结构，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;SDK&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;中对这些结构有详细描述，这里不再重复。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #0000ff; font-size: 18pt"&gt;&lt;strong&gt;Resource in Detail&lt;/strong&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #0000ff; font-size: 14pt"&gt;Buffer Resource&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #000080"&gt;BR&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;是一维的线性内存块，虽然有多种不同的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;配置选项，但内部数据都是基本的线性布局。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;Buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;以&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;byte&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;为单位，大小等于每个元素大小乘元素个数，与普通数组类似。接下来将详细介绍每一种&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #0000ff; font-size: 14pt"&gt;Vertex Buffer&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #000080"&gt;VB&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;最基本的用途就是保存几何体顶点数据，是一系列格式相同的顶点的集合。当然，也可以把顶点的不同元素分离到不同&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;VB&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;中，比如位置信息储存在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;vb1&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，纹理和法线信息储存在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;vb2&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，根据渲染时的需要选择使用合适的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，也就是常说的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;multi-stream&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;。此外，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;VB&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;也可以用来实现&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;instancing rendering(&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;注：后文将把&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;instance&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;翻译为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;&amp;#8221;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;副本&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;&amp;#8221;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，而不是常见的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;&amp;#8221;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;实体&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;&amp;#8221;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，这样更容易理解&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;)&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，比如用一块或几块&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;vb&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;保存&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;per-vertex data&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，也就是普通的顶点数据，再用额外的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;vb&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;来提供&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;per-instance data&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，比如每个模型副本的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;world matrix&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;color&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;等等，这样便可一次渲染大量图形，减少&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;CPU&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;负载。后面还会详细介绍与&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;instancing rendering&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;相关的内容。&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #000080"&gt;VB&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;主要用于&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;Input Assembler&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;阶段给整个流水线提供顶点数据，也可以用于&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;stream out&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;阶段接收生成的顶点，以便后续渲染使用。&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;span style="mso-tab-count: 1"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;创建&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;VB&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;时，必须使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;D3D11_BIND_VERTEX_BUFFER&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;以及可选的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;D3D11_BIND_STREAM_OUTPUT&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;枚举。再根据程序预期的用途，选择合适的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;usage&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;e.g&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;对于静态资源&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;(&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;静态模型，地形数据&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;)&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;D3D11_USAGE_IMMUTABLE&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;枚举，并且使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;D3D11_SUBRESOURCE_DATA&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;参数初始化资源；对需要频繁修改的资源使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;D3D11_USAGE_DYNAMIC&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;以及&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;D3D11_CPU_ACCESS_WRITE&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;枚举；对于需要作为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;stream output&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;输出目标的资源，使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;D3D11_USAGE_DEFAULT&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;VB&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;不需要&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;RV&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;就可以绑定到管线。&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;ID3D11Device*&amp;nbsp;pDevice&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080"&gt;0&lt;/span&gt;;&lt;br /&gt;ID3DBuffer*&amp;nbsp;CreateVertexBuffer(&lt;span style="color: #0000ff"&gt;uint&lt;/span&gt;&amp;nbsp;size,&amp;nbsp;&lt;span style="color: #0000ff"&gt;bool&lt;/span&gt;&amp;nbsp;dynamic,&amp;nbsp;&lt;span style="color: #0000ff"&gt;bool&lt;/span&gt;&amp;nbsp;streamout,&amp;nbsp;D3D11_SUBRESOURCE_DATA*&amp;nbsp;pData)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;D3D11_BUFFER_DESC&amp;nbsp;desc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;desc.ByteWidth&amp;nbsp;=&amp;nbsp;size;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;desc.MiscFlags&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080"&gt;0&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;desc.StructureByteStride&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080"&gt;0&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(streamout)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;desc.BindFlags&amp;nbsp;=&amp;nbsp;D3D11_BIND_VERTEX_BUFFER&amp;nbsp;|&amp;nbsp;D3D11_BIND_STREAM_OUTPUT;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;desc.BindFlags&amp;nbsp;=&amp;nbsp;D3D11_BIND_VERTEX_BUFFER;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(dynamic)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;desc.Usage&amp;nbsp;=&amp;nbsp;D3D11_USAGE_DYNAMIC;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;desc.CPUAccessFlags&amp;nbsp;=&amp;nbsp;D3D11_CPU_ACCESS_WRITE&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;desc.Usage&amp;nbsp;=&amp;nbsp;D3D11_USAGE_IMMUTABLE;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;desc.CPUAccessFlags&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080"&gt;0&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;ID3DBuffer*&amp;nbsp;pBuffer&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080"&gt;0&lt;/span&gt;;&lt;br /&gt;HRESULT&amp;nbsp;hr&amp;nbsp;=&amp;nbsp;pDevice-&amp;gt;CreateBuffer(&amp;amp;desc,pData,&amp;amp;pBuffer);&lt;br /&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(FAILED(hr))&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800080"&gt;0&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&amp;nbsp;pBuffer;&lt;br /&gt;}&lt;/div&gt;&lt;/div&gt;&lt;p class="MsoNormal"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #0000ff; font-size: 14pt"&gt;Index buffer&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #000080"&gt;Index buffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;的基本操作都与&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;vertex buuffer&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;基本类似，详细请参考&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="color: #000080"&gt;sdk&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;文档。&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; color: #000080; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;-------------------------------------to be continue----------------------------------&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;本文以及未来文章中的代码都未经编译测试&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;关于DirectX 11 pipeline流程图，参考&lt;a href="http://www.cnblogs.com/clayman/archive/2010/12/31/1923354.html"&gt;这里&lt;/a&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/clayman/aggbug/2204295.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/clayman/archive/2011/10/09/2204295.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/clayman/archive/2011/10/09/2203177.html</id><title type="text">The Beauty of DirectX 11 (1)  ---  Device &amp;amp; Resource</title><summary type="text">这是一系列关于DirectX 11的文章中的第一篇,初步介绍关于device和resource的内容...</summary><published>2011-10-08T16:39:00Z</published><updated>2011-10-08T16:39:00Z</updated><author><name>clayman</name><uri>http://www.cnblogs.com/clayman/</uri></author><link rel="alternate" href="http://www.cnblogs.com/clayman/archive/2011/10/09/2203177.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/clayman/archive/2011/10/09/2203177.html"/><content type="html">&lt;p align="center"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-size: 18pt;"&gt;&lt;strong&gt;The Beauty of DirectX 11 (1)&amp;nbsp; ---&amp;nbsp; Device &amp;amp; Resou&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-size: 18pt;"&gt;&lt;strong&gt;rce&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;strong&gt;作者：clayman&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;strong&gt;仅供个人学习使用，请勿转载，勿用于任何商业用途。&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;这是一系列关于&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;DirectX11&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;的文章中的第一篇，部分内容来自于&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;&lt;a href="http://www.amazon.com/Practical-Rendering-Computation-Direct3D-11/dp/1568817207"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;lt;&amp;lt;Practical Rendering &amp;amp; Computation with Direct3D &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;11&amp;gt;&amp;gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;一书(我没有电子版，不要找我要电子版@_@!!如果你感兴趣，&lt;a href="http://hieroglyph3.codeplex.com/"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;这里&lt;/span&gt;&lt;/a&gt;可以找到此书的源码)，但不是翻译。文章&lt;font color="#000080"&gt;不会介绍常见的基本概念，并且&lt;/font&gt;假定读者已经有&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;DirectX9/10&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;或者&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;xna&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;使用经验，并对图形学有一定了解。此外，&lt;font color="#000080"&gt;也不会有太多示例代码，我将会着重介绍DirectX 11中API的新特性和用法，整个pipeline流程以及HLSL 5.0， &lt;/font&gt;文章将不定期更新，但不保证最后一定能写完:) &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;当使用&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;DirectX 11&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;时，首先要清楚的就是&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;device&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;拆分为了&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;2&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;个类：&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;device&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;和&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;device &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;context&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;。&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;ID3D11Device&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;负责资源创建，查询硬件功能一些和&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;debug&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;相关的操作。&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;ID3D11Device&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;还引入了一个称为&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;feature levels&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;的概念&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;和&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;dx9&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;中的&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;Caps&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;类似&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;，允许&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;DirectX11&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;运行在早期硬件上，比如&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;DX9/10&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;级别的&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;GPU&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;。这意味着开发者可以使用一组统一的接口来开发运行在不同代硬件上的程序。因此，如果你正考虑更新引擎的话，可以直接跳过&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;DirectX10&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;，升级到&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;DirectX11&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;。&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;所有使用资源，管理渲染流水线的功能，则属于&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;device context&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;的职责，包括绑定资源，&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;shader&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;，设置&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;render state&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;，执行渲染命令等等。&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;Device context&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;的功能通过&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;ID3D11DeviceContext&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;接口实现&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;为了支持多线程，又分为&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;immediate context&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;和&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;deferred context&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;两种。前者和之前的&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;DX device&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;类似，每个程序只允许有一个&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;immediate context&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;，它所发出的所有命令都直接由&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;runtime&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;提交到到驱动执行。&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;Dferred context&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;所发出的命令则先缓存在一块&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;command list&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;缓冲中，提交整块缓冲时，才会依次执行其中的指令。这部分会在讲多线程的时候详细讨论。可以通过&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;D3D11CreateDevice&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;和&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;D3D11CreateDeviceAndSwapChain&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;创建设备，&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;SDK&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;对这两个函数，以及所有参数的用法有详细文档，这里不再重复。&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;接下来，我们将详细讨论&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;DX11&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;中的资源&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;Resource)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;，因为它们是所有操作的最基本元素。&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;DX11&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;中的资源分为两类：&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;buffer&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;和&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;texture&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;，每种又有各自的子类型，以及不同的配置参数，基本类关系如下：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;ID3D11Resource&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;|---- ID3DBuffer&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;|---- ID3D11Texture1D&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;|---- ID3D11Texture2D&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;|---- ID3D11Texture3D&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;如前所述，所有资源都必须通过&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;ID3D11Device&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;创建，所创建的资源可以直接或者间接通过&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;resource view&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;绑定到&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;pipleline&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;的某个阶段。虽然每种创建每种资源的方法不一样，但模式是相同的：所有创建函数都接受&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;3&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;个参数&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt; 1. &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;包含了对所创建资源各种选项描述的结构（&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;resource description&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;）&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;, 2. &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;指向&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;D3D11_SUBRESOURCE_DATA&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;结构，用来初始化资源数据的指针&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;, e.g &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;用来初始化&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;vertex buffer&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;的顶点数据。如果希望稍后再填充数据，可以使用&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;null&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;；&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;3&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;，所创建的资源对象。每种资源的&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;resource description&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;都不一样，接下来，我介绍一些常用参数和选项：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;Resource Usage Flags(D3D11_USAGE)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;资源可以存放在显存和系统内存，可以作为复制操作的数据源或者目标。&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;DX&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;根据这个枚举来选择放置资源的位置以及内部如何操作&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;,e.g &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;把只有&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;GPU&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;能操作的资源放到显存中，这个参数类似于之前的&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;memory pool&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;，区别在于&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;memory pool&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;是直接指定了资源位置。&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;D3D11_USAGE&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;有四个值，每种的访问级别也不一样&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GPU-Read&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GPU-Write&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CPU-Read&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CPU-Write&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;Default&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;yes&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;yes&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;Dynamic&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;yes&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; yes&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;Immutable&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; yes&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;Staging&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;yes&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;yes&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; yes&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; yes&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;Immutable&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;最简单的类型，一旦创建之后数据就不可改变。适合储存静态数据，比如静态常量，顶点索引缓冲等。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;Default&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;对于只需要被&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;GPU&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;操作&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;读写&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;的数据来说，这是最优的选项，适合于&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;render target, stream ouput vertex buffer&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;等。这种类型资源通常存在于显存中，效率非常高。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;Dynamic&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;这是一种&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;CPU&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;可以访问的资源，允许&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;CPU&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;写入数据，之后由&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;GPU&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;读取，注意&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;CPU&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;是不能访问已写入输入的，适合于&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;shader constant buffer.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;Staging&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;这种类型的资源提供了一种特别的访问模式，允许&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;GPU&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;写入数据，之后由&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;CPU&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;读出。它存在的主要作用是提供其他&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;3&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;种资源之间的交换，对于&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;GPGPU&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;和&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;stream output&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: 宋体;"&gt;&amp;nbsp;特别有用&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;下一部分讲继续讨论与资源相关的内容.....&lt;/span&gt;&lt;/p&gt;&lt;p&gt;-------------------------------------to be continue----------------------------------&lt;br /&gt;&lt;br /&gt;嗯嗯，我还活着，又打算开始写东西了.......&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;   &lt;img src="http://www.cnblogs.com/clayman/aggbug/2203177.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/clayman/archive/2011/10/09/2203177.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/clayman/archive/2010/12/31/1923354.html</id><title type="text">DirectX Rendering Pipeline</title><summary type="text">DirectX 9/10/11 pipeline</summary><published>2010-12-31T10:08:00Z</published><updated>2010-12-31T10:08:00Z</updated><author><name>clayman</name><uri>http://www.cnblogs.com/clayman/</uri></author><link rel="alternate" href="http://www.cnblogs.com/clayman/archive/2010/12/31/1923354.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/clayman/archive/2010/12/31/1923354.html"/><content type="html">&lt;p&gt;DirectX 9:&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/clayman/DXpipeline-9_0.jpg" width="753" height="1488" /&gt;&lt;/p&gt;&lt;p&gt;可以在&lt;a href="http://www.cppblog.com/sunicdavy/archive/2010/05/26/116371.html"&gt;&lt;span style="color: #0000ff"&gt;战魂的blog&lt;/span&gt;&lt;/a&gt;可以下到完整的大图。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;以下三张是Wolfgang Engel大师制作的，因为翻墙才能看到，所以转过来了&lt;/p&gt;&lt;p&gt;DirectX 10：&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/clayman/D3D10CheatSheet.jpg" width="812" height="1080" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;DirectX 11：&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/clayman/DX11.JPG" width="906" height="1197" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;DirectComputer：&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/clayman/DirectComputeCheatSheet.jpg" width="812" height="395" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/clayman/aggbug/1923354.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/clayman/archive/2010/12/31/1923354.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/clayman/archive/2010/12/24/1916029.html</id><title type="text">Windows phone开发者们，快来投票啊~~</title><summary type="text">There is a petition open for signature to convince Microsoft to open the Windows Phone 7 Marketplace to all countries.....</summary><published>2010-12-24T07:12:00Z</published><updated>2010-12-24T07:12:00Z</updated><author><name>clayman</name><uri>http://www.cnblogs.com/clayman/</uri></author><link rel="alternate" href="http://www.cnblogs.com/clayman/archive/2010/12/24/1916029.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/clayman/archive/2010/12/24/1916029.html"/><content type="html">&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 看来MS markectplace的政策不但让国内开发者很不爽，国外开发者也怨声载道。有人发起了投票，请愿ms对全球开发者开放markectplace。各位国内的开发者也来投上一票吧，只需10秒的时间，并请转发给你认识的开发者，猛击下面地址：&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.petitiononline.com/wp7intl/petition.html"&gt;&lt;span style="color: #0000ff"&gt;http://www.petitiononline.com/wp7intl/petition.html&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/clayman/aggbug/1916029.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/clayman/archive/2010/12/24/1916029.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/clayman/archive/2010/12/11/1902782.html</id><title type="text">Working with FBX SDK (2)</title><summary type="text">上一篇文章介绍了fbx sdk的基本用法，接下来我们继续讨论如何取得normal，tangent，binormal和uv信息.........</summary><published>2010-12-10T20:07:00Z</published><updated>2010-12-10T20:07:00Z</updated><author><name>clayman</name><uri>http://www.cnblogs.com/clayman/</uri></author><link rel="alternate" href="http://www.cnblogs.com/clayman/archive/2010/12/11/1902782.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/clayman/archive/2010/12/11/1902782.html"/><content type="html">&lt;p align="center"&gt;&lt;span style="color: #0000ff; font-size: 14pt"&gt;&lt;strong&gt;Working with FBX SDK (2)&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000"&gt;仅供个人学习使用，请勿转载，勿用于任何商业用途&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000"&gt;作者：clayman&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color: #000080"&gt;&lt;a href="http://www.cnblogs.com/clayman/archive/2010/12/10/1901779.html"&gt;&lt;span style="color: #ff6600"&gt;上一篇文章&lt;/span&gt;&lt;/a&gt;介绍了fbx sdk的基本用法，接下来我们继续讨论如何取得normal，tangent，binormal和uv信息。先介绍一些关于KFbxLayer对象的概念。KFbxLayer对象是一个容器，对mesh来说，它包含了除控点，多边形信息以外大部分数据，比如normal，tangent，vertex color，uv等等。一个mesh可以包含多个KFbxLayer对象，不同layer之间的元素类型，个数通常都不相同。下面是一个简单的mesh结构关系：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;mesh ---- layer 0 { KFbxLayerElementNormal, KFbxLayerElementTangent, KFbxLayerElementUV&amp;#8230;..}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |------layer 1 {KFbxLayerElementUV&amp;#8230;&amp;#8230;&amp;#8230;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |-- &amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230;..&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |-- layer n&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 虽然FBX允许有多层layer，但很多软件包括maya和max都只处理包含在第一个layer中的normal等数据！ 每种保存在KFbxLayer的元素都继承于KFbxLayerElement，比如KFbxLayerElementNormal对应normal数据，KFbxLayerElementTangent对应tangent的数据。可以通过KFbxLayer中定义的各种Get函数，返回需要的KFbxLayerElement，如果为空，则说明当前layer中没有这种元素。KFbxLayerElement还中包含了两个非常重要的属性KFbxLayerElement::EMappingMode和KFbxLayerElement::EReferenceMode。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MappingMode定义了当前类型的元素如何映射到mesh上。举例来说，对于KFbxLayerElementNormal，eBY_POLYGON_VERTEX表示如果一个顶点被n个多边形共享，那么这个顶点就有n条法线与之相对应；eBY_CONTROL_POINT则表示每个顶点无论被几个多边形共享，都只有一条normal；eBY_POLYGON则表示构成多边形的n个顶点只对应着一条normal。某些MappingMode只对特定的KFbxLayerElement有效，请详细参考文档。通常对于有hard edge的模型来说，MappingMode只能是eBY_POLYGON_VERTEX，而平滑模型则可以是eBY_CONTROL_POINT。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ReferenceMode定义了如何访问相关的数据。同样举例来说，每个KFbxLayerElement内部通常可能包含两个数组，分别称为DirectArray和IndexArray。如果reference mode为eDIRECT，则第i个控点相对的element元素就在DirectArray的第i位置(第i个控点的normal在KFbxLayerElementNormal.DirectArray[i]中) ，此时IndexArray为空。eINDEX_TO_DIRECT通常和eBY_POLYGON_VERTEX一起使用，因为一个控点可能对应多个值，所以这时必须用多边形顶点索引（也就是GetPolygonVertexCount()返回的值）来获得某个多边形顶点所对应的值： KfbxLayerElement.DirectArray[ IndexArray[vertexIndex]]。下面代码演示了如何遍历所有layer，获得每个顶点/控点对应的法线:&lt;/span&gt;&lt;span style="color: #000080"&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('2fd3d845-8def-4733-a320-e834b9c84dca')"&gt;&lt;img style="display: none" id="code_img_opened_2fd3d845-8def-4733-a320-e834b9c84dca" class="code_img_opened" onclick="cnblogs_code_hide('2fd3d845-8def-4733-a320-e834b9c84dca',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"&gt; &lt;div id="cnblogs_code_open_2fd3d845-8def-4733-a320-e834b9c84dca" class="cnblogs_code_hide"&gt;&lt;div&gt;&lt;!--&lt;br/&gt;&lt;br/&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/&gt;http://www.CodeHighlighter.com/&lt;br/&gt;&lt;br/&gt;--&gt;&lt;span style="color: #000000"&gt;KFbxLayerElementNormal&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;leNormal&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;pMesh&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetLayer(&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetNormals();&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(leNormal)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;switch&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(leNormal&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetMappingMode())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxLayerElement::eBY_CONTROL_POINT:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;switch&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(leNormal&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetReferenceMode())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxLayerElement::eDIRECT:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;KFbxVector4&amp;nbsp;normal&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;leNormal&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetDirectArray().GetAt(lControlPointIndex));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxLayerElement::eINDEX_TO_DIRECT:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;id&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;leNormal&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetIndexArray().GetAt(lControlPointIndex);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;KFbxVector4&amp;nbsp;normal&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;leNormal&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetDirectArray().GetAt(id));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;default&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;other&amp;nbsp;reference&amp;nbsp;modes&amp;nbsp;not&amp;nbsp;shown&amp;nbsp;here!&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxLayerElement::eBY_POLYGON_VERTEX:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;polygonID&amp;nbsp;=&amp;nbsp;triange&amp;nbsp;1,2,3.....n&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;positionId&amp;nbsp;=&amp;nbsp;1,2,3&amp;nbsp;for&amp;nbsp;triange&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//vertex!!!!&amp;nbsp; &lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;vertexIndex&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;pMesh&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetPolygonVertex(polygonID,positionId);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;switch&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(leNormal&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetReferenceMode())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxLayerElement::eDIRECT:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxLayerElement::eINDEX_TO_DIRECT:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Display2DVector(header,&amp;nbsp;leUV&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetDirectArray().GetAt(vertexIndex))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;default&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;other&amp;nbsp;reference&amp;nbsp;modes&amp;nbsp;not&amp;nbsp;shown&amp;nbsp;here!&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 为了避免混淆，再强调一下控点和顶点的区别。首先，控点只包含位置信息，顶点则包含了位置，法线，纹理坐标等信息。如果mesh中所有layer中的所有元素MappingMode都是eBY_CONTROL_POINT，则控点数量和顶点一一对应。如果是eBY_POLYGON_VERTEX，则有可能需要分裂控点。比如一个控点被n个多边形共享，则对应着n条法线，需要分裂成n个顶点，但是，控点所对应的n条法线中有些可能是相同的（none hard edge）------所以eBY_POLYGON_VERTEX通常和eINDEX_TO_DIRECT配合使用----- 因此最终分裂出来的顶点数有可能小于n。Tangent，bionormal，vertex color的访问与此类似，而且一般来说，只需要读出第一个layer中的数据即可。如何根据不同的normal等信息分裂控点，组合顶点，需要我们自己来实现，这里不详细讨论。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UV的访问方式和上面提到的方法类似，但稍稍有些区别。前面说过，虽然每个mesh都允许多个layer，但通常只会有一组normal，tangent等数据，uv则可能有多组（比如一组uv用于普通贴图，另外一组用于lightmap），并且有可能保存在同一layer中，也有可能分别保存在多个layer中。但是fbx文件中有一个奇怪的问题，很多模型虽然只有一组UV，但会被识别出多组UV出现在不同layer中，并且不是每个layer中存在的数据都相同或者有效！！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/clayman/fbx_uv_mat.jpg" width="802" height="471" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 上图中，第一个文件是正确的，2组UV分别在两个layer中；下面的文件则多出了2层只含UV的layer，注意多余的uv名称都是map1.&amp;nbsp;FBX论坛上好像有人也遇到了同样的问题，不过都没有官方的解释，文档中也没有讨论。解决方法是我们可以通过检查每组UV的名称来确定某组UV是否是重复：&lt;/span&gt;&lt;span style="color: #000080"&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('f30b2375-b213-4e05-8619-62297980c35d')"&gt;&lt;img style="display: none" id="code_img_opened_f30b2375-b213-4e05-8619-62297980c35d" class="code_img_opened" onclick="cnblogs_code_hide('f30b2375-b213-4e05-8619-62297980c35d',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"&gt; &lt;div id="cnblogs_code_open_f30b2375-b213-4e05-8619-62297980c35d" class="cnblogs_code_hide"&gt;&lt;div&gt;&lt;!--&lt;br/&gt;&lt;br/&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/&gt;http://www.CodeHighlighter.com/&lt;br/&gt;&lt;br/&gt;--&gt;&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;layer&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;uvSetCount&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;layer&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetUVSetCount();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(uvSetCount&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;iterate&amp;nbsp;all&amp;nbsp;uv&amp;nbsp;channel&amp;nbsp;indexed&amp;nbsp;by&amp;nbsp;element_texture_type&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;textureIndex&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxLayerElement::eDIFFUSE_TEXTURES;textureIndex&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;KFbxLayerElement::eLAST_ELEMENT_TYPE;textureIndex&lt;/span&gt;&lt;span style="color: #000000"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; KFbxLayerElement&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;uvElement&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;layer&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetUVs(KFbxLayerElement::ELayerElementType(textureIndex));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;!&lt;/span&gt;&lt;span style="color: #000000"&gt;uvElement)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;continue&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uvSetsName&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;uvElement&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetName();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;!&lt;/span&gt;&lt;span style="color: #000000"&gt;CheckUVSetsNameExists(uvSetsName))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;process&amp;nbsp;uv&amp;nbsp;data&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="color: #000000"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetUVs (KFbxLayerElement::ELayerElementType type) 返回对应type类型的UV，不存在则返回NULL。这里的type是KFbxLayerElement::ELayerElementType枚举中eDIFFUSE_TEXTURES 到eDISPLACEMENT_TEXTURES 之间的值。可以把这个枚举理解为UV的通道标识符，比如GetUVs(eDIFFUSE_TEXTURES)返回diffuse texture通道的纹理，注意，这里eDIFFUSE_TEXTURES并不指这组UV只能用于diffuse map，而只是一个标识符！对于只有一组uv的模型来说，纹理数据通常都在这个通道中。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我们已经基本解析出模型中的几何信息。接下来看如何获得材质，特别是纹理信息。与前面的元素不同，material不保存在layer中，而是保存在node里，一个node可以包含多个材质。SDK文档中关于材质，纹理之间关系的介绍非常让人迷惑，有些接口也很常奇怪。虽然Layer中有一个名为GetMaterials()的方法，但其返回的KFbxLayerElementMaterial对象中GetDirectArray()只会返回空值，也就是说无法通过它获得真正表示材质的KFbxSurfaceMaterial对象。下面的代码展示了如何取得材质，以及相应的数值类参数。&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('349d20a4-02e6-417d-b202-a45179a6b09b')"&gt;&lt;img style="display: none" id="code_img_closed_349d20a4-02e6-417d-b202-a45179a6b09b" class="code_img_closed" alt="" src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" /&gt;&lt;img id="code_img_opened_349d20a4-02e6-417d-b202-a45179a6b09b" class="code_img_opened" onclick="cnblogs_code_hide('349d20a4-02e6-417d-b202-a45179a6b09b',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"&gt; &lt;div id="cnblogs_code_open_349d20a4-02e6-417d-b202-a45179a6b09b"&gt;&lt;div&gt;&lt;!--&lt;br/&gt;&lt;br/&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/&gt;http://www.CodeHighlighter.com/&lt;br/&gt;&lt;br/&gt;--&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;lIndex&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;lIndex&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;lNode&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetMaterialCount()&amp;nbsp;lIndex&lt;/span&gt;&lt;span style="color: #000000"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;KFbxSurfaceMaterial&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;lMaterial&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;lNode&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetMaterial(lIndex)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;convert&amp;nbsp;to&amp;nbsp;proper&amp;nbsp;sub&amp;nbsp;type&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(lMaterial&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetClassId().Is(KFbxSurfaceLambert::ClassId)&amp;nbsp;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;((KFbxSurfaceLambert&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;)lMaterial)&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetAmbientColor()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;((KFbxSurfaceLambert&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;)lMaterial)&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetDiffuseColor()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(lMaterial&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetClassId().Is(KFbxSurfacePhong::ClassId))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;((KFbxSurfacePhong&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;)&amp;nbsp;lMaterial)&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetAmbientColor()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;((KFbxSurfacePhong&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;)&amp;nbsp;lMaterial)&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetDiffuseColor()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 逻辑上来说，KFbxSurfaceMaterial其实是个抽象类，需要把它转换为合适的两个子类，才能得到实际材质参数。纹理则要更特别一些（注意，虽然layer中也有GetTextures()，但我测试的时候总返回空值）。一个材质会包含多个纹理通道，每个通道同样以KFbxLayerElement::ELayerElementType中关于纹理的枚举作为标识符，每个通道可以包含多个KFbxTexture或者KFbxLayeredTexture，其中，KFbxTexture就对应着一张纹理，而KFbxLayeredTexture则又包含了多个KFbxTexture对象，类似如下结构：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;KFbxSurfaceMaterial : contains one or more textureProperty, identified by KFbxLayerElement::ELayerElementType&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;textureProperty : contains one or more texture/layerTexture;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;layerTexture: contains more than one texture&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 下面的代码展示了如何获得纹理信息。&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('772633f2-8a55-4117-928a-67f7719b78c8')"&gt;&lt;img style="display: none" id="code_img_opened_772633f2-8a55-4117-928a-67f7719b78c8" class="code_img_opened" onclick="cnblogs_code_hide('772633f2-8a55-4117-928a-67f7719b78c8',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"&gt; &lt;div id="cnblogs_code_open_772633f2-8a55-4117-928a-67f7719b78c8" class="cnblogs_code_hide"&gt;&lt;div&gt;&lt;!--&lt;br/&gt;&lt;br/&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/&gt;http://www.CodeHighlighter.com/&lt;br/&gt;&lt;br/&gt;--&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;FbxImporter::ParseMaterial(KFbxNode&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;fbxNode,HamsterEngine::Node&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;node)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;iterate&amp;nbsp;all&amp;nbsp;material&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;i&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;;i&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;fbxNode&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetMaterialCount();i&lt;/span&gt;&lt;span style="color: #000000"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;KFbxSurfaceMaterial&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;mat&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;fbxNode&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetMaterial(i);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(mat)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;iterate&amp;nbsp;all&amp;nbsp;texture&amp;nbsp;channel&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;textureIndex&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;;textureIndex&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxLayerElement::LAYERELEMENT_TYPE_TEXTURE_COUNT;textureIndex&lt;/span&gt;&lt;span style="color: #000000"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;get&amp;nbsp;current&amp;nbsp;texture&amp;nbsp;channel&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;KFbxProperty&amp;nbsp;property&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;mat&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;FindProperty(KFbxLayerElement::TEXTURE_CHANNEL_NAMES[textureIndex]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;has&amp;nbsp;channel?&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(property.IsValid())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;layered&amp;nbsp;texture?&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(layerCount&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;property.GetSrcObjectCount(KFbxLayeredTexture::ClassId);)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;iterate&amp;nbsp;all&amp;nbsp;layered&amp;nbsp;texture&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;layerId&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;;layerId&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;layerCount;layerId&lt;/span&gt;&lt;span style="color: #000000"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;KFbxLayeredTexture&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;layeredTex&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxCast&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;KFbxLayeredTexture&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;(property.GetSrcObject(KFbxLayeredTexture::ClassId,layerId));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;numTex&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;layeredTex&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetSrcObjectCount(KFbxTexture::ClassId);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;iterate&amp;nbsp;all&amp;nbsp;texture&amp;nbsp;in&amp;nbsp;this&amp;nbsp;layer&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;texId&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;;texId&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;numTex;texId&lt;/span&gt;&lt;span style="color: #000000"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;KFbxTexture&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;tex&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxCast&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;KFbxTexture&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;(layeredTex&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetSrcObject(KFbxTexture::ClassId,texId));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(tex)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cout&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Texture&amp;nbsp;&amp;nbsp;name:&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;tex&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetName()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fileName:&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;tex&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetFileName()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;uvSet:&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;tex&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;UVSet.Get();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;numTextures&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;property.GetSrcObjectCount(KFbxTexture::ClassId);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;/iterate&amp;nbsp;all&amp;nbsp;simple&amp;nbsp;texture&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;texId&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;;texId&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;numTextures;texId&lt;/span&gt;&lt;span style="color: #000000"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;KFbxTexture&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;tex&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxCast&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;KFbxTexture&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;(property.GetSrcObject(KFbxTexture::ClassId,texId));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(tex)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cout&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Texture&amp;nbsp;&amp;nbsp;name:&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;tex&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetName()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fileName:&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;tex&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetFileName()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;uvSet:&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;tex&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;UVSet.Get();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; KFbxTexture.UVSet.Get()返回当前纹理所绑定的UVSet名称，可以由此获得纹理和UV的绑定关系。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 之前所说的KFbxLayerElementMaterial并不是完全没用，还必须用它获得mapping mode，对材质来说，最常见的两个值是：eALL_SAME和eBY_POLYGON，前者表示整个mesh的材质都相同，没太多可说的；后者表示材质只应用到mesh中的部分多边形，这就比较麻烦了，上图中第二个文件就是这种情况。不同材质意味着纹理或者shader改变，我们必须把eBY_POLYGON的mesh根据材质划分为不同子mesh才能导入到DirectX程序中。幸运的是sdk提供了这样的函数，让我们不用自己计算：&lt;/span&gt;&lt;span style="color: #000080"&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;!--&lt;br/&gt;&lt;br/&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/&gt;http://www.CodeHighlighter.com/&lt;br/&gt;&lt;br/&gt;--&gt;&lt;span style="color: #000000"&gt;KFbxGeometryConverter&amp;nbsp;lConverter(pSdkManager)&lt;br /&gt;lConverter.SplitMeshPerMaterial(lMesh)&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;注意：&lt;/p&gt;&lt;p&gt;before and after the call to SplitMeshPerMaterial, you should see a difference in the number: there will be the old mesh, plus one new mesh (node attribute) for each material. &lt;/p&gt;&lt;p&gt;It will work only on mesh that have material mapped &amp;#8220;per-face&amp;#8221; (Mapping Mode is KFbxLayerElement::eBY_POLYGON). It does NOT work on meshes with material mapped per-vertex/per-edge/etc.It will create as many meshes on output that there are materials applied to it.If one mesh have some polygons with material A, some polygons with material B,and some polygons with NO material, it should create 3 meshes after calling this function.The newly created meshes should be attached to the same KFbxNode that hold the original KFbxMesh.The original KFbxMesh STAY UNCHANGED.Now, the new mesh will have Normals, UVs, vertex color, material and textures. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 以上介绍了模型导入时从fbx文件中提取，常见数据的方法，也还有很多方面没有讨论，比如skin info和animation。对skin来说，相应的权重等信息保存在KfbxDeformer对象中，可以通过KFbxNode获得。至于动画目前我暂时还没有时间研究，如果有好心人实现了，不妨也写篇教程顺便告诉我一声:）。另外最先说过，fbx是一种可扩展的格式，可以通过UserProperties属性添加很多自定义属性，&lt;a href="http://blogs.msdn.com/b/etayrien/archive/2007/03/22/opaque-data-from-max-and-maya.aspx"&gt;&lt;span style="color: #ff9900"&gt;这里&lt;/span&gt;&lt;/a&gt;介绍了如何在maya和max中添加自定义属性，SDK中的UserProperties sample则介绍了如何取得这些属性。文章中所涉及的函数只介绍了基本用法，详细信息请参考文档。另外文档中虽然没有太多示例代码，但sdk中附带的ImportScene Sample是一个非常好的例子，展示了解析fbx文件的方方面面，值得仔细研究。&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;img src="http://www.cnblogs.com/clayman/aggbug/1902782.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/clayman/archive/2010/12/11/1902782.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/clayman/archive/2010/12/10/1901779.html</id><title type="text">Working with FBX SDK (1)</title><summary type="text">FBX SDK开发入门，从fbx文件中解析模型数据.......</summary><published>2010-12-09T22:40:00Z</published><updated>2010-12-09T22:40:00Z</updated><author><name>clayman</name><uri>http://www.cnblogs.com/clayman/</uri></author><link rel="alternate" href="http://www.cnblogs.com/clayman/archive/2010/12/10/1901779.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/clayman/archive/2010/12/10/1901779.html"/><content type="html">&lt;p align="center"&gt;&lt;span style="color: #0000ff; font-size: 18pt"&gt;&lt;strong&gt;Working with FBX SDK (1)&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: red"&gt;仅供个人学习使用，请勿转载，勿用于任何商业用途&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: red"&gt;作者：clayman&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #000080"&gt;模型导入是所有3D程序最基本的功能，但常常也是让很多新手最头疼的问题之一。DirectX虽然提供了直接加载.x文件的功能，不幸的是多年以来，很少有主流建模软件提供了对它的直接支持，各种各样的格式转换程序之间又多多少有些小bug存在，加上近年来ms也逐渐不再使用.x文件，因此，为了将来程序开发更加灵活方便，任何稍有规模的程序都必须重新发明轮子，自己实现模型导入。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 当选择支持什么类型的模型文件时，最重要的因素就是交换性----即这种格式是否能被大多数三维软件支持，是否能方便的和其他格式转换；有良好定义以及可扩展性。在各种模型文件中，目前最能满足这三个条件的就是fbx和Collada，本文主要讨论前者。需要说明的是，无论选择什么格式，这些格式都不应该是图形引擎直接读取的格式。虽然我们也可以这么做，但无论fbx，collada或者其他很多格式都是以数据交换为目的而设计的，比如collada本质就是xml文件，因此不适合游戏引擎这类对性能有较高要求的程序。理想的解决方案是把这些格式作为数据来源，通过预处理转换为为特定引擎设计的格式，最后引擎直接读取特有的自定义格式。如果熟悉XNA的话，XNA中的content pipeline就是完成了这样的工作，把模型，纹理转换为特殊设计的xnb格式，加速运行时的读取速度。引擎只需要有读取一种文件的能力即可，而另外有一些列的importer/converter可以把其他格式的文件在预处理阶段，转换为引擎可识别的格式。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 如何设计适合自己引擎的文件格式超了本文讨论范围，不过这里举一个小小的例子，说明自定义格式的必要性。以fbx文件为例，假设用记事本打开一个只包含一个mesh模型文件，可以看到数据大概是按以下方式组织的：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;vertex &amp;nbsp;{ position data&amp;#8230;..}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;normal&amp;nbsp; {normal data&amp;#8230;&amp;#8230;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;UV &amp;nbsp;{UV data&amp;#8230;&amp;#8230;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 引擎如果直接读取这样的文件，需要在运行时把数据重新解析组织为硬件可以直接使用的格式:从不同位置抽出position，normal，uv数据合成顶点，再把顶点组织为数组，最后放入vertex buffer中。而如果自定义文件话，可以直接就把数据以vertex array的格式保存，比如：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;vertexData{ (pos,nol,uv),(pos,nol,uv),&amp;#8230;&amp;#8230;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;这样在读取文件之后，可以直接把数据放入vertex buffer，效率自然是前者不可比的。当然，实际的文件不仅包含顶点数据，还会有很多其他内容。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 说了那么多，现在回到正题。本文不会，也不可能详细讨论解析fbx的所有数据，只重点讨论如果解析出游戏引擎最常用到的信息：如何访问mesh，读取相应的顶点，材质以及模型结构（Hierarchy）信息。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 先介绍一点关于fbx的基本知识，fbx是Autodesk开发的文件格式，其开发目的就是为了实现Autodesk旗下软件之间的数据交换。鉴于Autodesk已经把主流建模软件公司买的差不多了（maya，3ds max，softimage，motionbuilder&amp;#8230;..），几乎所有主流三维建模软件都能导出\导入fbx文件，Autodesk也提供了的专门的软件fbx convert可以把其他流行格式（包括collada）转换为fbx文件。Fbx文件格式本身是不公开的，而是通过FBX SDK实现对fbx文件的读取以及写入，这也是我选择fbx的一个重要原因，作为开发者可以不必关心实际的数据储存细节（用记事本打开ascii码的fbx文件，还是能大概了解实际的数据格式），把文件看做一个数据源对象，通过特定函数就能访问数据源中的特定数据。而稍后我们就会看到，fbx sdk设计的也非常易用。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我们要做的第一步就是从&lt;a href="http://usa.autodesk.com/adsk/servlet/index?siteID=123112&amp;amp;id=7478532"&gt;&lt;span style="color: #ff6600"&gt;autodesk网站&lt;/span&gt;&lt;/a&gt;下载FBX SDK（需要先填写一个简单的表格才能下载，嗯嗯，可以乱填)，最新版本是2011.3，windows下的安装包大约有450m。安装之后，需要在工程里进行一些简单的设置才能使用。对于visual Studio来说，请**仔细**按照文档Downloading and installing部分的介绍进行配置，除17以外，其他都是必须的，特别注意在16步时，选择正确的lib文件。特别提醒，虽然2011.3包含了的vs2010下的lib，但是有重大bug，会在导入某些fbx文件时，出现&amp;#8221; debug assertion failed&amp;#8221;错误(坑爹啊，浪费了我两天)，推荐在vs2005/2008下开发。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 接下来，就可以动手写代码了。使用fbx sdk时，最先遇到的两个对象就是KFbxSdkManage和KFbxScene。Fbx sdk中大部分类的命名都以KFbx开头（为什么是k呢&amp;#8230;.？）。KFbxSdkManage是sdk中的中心类，负责了整个sdk内部状态的管理，很多其他对象创建也依赖于KFbxSdkManage，程序中只需要有一个KFbxSdkManage类的实例即可。KFbxScene如其名所示，代表了一个场景，而这里的场景就是fbx文件中包含的所有信息，fbx文件导入以后，在程序中就是一个KFbxScene对象。可以用以下代码完成这两个对象的创建。&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('14d85162-b48f-44cb-94db-7e90788f41d8')"&gt;&lt;img style="display: none" id="code_img_closed_14d85162-b48f-44cb-94db-7e90788f41d8" class="code_img_closed" alt="" src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" /&gt;&lt;img id="code_img_opened_14d85162-b48f-44cb-94db-7e90788f41d8" class="code_img_opened" onclick="cnblogs_code_hide('14d85162-b48f-44cb-94db-7e90788f41d8',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"&gt; &lt;div id="cnblogs_code_open_14d85162-b48f-44cb-94db-7e90788f41d8"&gt;&lt;div&gt;&lt;!--&lt;br/&gt;&lt;br/&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/&gt;http://www.CodeHighlighter.com/&lt;br/&gt;&lt;br/&gt;--&gt;&lt;span style="color: #000000"&gt;init&amp;nbsp;sdk&amp;nbsp;&lt;br /&gt;KFbxScene&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;scene;&lt;br /&gt;KFbxSdkManager&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;sdkManager;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;FbxImporter::Init()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sdkManager&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxSdkManager::Create();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;KFbxIOSettings&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ios&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxIOSettings::Create(sdkManager,IOSROOT);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sdkManager&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;SetIOSettings(ios);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;scene&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxScene::Create(sdkManager,&lt;/span&gt;&lt;span style="color: #800000"&gt;""&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 注意，示例代码省略了必要的错误检查。上面代码中出现了KFbxIOSettings类，这是一个用来配置KFbxSdkManage的对象，可以通过这个对象设置一些导入导出时的行为，比如可以选择不导入材质，动画等等。有了这两个对象之后，下一步就可以导入fbx文件了，这需要用到KFbxImporter对象，他会自动解析fbx文件中的数据，并保存到KFbxScene对象中。实际上除fbx以外KFbxImporter还能导入一些其他格式的文件。实例代码如下：&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('67f4b337-da30-418c-9e6f-5997ed84ef98')"&gt;&lt;img style="display: none" id="code_img_closed_67f4b337-da30-418c-9e6f-5997ed84ef98" class="code_img_closed" alt="" src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" /&gt;&lt;img id="code_img_opened_67f4b337-da30-418c-9e6f-5997ed84ef98" class="code_img_opened" onclick="cnblogs_code_hide('67f4b337-da30-418c-9e6f-5997ed84ef98',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"&gt; &lt;div id="cnblogs_code_open_67f4b337-da30-418c-9e6f-5997ed84ef98"&gt;&lt;div&gt;&lt;!--&lt;br/&gt;&lt;br/&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/&gt;http://www.CodeHighlighter.com/&lt;br/&gt;&lt;br/&gt;--&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;FbxImporter::LoadScene(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;const&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;char&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;fileName)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;KFbxImporter&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;sceneImporter&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxImporter::Create(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;sdkManager,&lt;/span&gt;&lt;span style="color: #800000"&gt;""&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sceneImporter&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Initialize(fileName,&lt;/span&gt;&lt;span style="color: #000000"&gt;-&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;sdkManager&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetIOSettings());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sceneImporter&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Import(scene);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sceneImporter&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Destroy();&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 文件加载之后，接下来就是用相应的方法，找出我们需要的数据。这里要稍微补充一点fbx组织数据的方式。前面说过，当用sdk来处理fbx文件时，它更像是一个数据源或者说一个对象，所以你应该以对象的方式来看待fbx，而不是文件的角度。如果你对scene graph/tree有所了解的话，fbx其实就是一个scene graph/tree！KFbxScene是根节点，包含了一系列子节点KFbxNode，每个KFbxNode又有其自己的子节点。KFbxNode包含了坐标变换信息，可以通过一系列get函数取得，其他数据作为KFbxNodeAttribute对象，包含在KFbxNode内部，这里的其他数据是指mesh，Nurbs，skeletion，camara，light等定义在KFbxNodeAttribute：：EAttributeType中的类型。一个KFbxNode可以有多个子KFbxNode，&lt;strike&gt;但只能有一个KFbxNodeAttribute对象&lt;/strike&gt;，可以通过KFbxNodeAttribute的GetAttributeType()方法，确定当前node的所包含的实际数据类型:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&lt;/span&gt;&lt;span style="color: #000080"&gt;更正：又仔细看了文档，KFbxNode可以有多个KFbxNodeAttribute对象，GetNodeAttribute()返回默认的attribute对象。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('9dc6576d-52af-427d-a3d6-ec3618b9dd53')"&gt;&lt;img style="display: none" id="code_img_opened_9dc6576d-52af-427d-a3d6-ec3618b9dd53" class="code_img_opened" onclick="cnblogs_code_hide('9dc6576d-52af-427d-a3d6-ec3618b9dd53',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"&gt; &lt;div id="cnblogs_code_open_9dc6576d-52af-427d-a3d6-ec3618b9dd53" class="cnblogs_code_hide"&gt;&lt;div&gt;&lt;!--&lt;br/&gt;&lt;br/&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/&gt;http://www.CodeHighlighter.com/&lt;br/&gt;&lt;br/&gt;--&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;FbxImporter::WalkHierarchy()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;KFbxNode&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;root&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;scene&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetRootNode();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;i&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;;i&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;root&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetChildCount();i&lt;/span&gt;&lt;span style="color: #000000"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WalkHierarchy(root&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetChild(i),&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;root));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;FbxImporter::WalkHierarchy(KFbxNode&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;fbxNode,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;depth)&lt;br /&gt;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;KFbxNodeAttribute&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;nodeAtt&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;fbxNode&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetNodeAttribute();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(nodeAtt&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;==&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;NULL)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ss&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Name:&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;fbxNode&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetName()&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;nbsp;&amp;nbsp;NodeType:&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;None&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;switch&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(nodeAtt&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetAttributeType())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxNodeAttribute::eMARKER:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxNodeAttribute::eSKELETON:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxNodeAttribute::eMESH:&amp;nbsp;&amp;nbsp;&amp;nbsp;ProcessMesh(nodeAtt)&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxNodeAttribute::eCAMERA:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxNodeAttribute::eLIGHT:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxNodeAttribute::eBOUNDARY:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxNodeAttribute::eOPTICAL_MARKER:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxNodeAttribute::eOPTICAL_REFERENCE:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxNodeAttribute::eCAMERA_SWITCHER:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxNodeAttribute::eNULL:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxNodeAttribute::ePATCH:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxNodeAttribute::eNURB:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxNodeAttribute::eNURBS_SURFACE:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxNodeAttribute::eNURBS_CURVE:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxNodeAttribute::eTRIM_NURBS_SURFACE:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxNodeAttribute::eUNIDENTIFIED:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;process&amp;nbsp;children&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;i&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;;i&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;fbxNode&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetChildCount();i&lt;/span&gt;&lt;span style="color: #000000"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WalkHierarchy(fbxNode&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetChild(i),depth&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 说到这里，我们已经解决了第一个问题：获得场景结构信息。所有KFbxNode构成的树就是场景结构。而其中KFbxNodeAttribute为skeletion的节点组成的树，可能就是某个模型的骨骼。下图是解析两个不同文件得到的节点关系：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/clayman/fbxNodes.jpg" width="845" height="425" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 根据模型师建模习惯的不同，导出节点顺序是不一样的，比如上面的文件把骨骼单独作为一个树，下面的文件则用了一种混排的方式，一个node下同时有子骨骼节点和mesh节点。&amp;nbsp; 接下来，看如何读出顶点信息，注意下面仅以mesh为例，介绍一些常见操作。首先，用以下代码获得一个node中所包含的mesh数据：&lt;/span&gt;&lt;span style="color: #000080"&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('86b14d14-a6de-4c6e-83de-cfa47d7d97c7')"&gt;&lt;img style="display: none" id="code_img_closed_86b14d14-a6de-4c6e-83de-cfa47d7d97c7" class="code_img_closed" alt="" src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" /&gt;&lt;img id="code_img_opened_86b14d14-a6de-4c6e-83de-cfa47d7d97c7" class="code_img_opened" onclick="cnblogs_code_hide('86b14d14-a6de-4c6e-83de-cfa47d7d97c7',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"&gt; &lt;div id="cnblogs_code_open_86b14d14-a6de-4c6e-83de-cfa47d7d97c7"&gt;&lt;div&gt;&lt;!--&lt;br/&gt;&lt;br/&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/&gt;http://www.CodeHighlighter.com/&lt;br/&gt;&lt;br/&gt;--&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ProcessMesh(KFbxNodeAttribute&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;nodeAtt)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(nodeAtt&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetAttributeType()&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;==&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;KFbxNodeAttribute::eMESH)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;KFbxMesh&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;mesh&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;dynamic_cast&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;KFbxMesh&lt;/span&gt;&lt;span style="color: #000000"&gt;*&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;(nodeAtt);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;!&lt;/span&gt;&lt;span style="color: #000000"&gt;mesh&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;IsTriangleMesh())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;KFbxGeometryConverter&amp;nbsp;converter(sdkManager);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;#1&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;converter.TriangulateInPlace(fbxNode);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mesh&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;dynamic_cast&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;KFbxMesh&lt;/span&gt;&lt;span style="color: #000000"&gt;*&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;(fbxNode&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetNodeAttribute());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;#2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;mesh&amp;nbsp;=&amp;nbsp;converter.TriangulateMesh(mesh);&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cout&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#8220;TriangleCount:&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;nbsp;&amp;lt;&amp;lt;mesh-&amp;gt;GetPolygonCount()&lt;/span&gt;&lt;span style="color: #800000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;nbsp;&amp;nbsp;VertexCount:&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;mesh&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetControlPointsCount()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;nbsp;&amp;nbsp;IndexCount:&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;mesh&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetPolygonVertexCount()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Layer:&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;mesh&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetLayerCount()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;nbsp;&amp;nbsp;DeformerCount:&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;mesh&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetDeformerCount(KFbxDeformer::eSKIN)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;nbsp;&amp;nbsp;MaterialCount:&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;fbxNode&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetMaterialCount();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Fbx文件中包含的mesh不一定是由三角形组成，还可能是四边形，五边形等等，因此，要做的第一步，就是三角化mesh，可以用以上两种方法实现。TriangulateMesh和TriangulateInPlace区别在于前者返回一个三角化之后的新mesh，后者则是对当前数据进行三角化。注意TriangulateInPlace之后需要重新获取mesh指针，否则代码会出错。Mesh类的大部分成员函数用途都一目了然，只是有一些概念需要注意：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;1． GetPolygonCount() 返回三角形数量；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;2． GetControlPointsCount() 返回控点数量，这里控点的概念和DirectX中常说的顶点非常类似，但不完全一样，更像是只包含了position的顶点。也就是说如果这个顶点被n个多边形共享（比如立方体八个角的点），而在每个多边形上又有不同的纹理坐标或者法线，那么稍后将分裂或者说生成n个包含position，normal，uvs等信息的顶点；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;3． GetControlPoints () 返回控点数组指针；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;4． GetPolygonVertexCount() 这是个迷惑人的名字，这个函数返回的其实是大家熟悉的vertex index count，对triange list来说，其实就是GetPolygonCount() * 3；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;5． GetPolygonVertices() 返回索引数组指针；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 下面的代码演示了如何把从fbx文件中读取的顶点，索引数据保存到一个非常简单的文件中：&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('fb42a5a1-7af9-4f0f-a681-284ca02b4b44')"&gt;&lt;img style="display: none" id="code_img_opened_fb42a5a1-7af9-4f0f-a681-284ca02b4b44" class="code_img_opened" onclick="cnblogs_code_hide('fb42a5a1-7af9-4f0f-a681-284ca02b4b44',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"&gt; &lt;div id="cnblogs_code_open_fb42a5a1-7af9-4f0f-a681-284ca02b4b44" class="cnblogs_code_hide"&gt;&lt;div&gt;&lt;!--&lt;br/&gt;&lt;br/&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/&gt;http://www.CodeHighlighter.com/&lt;br/&gt;&lt;br/&gt;--&gt;&lt;span style="color: #000000"&gt;save&amp;nbsp;data&amp;nbsp;&lt;br /&gt;save&amp;nbsp;model&lt;br /&gt;vertex&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;mesh&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;GetControlPoints();&lt;br /&gt;vertexCount&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;mesh&lt;/span&gt;&lt;span style="color: #000000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;GetControlPointsCount();&lt;br /&gt;..........&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;SaveData(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;const&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;char&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;fileName,KFbxVector4&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;vertex,&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;vertexCount,&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;indices,&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;indicesCount)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;convert&amp;nbsp;kfbxvector4[]&amp;nbsp;to&amp;nbsp;float[],notice&amp;nbsp;we&amp;nbsp;only&amp;nbsp;use&amp;nbsp;the&amp;nbsp;first&amp;nbsp;3&amp;nbsp;element(x,y,z)&amp;nbsp;of&amp;nbsp;a&amp;nbsp;&amp;nbsp;kfbxvector4&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;float&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;verts&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;float&lt;/span&gt;&lt;span style="color: #000000"&gt;[vertexCount&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #800080"&gt;3&lt;/span&gt;&lt;span style="color: #000000"&gt;];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;float&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;pV&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;verts;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;i&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;;i&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;vertexCount;i&lt;/span&gt;&lt;span style="color: #000000"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;pV&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;static_cast&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;float&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;(vertex[i][&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pV&lt;/span&gt;&lt;span style="color: #000000"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;pV&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;static_cast&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;float&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;(vertex[i][&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pV&lt;/span&gt;&lt;span style="color: #000000"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;pV&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;static_cast&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;float&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;(vertex[i][&lt;/span&gt;&lt;span style="color: #800080"&gt;2&lt;/span&gt;&lt;span style="color: #000000"&gt;]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pV&lt;/span&gt;&lt;span style="color: #000000"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;create&amp;nbsp;file&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::ofstream&amp;nbsp;fs(fileName,std::ios_base::&lt;/span&gt;&lt;span style="color: #0000ff"&gt;out&lt;/span&gt;&lt;span style="color: #000000"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;std::ios_base::binary);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;write&amp;nbsp;geometryInfo:&amp;nbsp;vertex&amp;nbsp;and&amp;nbsp;index&amp;nbsp;count;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;geometryInfo[&lt;/span&gt;&lt;span style="color: #800080"&gt;2&lt;/span&gt;&lt;span style="color: #000000"&gt;]&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;{vertexCount,indicesCount};&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fs.write(reinterpret_cast&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;const&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;char&lt;/span&gt;&lt;span style="color: #000000"&gt;*&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;(geometryInfo),&lt;/span&gt;&lt;span style="color: #0000ff"&gt;sizeof&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #800080"&gt;2&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;write&amp;nbsp;vertex&amp;nbsp;data&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fs.write(reinterpret_cast&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;const&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;char&lt;/span&gt;&lt;span style="color: #000000"&gt;*&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;(verts),&lt;/span&gt;&lt;span style="color: #0000ff"&gt;sizeof&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;float&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;vertexCount&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #800080"&gt;3&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;short&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;sIndices&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;convert&amp;nbsp;to&amp;nbsp;16&amp;nbsp;bit&amp;nbsp;index&amp;nbsp;if&amp;nbsp;possible&amp;nbsp;to&amp;nbsp;save&amp;nbsp;memory&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(vertexCount&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;65535&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sIndices&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;short&lt;/span&gt;&lt;span style="color: #000000"&gt;[indicesCount];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;short&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;currentIndex&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;sIndices;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;i&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;;i&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;indicesCount;i&lt;/span&gt;&lt;span style="color: #000000"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;,currentIndex&lt;/span&gt;&lt;span style="color: #000000"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;currentIndex&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;indices[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;write&amp;nbsp;index&amp;nbsp;data&amp;nbsp;to&amp;nbsp;file&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fs.write(reinterpret_cast&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;const&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;char&lt;/span&gt;&lt;span style="color: #000000"&gt;*&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;(sIndices),&lt;/span&gt;&lt;span style="color: #0000ff"&gt;sizeof&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;short&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;indicesCount);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fs.write(reinterpret_cast&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;const&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;char&lt;/span&gt;&lt;span style="color: #000000"&gt;*&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;(indices),&lt;/span&gt;&lt;span style="color: #0000ff"&gt;sizeof&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;indicesCount);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fs.close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;delete[]&amp;nbsp;verts;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;sIndices&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;!=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;NULL)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;delete[]&amp;nbsp;sIndices;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 下面的XNA代码演示了从刚才保存的文件中读出数据并渲染：&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('eb2b5c30-7795-496e-900c-f196ed6cb51e')"&gt;&lt;img style="display: none" id="code_img_opened_eb2b5c30-7795-496e-900c-f196ed6cb51e" class="code_img_opened" onclick="cnblogs_code_hide('eb2b5c30-7795-496e-900c-f196ed6cb51e',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"&gt; &lt;div id="cnblogs_code_open_eb2b5c30-7795-496e-900c-f196ed6cb51e" class="cnblogs_code_hide"&gt;&lt;div&gt;&lt;!--&lt;br/&gt;&lt;br/&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/&gt;http://www.CodeHighlighter.com/&lt;br/&gt;&lt;br/&gt;--&gt;&lt;span style="color: #000000"&gt;read&amp;nbsp;model&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ModelReader&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;vertexCount;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;indexCount;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VertexBuffer&amp;nbsp;mVertexBuffer;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IndexBuffer&amp;nbsp;mIndexBuffer;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;LoadFile(GraphicsDevice&amp;nbsp;graphics,&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;fileName)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;open&amp;nbsp;file&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FileStream&amp;nbsp;fs&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;FileStream(fileName,&amp;nbsp;FileMode.Open);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BinaryReader&amp;nbsp;br&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;BinaryReader(fs);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vertexCount&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;br.ReadInt32();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;indexCount&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;br.ReadInt32();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;read&amp;nbsp;vertex&amp;nbsp;data&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VertexPositionOnly[]&amp;nbsp;verts&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;VertexPositionOnly[vertexCount];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;i&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;i&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;vertexCount;&amp;nbsp;i&lt;/span&gt;&lt;span style="color: #000000"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;verts[i]&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;VertexPositionOnly(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Vector3(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;br.ReadSingle(),&amp;nbsp;br.ReadSingle(),&amp;nbsp;br.ReadSingle()));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;create&amp;nbsp;vertex&amp;nbsp;buffer&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VertexDeclaration&amp;nbsp;vd&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;VertexDeclaration(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;VertexElement(&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;VertexElementFormat.Vector3,VertexElementUsage.Position,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mVertexBuffer&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;VertexBuffer(graphics,&amp;nbsp;vd,&amp;nbsp;vertexCount,&amp;nbsp;BufferUsage.None);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mVertexBuffer.SetData(verts);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;read&amp;nbsp;index&amp;nbsp;data&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;short&lt;/span&gt;&lt;span style="color: #000000"&gt;[]&amp;nbsp;indices&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;short&lt;/span&gt;&lt;span style="color: #000000"&gt;[indexCount];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;i&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;i&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;indexCount;&amp;nbsp;i&lt;/span&gt;&lt;span style="color: #000000"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;indices[i]&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;br.ReadInt16();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;create&amp;nbsp;index&amp;nbsp;buffer&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mIndexBuffer&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;IndexBuffer(graphics,&amp;nbsp;IndexElementSize.SixteenBits,&amp;nbsp;indexCount,&amp;nbsp;BufferUsage.None);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mIndexBuffer.SetData(indices);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HashSet&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;short&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;hash&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;HashSet&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;short&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;br.Close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fs.Close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Draw(GraphicsDevice&amp;nbsp;graphics)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;graphics.SetVertexBuffer(mVertexBuffer);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;graphics.Indices&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;mIndexBuffer;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;graphics.DrawIndexedPrimitives(PrimitiveType.TriangleList,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;vertexCount,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;indexCount&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;3&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 目前我们已经从fbx文件中导出了最基本的信息，下次继续讨论如何获取noraml，uv，material等信息.........&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;img src="http://www.cnblogs.com/clayman/aggbug/1901779.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/clayman/archive/2010/12/10/1901779.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/clayman/archive/2010/12/04/1896024.html</id><title type="text">C++/CLI程序启动时_CrtIsValidHeapPointer(pUserData)错误</title><summary type="text">意想不到的错误，坑死个人啊！！</summary><published>2010-12-03T19:57:00Z</published><updated>2010-12-03T19:57:00Z</updated><author><name>clayman</name><uri>http://www.cnblogs.com/clayman/</uri></author><link rel="alternate" href="http://www.cnblogs.com/clayman/archive/2010/12/04/1896024.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/clayman/archive/2010/12/04/1896024.html"/><content type="html">&lt;p&gt;&lt;span style="color: #000080"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 奇怪的错误，坑死个人啊！！当C++/CLI程序引用了native lib顺利编译之后，程序启动有可能出现以下错误：&lt;/span&gt;&lt;/p&gt;&lt;span style="color: #000080"&gt;&lt;p align="center"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/clayman/cli_native_bug.jpg" width="423" height="250" /&gt;&lt;/p&gt;&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;这是ms的一个已知bug，原因：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;The reason why you get this error is that a winforms application has a managed entry point. The initialization of the native global objects is done by the CRT (C RunTime) startup routine. Since in this case there is no CRT startup routine the MyBoard global object fails to initialize correctly.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;IDE is specific the entry of ManagedApp as "main". However, using "main" will bypass a lot of CRT's startup initialization. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;解决方法：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;右键点击项目---&amp;gt;properties---&amp;gt;link---&amp;gt;advanced&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;把Entry Point从main改为 "?mainCRTStartupStrArray@@$$FYMHP$01AP$AAVString@System@@@Z"&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;原理：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;That should re-enable the CRT startup code which initializes the internal CRT variables.That symbol is really the mangled name for "int __clrcall mainCRTStartupStrArray(cli::array&amp;lt;class System::String ^ &amp;gt;^)".&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;-----------------------------------------------------------------&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;为这问题白白浪费了一晚上，内牛满面啊T_T.............&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/clayman/aggbug/1896024.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/clayman/archive/2010/12/04/1896024.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/clayman/archive/2010/11/02/1867455.html</id><title type="text">Make it Looks more Cinematic</title><summary type="text">优秀的视觉设计师绝对不会只用明暗变化体现场景光照，还必须加上色调变化........</summary><published>2010-11-02T11:06:00Z</published><updated>2010-11-02T11:06:00Z</updated><author><name>clayman</name><uri>http://www.cnblogs.com/clayman/</uri></author><link rel="alternate" href="http://www.cnblogs.com/clayman/archive/2010/11/02/1867455.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/clayman/archive/2010/11/02/1867455.html"/><content type="html">&lt;p align="center"&gt;&lt;strong style="color: #0000ff; font-size: 14pt"&gt;Make it Looks more Cinematic&lt;/strong&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: #ff0000"&gt;作者：clayman&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: #ff0000"&gt;仅供个人学习使用，请勿转载，勿用于任何商业用途。&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;计算机图形设计师和图形程序员最大的区别是什么？前者偏向通过参数调节达到所希望的效果，后者则偏重于通过算法改进增强画面效果。虽然前者有很大局限性，但很多方法对程序员来说也是很有用的，人人都爱那些不用花费太多精力就能显著改变画面效果的小技巧。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;拿游戏论坛里程序员个人&lt;/span&gt;&lt;span style="color: #000080"&gt;demo&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;的截图和一般商业游戏相比，模型，特效上的差异肯定是巨大的，但除此之外，个人&lt;/span&gt;&lt;span style="color: #000080"&gt;demo&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;画面风格通常让人感觉很&amp;#8220;硬&amp;#8221;，没有气氛。固然个人开发者可能没有时间和精力对场景做预处理，烘焙等等，但还有一个原因也许就是程序员们都不会&amp;#8220;打光&amp;#8221;。如果你已经看过&lt;/span&gt;&lt;span style="color: #000080"&gt;Shawn&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;的&lt;a href="http://blogs.msdn.com/b/shawnhar/archive/2010/09/10/yellow-light-and-blue-shadows.aspx"&gt;&lt;span style="color: #ff6600"&gt;这篇&lt;/span&gt;&lt;/a&gt;文章，就知道我在说什么了。刚开始学图形的人，想到灯光颜色，就总认为应该是&lt;/span&gt;&lt;span style="color: #000080"&gt;0~255&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;之间的一个灰度值，这样做当然没错，但放眼看看电影和动画，通常优秀的视觉设计师绝对不会只用明暗变化体现场景光照，还必须加上色调变化。所谓的&lt;/span&gt;&lt;span style="color: #000080"&gt;gooch shading&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;，就是用暖色代表光较强的部分，冷色表似乎阴影部分的一种算法，&lt;/span&gt;&lt;span style="color: #000080"&gt;gooch shading&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;虽然是一种卡通化的着色手法，但烘托场景氛围，远比普通的明暗变化给力。&lt;/span&gt;&lt;span style="color: #000080"&gt;Shawn&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;所说的方法就是普通明暗变化与&lt;/span&gt;&lt;span style="color: #000080"&gt;gooch shading&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;结合的打光手法，让画面既不太卡通，氛围感也增强。我们所要做的，只是修改灯光参数罢了，不用额外付出任何代价，就能让画面看起来更上一个层次。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;下图中间是神界&lt;/span&gt;&lt;span style="color: #000080"&gt;2 light-pre pass&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;渲染出的光照图，除了几处明显的黄色&lt;/span&gt;&lt;span style="color: #000080"&gt;point light&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;以外，整个场景的光线变化就是上面所说的方法，给人一种比较温暖的感觉。左边则是我在&lt;/span&gt;&lt;span style="color: #000080"&gt;ps&lt;/span&gt;&lt;span style="font-family: 宋体; color: #000080"&gt;里去饱和之后的效果，氛围感完全没有了。&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/clayman/Untitled-1.jpg" width="984" height="246" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/clayman/aggbug/1867455.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/clayman/archive/2010/11/02/1867455.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
