📄 像素着色器 (pixel shaders).htm
字号:
style="FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">个纹理取样器</SPAN><SPAN
lang=EN-US
style="FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P></TD></TR></TBODY></TABLE>
<P><B><SPAN lang=EN-US
style="mso-fareast-language: ZH-CN">PixelShaderVersion</SPAN></B><SPAN
style="mso-fareast-language: ZH-CN">的第一个字节包含次版本号,第二个字节包含主版本号。经过汇编的着色器的第一个标记就是像素着色器的版本。每种硬件实现都会设置该版本号,表示它能完全支持的像素着色器的最高版本。<SPAN
lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<DIV class=MsoNormal style="TEXT-ALIGN: center" align=center><SPAN lang=EN-US>
<HR align=center width="100%" SIZE=1>
</SPAN></DIV>
<H1><SPAN style="mso-fareast-language: ZH-CN">纹理操作的转换<SPAN
lang=EN-US><o:p></o:p></SPAN></SPAN></H1>
<DIV class=MsoNormal style="TEXT-ALIGN: center" align=center><SPAN lang=EN-US>
<HR align=center width="100%" SIZE=1>
</SPAN></DIV>
<P><SPAN style="mso-fareast-language: ZH-CN">像素着色器在以下几个方面扩展并一般化了<SPAN
lang=EN-US>Microsoft DirectX</SPAN></SPAN><SPAN lang=EN-US
style="FONT-FAMILY: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-ascii-font-family: 宋体">®</SPAN><SPAN
lang=EN-US style="mso-fareast-language: ZH-CN">
6.0和7.0的多重纹理能力。<o:p></o:p></SPAN></P>
<UL type=disc>
<LI class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list 36.0pt; mso-list: l4 level1 lfo9"><SPAN
style="FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">加入了一组通用读</SPAN><SPAN
lang=EN-US style="mso-fareast-language: ZH-CN">/</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">写寄存器,这样就允许更为灵活的表达式。用</SPAN><SPAN
lang=EN-US style="mso-fareast-language: ZH-CN">D3DTA_CURRENT</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">的连续级联需要为每层指定一个单独的结果寄存器参数。</SPAN><SPAN
lang=EN-US style="mso-fareast-language: ZH-CN"><o:p></o:p></SPAN>
<LI class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list 36.0pt; mso-list: l4 level1 lfo9"><SPAN
lang=EN-US style="mso-fareast-language: ZH-CN"><SPAN
style="mso-spacerun: yes"> </SPAN>D3DTOP_MODULATE2X</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">和</SPAN><SPAN
lang=EN-US style="mso-fareast-language: ZH-CN">D3DTOP_MODULATE4X</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">纹理操作被分成了单独的修饰符,可用于任何指令。这样就无需单独的</SPAN><SPAN
lang=EN-US style="mso-fareast-language: ZH-CN">D3DTOP_MODULATE</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">和</SPAN><SPAN
lang=EN-US style="mso-fareast-language: ZH-CN">D3DTOP_MODULATE2X</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">操作了。</SPAN>
<LI class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list 36.0pt; mso-list: l4 level1 lfo9"><SPAN
style="FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">乘加操作加入了可选的第三个参数,因此程序化的像素着色器可以执行</SPAN><SPAN
lang=EN-US style="mso-fareast-language: ZH-CN">arg1 ×arg2 + arg0</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">的操作。这样就不再需要</SPAN><SPAN
lang=EN-US
style="mso-fareast-language: ZH-CN">D3DTOP_MODULATEALPHA_ADDCOLOR</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">和</SPAN><SPAN
lang=EN-US style="mso-fareast-language: ZH-CN">D3DTOP_MODULATECOLOR_ADDALPHA
</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">纹理操作了。</SPAN><SPAN
lang=EN-US style="mso-fareast-language: ZH-CN"><o:p></o:p></SPAN>
<LI class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list 36.0pt; mso-list: l4 level1 lfo9"><SPAN
style="FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">混合操作加入了可选的第三个参数,因此程序化的像素着色器可以用</SPAN><SPAN
lang=EN-US style="mso-fareast-language: ZH-CN">arg0</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">作为</SPAN><SPAN
lang=EN-US style="mso-fareast-language: ZH-CN">arg1</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">和</SPAN><SPAN
lang=EN-US style="mso-fareast-language: ZH-CN">arg2</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">之间的混合比。这样就不再需要</SPAN><SPAN
lang=EN-US>D3DTOP_BLENDDIFFUSEALPHA, D3DTOP_BLENDTEXTUREALPHA,
D3DTOP_BLENDFACTORALPHA, D3DTOP_BLENDTEXTUREALPHAPM, </SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">和</SPAN><SPAN
lang=EN-US>D3DTOP_BLENDCURRENTALPHA</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">纹理操作了。</SPAN><SPAN
lang=EN-US style="mso-fareast-language: ZH-CN"><o:p></o:p></SPAN>
<LI class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list 36.0pt; mso-list: l4 level1 lfo9"><SPAN
style="FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">对纹理寻址的修改操作,如</SPAN><SPAN
lang=EN-US style="mso-fareast-language: ZH-CN">D3DTOP_BUMPENVMAP</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">,被从颜色和阿尔法操作中分离出来并作为第三种操作类型,专门用于纹理寻址操作。</SPAN><SPAN
lang=EN-US style="mso-fareast-language: ZH-CN"><o:p></o:p></SPAN> </LI></UL>
<P><SPAN style="mso-fareast-language: ZH-CN">为了有效地支持这种新增的灵活性,<SPAN
lang=EN-US>API的语法从DWORD对改成了ASCII汇编代码语法。这样就暴露了程序化的像素着色器所提供的功能。<o:p></o:p></SPAN></SPAN></P>
<P><SPAN
style="mso-fareast-language: ZH-CN">注意在使用像素着色器时,镜面反射加法不专门由一个渲染状态控制,如果需要,这可能由像素着色器实现。但是,雾混合仍然由固定功能流水线执行。<SPAN
lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<DIV class=MsoNormal style="TEXT-ALIGN: center" align=center><SPAN lang=EN-US>
<HR align=center width="100%" SIZE=1>
</SPAN></DIV>
<H1><A name=_对纹理的一些考虑></A><SPAN
style="mso-fareast-language: ZH-CN">对纹理的一些考虑<SPAN
lang=EN-US><o:p></o:p></SPAN></SPAN></H1>
<DIV class=MsoNormal style="TEXT-ALIGN: center" align=center><SPAN lang=EN-US>
<HR align=center width="100%" SIZE=1>
</SPAN></DIV>
<P><SPAN style="mso-fareast-language: ZH-CN">像素着色器完全取代了由<SPAN
lang=EN-US>Microsoft DirectX</SPAN></SPAN><SPAN lang=EN-US
style="FONT-FAMILY: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-ascii-font-family: 宋体">®</SPAN><SPAN
lang=EN-US style="mso-fareast-language: ZH-CN">
6.0和7.0的多重纹理API提供的像素混合功能,尤其是那些由<U>D3DTSS_COLOROP</U>, <U>D3DTSS_COLORARG1</U>,
<U>D3DTSS_COLORARG2</U>, <U>D3DTSS_ALPHAOP</U>,
<U>D3DTSS_ALPHAARG1</U>和<U>D3DTSS_ALPHAARG2</U>纹理层状态、相关的参数和修饰符定义的操作。如果设置了程序化的像素着色器,那么这些状态会被忽略。<o:p></o:p></SPAN></P>
<H2><A name=texture_stage_and_sampler_states_graphic></A><SPAN
style="mso-fareast-language: ZH-CN">纹理层和取样器状态<SPAN
lang=EN-US><o:p></o:p></SPAN></SPAN></H2>
<P><SPAN
style="mso-fareast-language: ZH-CN">如果像素着色器正在运行,那么以下纹理层状态仍然会被使用。对这些状态的使用取决于像素着色器的版本,如下表所示。<SPAN
lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<TABLE class=MsoNormalTable style="mso-cellspacing: 1.5pt" cellSpacing=3
cellPadding=0 border=0>
<TBODY>
<TR style="mso-yfti-irow: 0">
<TD
style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt">
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><B><SPAN
style="FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">纹理层状态</SPAN></B><B><SPAN
lang=EN-US
style="FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></B></P></TD>
<TD
style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt">
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><B><SPAN
style="FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">版本</SPAN></B><B><SPAN
lang=EN-US
style="FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></B></P></TD></TR>
<TR style="mso-yfti-irow: 1">
<TD
style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt">
<P class=MsoNormal><SPAN lang=EN-US>D3DTSS_BUMPENVMAT00</SPAN><SPAN
lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P></TD>
<TD
style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt">
<P class=MsoNormal><SPAN lang=EN-US>1_1 - 1_4</SPAN><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 2">
<TD
style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt">
<P class=MsoNormal><SPAN lang=EN-US>D3DTSS_BUMPENVMAT01</SPAN><SPAN
lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P></TD>
<TD
style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt">
<P class=MsoNormal><SPAN lang=EN-US>1_1 - 1_4</SPAN><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 3">
<TD
style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt">
<P class=MsoNormal><SPAN lang=EN-US>D3DTSS_BUMPENVMAT10</SPAN><SPAN
lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P></TD>
<TD
style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt">
<P class=MsoNormal><SPAN lang=EN-US>1_1 - 1_4</SPAN><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 4">
<TD
style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt">
<P class=MsoNormal><SPAN lang=EN-US>D3DTSS_BUMPENVMAT11</SPAN><SPAN
lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P></TD>
<TD
style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt">
<P class=MsoNormal><SPAN lang=EN-US>1_1 - 1_4</SPAN><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 5">
<TD
style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt">
<P class=MsoNormal><SPAN lang=EN-US>D3DTSS_BUMPENVLSCALE</SPAN><SPAN
lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P></TD>
<TD
style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt">
<P class=MsoNormal><SPAN lang=EN-US>1_1 - 1_3</SPAN><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 6">
<TD
style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt">
<P class=MsoNormal><SPAN lang=EN-US>D3DTSS_BUMPENVLOFF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -