📄 状态.htm
字号:
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模板缓存状态</SPAN></A><o:p></o:p></SPAN></U></B></P>
<P class=MsoNormal><B style="mso-bidi-font-weight: normal"><U><SPAN lang=EN-US
style="mso-fareast-language: ZH-CN"><A
href="http://www.gesoftfactory.com/developer/States.htm#纹理环绕状态"><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">纹理环绕状态</SPAN></A><o:p></o:p></SPAN></U></B></P>
<DIV class=MsoNormal style="TEXT-ALIGN: center" align=center><SPAN lang=EN-US
style="mso-fareast-language: ZH-CN">
<HR align=center width="100%" SIZE=1>
</SPAN></DIV>
<P class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-outline-level: 1"><A
name=阿尔法混合状态><B><SPAN
style="FONT-SIZE: 24pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 18.0pt; mso-fareast-language: ZH-CN">阿尔法混合状态<SPAN
lang=EN-US><o:p></o:p></SPAN></SPAN></B></A></P><SPAN
style="mso-bookmark: 阿尔法混合状态"></SPAN>
<DIV class=MsoNormal style="TEXT-ALIGN: center" align=center><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">
<HR align=center width="100%" SIZE=1>
</SPAN></DIV>
<P>一个颜色的阿尔法值控制它的透明度。启用阿尔法混合允许把一个表面上的颜色、材质和纹理根据透明度混合到另一个表面上。<SPAN
lang=EN-US><o:p></o:p></SPAN></P>
<P class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">更多信息请参阅<U>阿尔法纹理混合</U>和<U>纹理混合</U>。<SPAN
lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">C++应用程序使用<U>D3DRS_ALPHABLENDENABLE</U>渲染状态启用阿尔法透明混合。Microsoft®
Direct3D®
API允许多种类型的阿尔法混合。但是,重要的是要注意用户的三维硬件可能不完全支持所有Direct3D提供的混合状态。<U><o:p></o:p></U></SPAN></P>
<P class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">已完成的阿尔法混合的类型取决于<B
style="mso-bidi-font-weight: normal"><SPAN
lang=EN-US>D3DRS_SRCBLEND</SPAN></B>和<B
style="mso-bidi-font-weight: normal"><SPAN
lang=EN-US>D3DRS_DESTBLEND</SPAN></B>渲染状态。源和目的混合状态须成对使用。以下示例代码显示了如何将源混合状态设置为<SPAN
lang=EN-US>D3DBLEND_SRCCOLOR并将目的混合状态设置为D3DBLEND_INVSRCCOLOR。<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal
style="tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">//</SPAN><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">
本例假设d3dDevice为指向IDirect3DDevice9接口的有效指针。</SPAN><SPAN lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN"><o:p></o:p></SPAN></P>
<P class=MsoNormal
style="tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN"><o:p> </o:p></SPAN></P>
<P class=MsoNormal
style="tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">//</SPAN><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">
设置源混合状态。</SPAN><SPAN lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN"><o:p></o:p></SPAN></P>
<P class=MsoNormal
style="tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">d3dDevice-><SPAN
class=GramE>SetRenderState(</SPAN>D3DRS_SRCBLEND,
D3DBLEND_SRCCOLOR);<o:p></o:p></SPAN></P>
<P class=MsoNormal
style="tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN"><o:p> </o:p></SPAN></P>
<P class=MsoNormal
style="tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">//</SPAN><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">
设置目的混合状态。</SPAN><SPAN lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN"><o:p></o:p></SPAN></P><PRE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue">//</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: green"> 设置目的混合状态。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt"><o:p></o:p></SPAN></PRE>
<P class=MsoNormal
style="tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">d3dDevice-><SPAN
class=GramE>SetRenderState(</SPAN>D3DRS_DESTBLEND,
D3DBLEND_INVSRCCOLOR);<o:p></o:p></SPAN></P>
<P class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">改变源和目的混合状态可以使物体在雾很浓或灰尘很多的环境中看起来像发光物体。例如,若应用程序在雾很浓的环境中建模了火焰,能量场,离子束或类似的发光体,则可把源和目的混合状态都设置为<SPAN
lang=EN-US>D3DBLEND_ONE。<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">阿尔法混合的另一种应用是控制三维场景中的光照,也称为光照贴图。将源混合状态设置为<SPAN
lang=EN-US>D3DBLEND_ZERO并将目的混合状态设置为D3DBLEND_SRCALPHA,会根据源的阿尔法信息使场景变暗。源图元被用作光照贴图,对帧缓存中的内容进行缩放,并在适当的时候使之变暗,这就是单色光照贴图。<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">应用程序可以生成彩色光照贴图,只要把源阿尔法混合状态设置为<SPAN
lang=EN-US>D3DBLEND_ZERO,并把目的混合状态设置为D3DBLEND_SRCCOLOR。<o:p></o:p></SPAN></SPAN></P>
<DIV class=MsoNormal style="TEXT-ALIGN: center" align=center><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">
<HR align=center width="100%" SIZE=1>
</SPAN></DIV>
<P class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-outline-level: 1"><A
name=阿尔法测试状态><B><SPAN
style="FONT-SIZE: 24pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 18.0pt; mso-fareast-language: ZH-CN">阿尔法测试状态<SPAN
lang=EN-US><o:p></o:p></SPAN></SPAN></B></A></P><SPAN
style="mso-bookmark: 阿尔法测试状态"></SPAN>
<DIV class=MsoNormal style="TEXT-ALIGN: center" align=center><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">
<HR align=center width="100%" SIZE=1>
</SPAN></DIV>
<P class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">C++应用程序可以用阿尔法测试控制何时把像素被写入渲染目标表面。通过设置D3DRS_ALPHATESTENABLE渲染状态,应用程序让当前的Direct3D设备根据阿尔法测试函数测试每个像素。如果测试成功,那么就把像素写入表面。如果不成功,那么Direct3D就忽略该像素。应用程序通过<B
style="mso-bidi-font-weight: normal">D3DRS_ALPHAFUNC</B>渲染状态选择阿尔法测试函数。应用程序可以通过<B
style="mso-bidi-font-weight: normal">D3DRS_ALPHAREF</B>渲染状态设置一个参考阿尔法值用来和所有像素进行比较。<U><o:p></o:p></U></SPAN></P>
<P class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">阿尔法测试常用于在光栅化几乎透明的物体时提高性能。如果正被光栅化的颜色数据比给定像素更不透明(<SPAN
lang=EN-US>D3DPCMPCAP_GREATEREQUAL),那么该像素就被写入。否则,光栅化器就完全忽略该像素,这样就节省了将两个颜色混合所需要的处理。以下示例代码检查当前设备是否支持一个给定的比较函数,若支持,则设置比较函数的参数,用来在渲染时提高性能。<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal
style="tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">//</SPAN><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">
本示例代码假设pCaps为一D3DCAPS9结构, </SPAN><SPAN lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN"><o:p></o:p></SPAN></P>
<P class=MsoNormal
style="tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">//</SPAN><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">
被先前的一个IDirect3D9::GetDeviceCaps调用填充。</SPAN><SPAN lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN"><o:p></o:p></SPAN></P>
<P class=MsoNormal
style="tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN"><o:p> </o:p></SPAN></P>
<P class=MsoNormal
style="tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
class=GramE><SPAN lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">if</SPAN></SPAN><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">
(pCaps.AlphaCmpCaps & D3DPCMPCAPS_GREATEREQUAL)<o:p></o:p></SPAN></P>
<P class=MsoNormal
style="tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">{<o:p></o:p></SPAN></P>
<P class=MsoNormal
style="tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN"><SPAN
style="mso-spacerun: yes"> </SPAN><SPAN
class=GramE>dev</SPAN>->SetRenderState(D3DRS_ALPHAREF,
(DWORD)0x00000001);<o:p></o:p></SPAN></P>
<P class=MsoNormal
style="tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN"><SPAN
style="mso-spacerun: yes"> </SPAN><SPAN
class=GramE>dev</SPAN>->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE);
<o:p></o:p></SPAN></P>
<P class=MsoNormal
style="tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN"><SPAN
style="mso-spacerun: yes"> </SPAN><SPAN
class=GramE>dev</SPAN>->SetRenderState(D3DRS_ALPHAFUNC,
D3DCMP_GREATEREQUAL);<o:p></o:p></SPAN></P>
<P class=MsoNormal
style="tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">}<o:p></o:p></SPAN></P>
<P class=MsoNormal
style="tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN"><o:p> </o:p></SPAN></P>
<P class=MsoNormal
style="tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -