📄 光与材质 (lights and materials).htm
字号:
<P class=MsoNormal><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">D3DMCS_COLOR1<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><U><SPAN lang=EN-US
style="COLOR: blue; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">D3DRS_SPECULARMATERIALSOURCE</SPAN></U><SPAN
lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN"><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
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">定义从何处得到镜面反射材质色。<SPAN
lang=EN-US><o:p></o:p></SPAN></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
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">D3DMATERIALCOLORSOURCE<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
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">D3DMCS_COLOR2<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><U><SPAN lang=EN-US
style="COLOR: blue; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">D3DRS_EMISSIVEMATERIALSOURCE</SPAN></U><SPAN
lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN"><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
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">定义从何处得到<SPAN
lang=EN-US>emissive材质色。<o:p></o:p></SPAN></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
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">D3DMATERIALCOLORSOURCE<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
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">D3DMCS_MATERIAL<o:p></o:p></SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 5; mso-yfti-lastrow: yes">
<TD
style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt">
<P class=MsoNormal><U><SPAN lang=EN-US
style="COLOR: blue; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">D3DRS_COLORVERTEX</SPAN></U><SPAN
lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN"><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
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">禁用或启用顶点色。<SPAN
lang=EN-US><o:p></o:p></SPAN></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
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">BOOL<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
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">TRUE<o:p></o:p></SPAN></P></TD></TR></TBODY></TABLE>
<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>/透明度值总是从漫反射色的阿尔法通道中得到。<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><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">D3DMATERIALCOLORSOURCE可以为以下值:<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: l7 level1 lfo5"><SPAN
lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">D3DMCS_MATERIAL
- 用材质颜色作为材质颜色的来源。<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: l7 level1 lfo5"><SPAN
lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">D3DMCS_COLOR1
- 用顶点的漫反射色作为材质颜色的来源。<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: l7 level1 lfo5"><SPAN
lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">D3DMCS_COLOR2
- 用顶点的镜面反射色作为材质颜色的来源。<o:p></o:p></SPAN> </LI></UL>
<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>
<H1>光的位置、范围和衰减</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
lang=EN-US>C++应用程序中使用的所有其它光的属性一样,这些属性被包含在光源的<U>D3DLIGHT9</U>结构中。<o:p></o:p></SPAN></P>
<H2><SPAN
style="FONT-FAMILY: 黑体; mso-fareast-language: ZH-CN; mso-ascii-font-family: Arial">位置</SPAN><SPAN
lang=EN-US style="mso-fareast-language: ZH-CN"><o:p></o:p></SPAN></H2>
<P>光源的位置用<U><SPAN lang=EN-US>D3DVECTOR</SPAN></U>结构表示,它对应于<B><SPAN
lang=EN-US>D3DLIGHT9</SPAN></B>结构中的<B><SPAN
lang=EN-US>Position</SPAN></B>成员。约定<SPAN
lang=EN-US>x,y和z坐标在世界空间中。平行光是唯一不使用位置属性的光源类型。</SPAN></P>
<H2><SPAN
style="FONT-FAMILY: 黑体; mso-fareast-language: ZH-CN; mso-ascii-font-family: Arial">范围</SPAN><SPAN
lang=EN-US style="mso-fareast-language: ZH-CN"><o:p></o:p></SPAN></H2>
<P>光源的范围属性决定在世界空间中的距离,场景中与光源相距超出这个距离的网格不再接收该光源发出的光。<B><SPAN
lang=EN-US>Range</SPAN></B>成员是一个浮点数,表示光源在世界空间中的最大范围。平行光不使用范围属性。</P>
<H2><SPAN
style="FONT-FAMILY: 黑体; mso-fareast-language: ZH-CN; mso-ascii-font-family: Arial">衰减</SPAN><SPAN
lang=EN-US style="mso-fareast-language: ZH-CN"><o:p></o:p></SPAN></H2>
<P>衰减控制光强如何朝范围属性指定的最大范围逐渐减弱。<B><SPAN
lang=EN-US>D3DLIGHT9</SPAN></B>结构中有三个成员用于表示衰减:<B><SPAN
lang=EN-US>Attenuation0</SPAN></B>、<B><SPAN
lang=EN-US>Attenuation1</SPAN></B>、和<B><SPAN
lang=EN-US>Attenuation2</SPAN></B>。这些成员为从<SPAN
lang=EN-US>0.0到无穷大的浮点数,用于控制光强的衰减。一些应用程序将<B>Attenuation1</B>成员设为1.0,而其余的设为0.0,得到光强的变化为1/<I>D</I>,这里<I>D</I>为从光源到顶点之间的距离。光强在光源处最大,在光的最大范围处减弱到1/(<I>Light
Range</I>)。一般来说,应用程序将<B>Attenuation0</B>设为0.0,将<B>Attenuation1</B>设为一个常数,将<B>Attenuation2</B>设为0.0。(译注:请参阅<U>与光照相关的数学</U>)<o:p></o:p></SPAN></P>
<P>为得到更复杂的衰减效果,应用程序可以将衰减值结合起来使用。或者,为创建更奇怪的衰减效果,应用程序也可以将它们设为正常范围外的值。但是,负的衰减值是不允许的。</P>
<DIV class=MsoNormal style="TEXT-ALIGN: center" align=center><SPAN lang=EN-US>
<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"><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></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"><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">光的方向属性决定光源发出的光在世界空间中传播的方向。只有平行光和聚光灯使用方向,方向用一个向量表示。<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>D3DLIGHT</U>结构的<B>Direction</B>成员中设置光的方向。<B>Direction</B>成员为<U>D3DVECTOR</U>类型。方向向量用始于逻辑原点的一段距离描述,与光源在场景中的位置无关。因此,一个笔直指向场景内——沿正z轴——的聚光灯,无论它的位置在哪里,它的方向向量都是<0,0,1>。类似地,通过使用方向为<0,-1,0>的平行光,应用程序可以模拟直射到场景中的阳光。显然,应用程序不一定要创建沿坐标轴照射的光,可以混合搭配这些值,创建出沿某个更有意义的角度照射的光。<o:p></o:p></SPAN></P>
<P class=MsoNormal><B style="mso-bidi-font-weight: normal"><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">注意</SPAN></B><SPAN
lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN"><SPAN
style="mso-tab-count: 1">
</SPAN>虽然应用程序无需归一化光的方向向量,但是要保证该向量长度不为零。换句话说,不要将<0,0,0>用作方向向量。<o:p></o:p></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>
<H1><A name=光的使用>光的使用</A></H1>
<DIV class=MsoNormal style="TEXT-ALIGN: center" align=center><SPAN lang=EN-US>
<HR align=center width="100%" SIZE=1>
</SPAN></DIV>
<H2><SPAN
style="FONT-FAMILY: 黑体; mso-fareast-language: ZH-CN; mso-ascii-font-family: Arial">设置和取得光的属性</SPAN><SPAN
lang=EN-US style="mso-fareast-language: ZH-CN"><o:p></o:p></SPAN></H2>
<P>在<SPAN
lang=EN-US>C++应用程序中,可以通过先准备一个<U>D3DLIGHT9</U>结构,然后调用<U>IDirect3DDevice9::SetLight</U>方法设置光的属性。<B
style="mso-bidi-font-weight: normal">IDirect3DDevice9::SetLight</B>方法接收一个索引值,告诉设备将这组光属性存放在它的内部属性列表的何处,及定义这些属性的<B>D3DLIGHT9</B>结构的地址。要更新光的照明属性,应用程序可以根据需要用新的属性信息调用<B
style="mso-bidi-font-weight: normal">IDirect3DDevice9::SetLight</B>。<o:p></o:p></SPAN></P>
<P>每次应用程序用一个索引值调用<B style="mso-bidi-font-weight: normal"><SPAN
lang=EN-US>IDirect3DDevice9::SetLight</SPAN></B>,但该索引值从未设置过属性时,系统会分配内存以容纳新的一组光属性。应用程序可以设置许多光源,但是任一时刻只能启用其中的一个子集(译注:子集的大小由硬件能力决定)。要确定设备支持的可激活的光源,应用程序可以在取得设备能力后检查<U><SPAN
lang=EN-US>D3DCAPS9</SPAN></U>结构的<B><SPAN
lang=EN-US>MaxActiveLights</SPAN></B>成员。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -