⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 光与材质 (lights and materials).htm

📁 此文件是微软MSDN中d3d部分资料的翻译文件
💻 HTM
📖 第 1 页 / 共 5 页
字号:
</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 
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">直射光就是直接照射的光。直射光总有方向和颜色,并且用作着色算法的一个因子,如高洛德着色算法。不同类型的光以不同的方式发出直射光,产生特殊的衰减效果。通过调用<U><SPAN 
lang=EN-US>IDirect3DDevice9::SetLight</SPAN></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 
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">环境光存在于场景中的任何地方。可以认为它是充满整个场景的光的强度,与物体及它们在场景中的位置无关。环境光没有位置和方向,只有颜色和强度。每个光源会增加场景中总的环境光级别。可以调用<U><SPAN 
lang=EN-US>IDirect3DDevice9::SetRenderState</SPAN></U>方法设置环境光的级别,将<I 
style="mso-bidi-font-style: normal"><SPAN 
lang=EN-US>State</SPAN></I>参数指定为<U><SPAN lang=EN-US>D3DRS_AMBIENT</SPAN></U>,将<I 
style="mso-bidi-font-style: normal"><SPAN 
lang=EN-US>Value</SPAN></I>参数设置为希望的<SPAN 
lang=EN-US>RGBA颜色值。<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>RGBA值的形式表示,其中每个成分为从0到255之间的整数值。这与Microsoft&reg; 
Direct3D&reg;中大多数的颜色值有所不同。更多信息,请参阅<U>光源和材质的颜色值</U>。<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">可以用<U><SPAN 
lang=EN-US>D3DCOLOR_RGBA</SPAN></U>宏生成<SPAN 
lang=EN-US>RGBA值。红、绿、蓝成分组合成最终的环境反射色值。阿尔法成分控制颜色的透明度。当使用硬件加速或RGB模拟设备时,阿尔法成分被忽略。<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></B></A><B><SPAN 
lang=EN-US 
style="FONT-SIZE: 24pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 18.0pt; mso-fareast-language: ZH-CN"><o:p></o:p></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>Microsoft&reg; 
Direct3D&reg;用<U>D3DLIGHT9</U>结构存放所有类型光源的属性。本节包含关于所有光的属性的信息。信息被划分为以下部分。<o:p></o:p></SPAN></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: l8 level1 lfo3"><U><SPAN 
  style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">光的类型</SPAN></U><SPAN 
  lang=EN-US 
  style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; 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: l8 level1 lfo3"><U><SPAN 
  style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">光的颜色</SPAN></U><SPAN 
  lang=EN-US 
  style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; 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: l8 level1 lfo3"><U><SPAN 
  style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">有颜色的顶点(<SPAN 
  lang=EN-US>Color Vertices)</SPAN></SPAN></U><SPAN lang=EN-US 
  style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; 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: l8 level1 lfo3"><U><SPAN 
  style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">光源的位置、范围和衰减</SPAN></U><SPAN 
  lang=EN-US 
  style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; 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: l8 level1 lfo3"><U><SPAN 
  style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">光的方向</SPAN></U><SPAN 
  lang=EN-US 
  style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN"><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>光的类型属性定义了正在使用的光源是什么类型。光的属性由<U><SPAN lang=EN-US>D3DLIGHT9</SPAN></U>结构的<B 
style="mso-bidi-font-weight: normal"><SPAN 
lang=EN-US>Type</SPAN></B>成员的值设置,在<SPAN 
lang=EN-US>C++程序中该成员是一个<U>D3DLIGHTTYPE</U>枚举类型。Microsoft&reg; 
Direct3D&reg;中有三种类型的光——点光源、聚光灯和平行光。每种类型以不同的方式照亮场景中的物体,所需的计算量也不同。<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>场景中的点光源具有颜色和位置,但没有确定的方向。点光源向各个方向发出的光相等,如下图所示。</P>
<P><SPAN lang=EN-US><!--[if gte vml 1]><v:shapetype id=_x0000_t75 coordsize = 
"21600,21600" o:preferrelative = "t" o:spt = "75" filled = "f" stroked = "f" 
path = " m@4@5 l@4@11@9@11@9@5 xe"><v:stroke joinstyle = 
"miter"></v:stroke><v:formulas><v:f eqn = 
"if lineDrawn pixelLineWidth 0 "></v:f><v:f eqn = "sum @0 1 0 "></v:f><v:f eqn = 
"sum 0 0 @1 "></v:f><v:f eqn = "prod @2 1 2 "></v:f><v:f eqn = 
"prod @3 21600 pixelWidth "></v:f><v:f eqn = 
"prod @3 21600 pixelHeight "></v:f><v:f eqn = "sum @0 0 1 "></v:f><v:f eqn = 
"prod @6 1 2 "></v:f><v:f eqn = "prod @7 21600 pixelWidth "></v:f><v:f eqn = 
"sum @8 21600 0 "></v:f><v:f eqn = "prod @7 21600 pixelHeight "></v:f><v:f eqn = 
"sum @10 21600 0 "></v:f></v:formulas><v:path o:extrusionok = "f" 
gradientshapeok = "t" o:connecttype = "rect"></v:path><o:lock aspectratio="t" 
v:ext="edit"></o:lock></v:shapetype><v:shape id=_x0000_i1067 
style="WIDTH: 113.25pt; HEIGHT: 114pt" type = "#_x0000_t75" coordsize = 
"21600,21600"><v:imagedata o:title="ptlight" src = 
"LnM_files/image001.gif"></v:imagedata></v:shape><![endif]--><![if !vml]><img border=0 width=151 height=152
src="LnM_files/image001.gif" v:shapes="_x0000_i1067"><![endif]></SPAN></P>
<P>灯泡是点光源的一个很好的例子。点光源受衰减和范围的影响,并基于每个顶点对网格进行照明。在计算光照的过程中,<SPAN 
lang=EN-US>Direct3D使用点光源在世界坐标中的位置和当前顶点的坐标得到光的方向向量,以及光传播的距离。两者连同顶点法向一起,用于计算光在表面照明中所起的作用。</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>平行光只有颜色和方向,没有位置。平行光发出平行的光,这意味着所有平行光产生的光在场景中以相同的方向传播。可以认为平行光是位于无限远处的光源,如太阳。平行光不受衰减和范围的影响,因此应用程序指定的方向和颜色是<SPAN 
lang=EN-US>Direct3D计算顶点颜色时要考虑的唯二因子。因为照明因子的数量少,所以平行光是可用的计算量最小的光。</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>聚光灯具有颜色、位置和发出光的方向。聚光灯发出的光由一个比较亮的内圆锥和一个较大的外圆锥组成,光强由内而外逐渐减小,如下图所示。</P>
<P><SPAN lang=EN-US><!--[if gte vml 1]><v:shape id=_x0000_i1068 
style="WIDTH: 228pt; HEIGHT: 228pt" type = "#_x0000_t75" coordsize = 
"21600,21600"><v:imagedata o:title="spotlt" src = 
"LnM_files/image002.gif"></v:imagedata></v:shape><![endif]--><![if !vml]><img border=0 width=304 height=304
src="LnM_files/image002.gif" v:shapes="_x0000_i1068"><![endif]></SPAN></P>
<P>聚光灯受辐射(<SPAN 
lang=EN-US>falloff)、衰减和范围的影响。这些因子同光到每个顶点的距离一起,参与计算场景中物体的光照效果。由于需要对每个顶点计算这些效果,因此这使得聚光灯成为Direct3D所有类型的光源中最为耗时的。</SPAN></P>
<P><SPAN lang=EN-US>C++程序中,<B 
style="mso-bidi-font-weight: normal">D3DLIGHT9</B>结构包含了三个仅用于聚光灯的成员。这些成员——<B>Falloff</B>、<B>Theta</B>、和<B>Phi</B><SPAN 
style="mso-bidi-font-weight: bold">——控制聚光灯内外锥的大小,以及光如何在两者之间减弱。</SPAN><o:p></o:p></SPAN></P>
<P><B style="mso-bidi-font-weight: normal"><SPAN 
lang=EN-US>Theta</SPAN></B>值为聚光灯内锥的角度,以弧度为单位,<B 
style="mso-bidi-font-weight: normal"><SPAN 
lang=EN-US>Phi</SPAN></B>值为聚光灯外锥的角度。<B 
style="mso-bidi-font-weight: normal"><SPAN 
lang=EN-US>Falloff</SPAN></B>值控制光强如何从内锥的外侧向外锥的内侧减弱。大多数应用程序将<B 
style="mso-bidi-font-weight: normal"><SPAN lang=EN-US>Falloff</SPAN></B>设为<SPAN 
lang=EN-US>1.0,使光在两个圆锥间平滑地减弱,但也可以根据需要设成其它值。<o:p></o:p></SPAN></P>
<P>下图显示了这些成员的值之间的关系,以及它们如何决定聚光灯的内外锥。</P>
<P><SPAN lang=EN-US><!--[if gte vml 1]><v:shape id=_x0000_i1069 
style="WIDTH: 273pt; HEIGHT: 258pt" type = "#_x0000_t75" coordsize = 
"21600,21600"><v:imagedata o:title="spotlt2" src = 
"LnM_files/image003.gif"></v:imagedata></v:shape><![endif]--><![if !vml]><img border=0 width=364 height=344
src="LnM_files/image003.gif" v:shapes="_x0000_i1069"><![endif]></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 lfo4"><U><SPAN 
  style="FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">聚光灯模型</SPAN></U> 
  </LI></UL>
<P style="MARGIN-LEFT: 36pt">这里包含了有关聚光灯如何工作的更多信息。</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 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -