<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_木木的二进制人生</title><subtitle type="text">--快乐生活，快乐编程</subtitle><id>http://feed.cnblogs.com/blog/u/25296/rss</id><updated>2012-04-25T20:46:04Z</updated><author><name>林公子</name><uri>http://www.cnblogs.com/eros/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/eros/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/25296/rss"/><entry><id>http://www.cnblogs.com/eros/archive/2012/04/24/2469077.html</id><title type="text">Unreal Engine 3自定义Post Process Effect</title><summary type="text">本文成于学习独行剑侠的一篇文章《Unreal Engine Shader编程基础》的过程中遇到的问题以及自己尝试的结果。 首先，要新建一个usf格式的文件，放到引擎根目录/Engine/Shaders目录中。这个是UE3中使用的Shader文件格式(大概就是unreal shader file的意思: )，其实也就是文本文件。我们写个最简单的Pixel Shader: 1: // TestShader.usf 2: 3: float4 MainPS(float2 InUV : TEXCOORD0) : COLOR0 4: { 5: return float4(...</summary><published>2012-04-24T15:26:00Z</published><updated>2012-04-24T15:26:00Z</updated><author><name>林公子</name><uri>http://www.cnblogs.com/eros/</uri></author><link rel="alternate" href="http://www.cnblogs.com/eros/archive/2012/04/24/2469077.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/eros/archive/2012/04/24/2469077.html"/><content type="html">&lt;p&gt;&lt;span style="font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: 14px;"&gt;&lt;span style="font-family: 微软雅黑;"&gt;本文成于学习独行剑侠的一篇文章《&lt;/span&gt;&lt;a href="http://hi.baidu.com/_%E2d_%B7%B3_%DE%B2%C2%D2/blog/item/1b95dc440bc21955510ffe9e.html" target="_blank"&gt;&lt;span style="font-family: 微软雅黑;"&gt;Unreal Engine Shader编程基础&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 微软雅黑;"&gt;》的过程中遇到的问题以及自己尝试的结果。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;span style="font-family: 微软雅黑; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 首先，要新建一个usf格式的文件，放到引擎根目录/Engine/Shaders目录中。这个是UE3中使用的Shader文件格式(大概就是unreal shader file的意思: )，其实也就是文本文件。我们写个最简单的Pixel Shader:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;div id="codeSnippet" style="padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; &lt;span style="color: #008000;"&gt;// TestShader.usf&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   2:&lt;/span&gt;  &lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   3:&lt;/span&gt; float4 MainPS(float2 InUV : TEXCOORD0) : COLOR0&lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum5" style="color: #606060;"&gt;   4:&lt;/span&gt; {&lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum6" style="color: #606060;"&gt;   5:&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; float4(InUV, 0, 1.0);&lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum7" style="color: #606060;"&gt;   6:&lt;/span&gt; }&lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Shader&lt;span style="font-family: 微软雅黑;"&gt;代码写好后就要求我们按照Unreal的规则来创建对应的.cpp和/或.uc源文件，我们一步步来。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 微软雅黑; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;在Engine\Src项目目录下新建一个UnTestPixelShaderEffect.cpp文件，用来映射我们的TestPixelShader.usf。&lt;/span&gt;&lt;/div&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;div id="codeSnippet" style="padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; IMPLEMENT_CLASS(UTestEffect);&lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt;  &lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   3:&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; FTestPixelShader : &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; FGlobalShader&lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   4:&lt;/span&gt; {&lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum5" style="color: #606060;"&gt;   5:&lt;/span&gt;     DECLARE_SHADER_TYPE(FTestPixelShader, Global);&lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum6" style="color: #606060;"&gt;   6:&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;:&lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum7" style="color: #606060;"&gt;   7:&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; UBOOL ShouldCache(EShaderPlatform Platform)&lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum8" style="color: #606060;"&gt;   8:&lt;/span&gt;     {&lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum9" style="color: #606060;"&gt;   9:&lt;/span&gt;         &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;TRUE&lt;/span&gt;;&lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum10" style="color: #606060;"&gt;  10:&lt;/span&gt;     }&lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum11" style="color: #606060;"&gt;  11:&lt;/span&gt;  &lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum12" style="color: #606060;"&gt;  12:&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; ModifyCompilationEnvironment(EShaderPlatform Platform, &lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum13" style="color: #606060;"&gt;  13:&lt;/span&gt;                                              FShaderCompilerEnvironment&amp;amp; OutEnvironment)&lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum14" style="color: #606060;"&gt;  14:&lt;/span&gt;     {&lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum15" style="color: #606060;"&gt;  15:&lt;/span&gt;     }&lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum16" style="color: #606060;"&gt;  16:&lt;/span&gt;  &lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum17" style="color: #606060;"&gt;  17:&lt;/span&gt;     FTestPixelShader()&lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum18" style="color: #606060;"&gt;  18:&lt;/span&gt;     {&lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum19" style="color: #606060;"&gt;  19:&lt;/span&gt;     }&lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum20" style="color: #606060;"&gt;  20:&lt;/span&gt;  &lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum21" style="color: #606060;"&gt;  21:&lt;/span&gt;     FTestPixelShader(&lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; ShaderMetaType::CompiledShaderInitializerType&amp;amp; Initializer)&lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum22" style="color: #606060;"&gt;  22:&lt;/span&gt;     : FGlobalShader(Initializer)&lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum23" style="color: #606060;"&gt;  23:&lt;/span&gt;     {&lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum24" style="color: #606060;"&gt;  24:&lt;/span&gt;     }&lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum25" style="color: #606060;"&gt;  25:&lt;/span&gt; };&lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum26" style="color: #606060;"&gt;  26:&lt;/span&gt;  &lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 13px;"&gt;&lt;span id="lnum27" style="color: #606060;"&gt;  27:&lt;/span&gt; IMPLEMENT_SHADER_TYPE(, FTestPixelShader, TEXT(&lt;span style="color: #006080;"&gt;"TestPixelShader"&lt;/span&gt;), TEXT(&lt;span style="color: #006080;"&gt;"MainPS"&lt;/span&gt;), SF_Pixel, 0, 0);&lt;/span&gt;&lt;span style="font-size: 13px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 13px;"&gt;&lt;span style="font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DECLARE_SHADER_TYPE&lt;span style="font-family: 微软雅黑;"&gt;和IMPLEMENT_SHADER_TYPE宏分别用来声明和定义Shader。这是Shader不带参数的最简单的情况，如果Shader带参数还要在类中声明相应的FShaderParameter/FShaderResourceParameter参数。FGlobalShader还有一个重载函数virtual UBOOL Serialize(FArchive&amp;amp; Ar)用于序列化，我们这里没有用到所以不需要重写它。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在原文这里就要添加相应的绘制代码到引擎源文件中，出于简单测试目的我不是很想改动底层文件，于是我想能不能利用UE3的PostProcess来达到同样的目的。&lt;/span&gt;&lt;span style="font-family: 微软雅黑; font-size: 14px;"&gt;经过一番探索有了理想的结果。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 要在UE3中使用Post Process首先要创建PostProcessChain，然后将相应的Post Process Effect连接到PostProcessChain。这里就要涉及到自定义Post Process Effect如何实现了。一个Post Process Effect的实现由三部分组成，.cpp文件, .uc文件以及.usf文件，其中usf和cpp文件我们在文章开头已经准备好。经过对UE3自带Post Process Effect的参考，需要创建TestEffect.uc文件以及修改UnTestShaderEffect.cpp文件。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在Engine/Src/Classes/PostProcess/项目目录创建TestEffect.uc。&lt;/span&gt;&lt;/p&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;div id="codeSnippet" style="padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; TestEffect extends PostProcessEffect&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt;     native;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   3:&lt;/span&gt;  &lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   4:&lt;/span&gt; cpptext&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum5" style="color: #606060;"&gt;   5:&lt;/span&gt; {&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum6" style="color: #606060;"&gt;   6:&lt;/span&gt;     &lt;span style="color: #008000;"&gt;// UPostProcessEffect interface&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum7" style="color: #606060;"&gt;   7:&lt;/span&gt;     &lt;span style="color: #008000;"&gt;/**&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum8" style="color: #606060;"&gt;   8:&lt;/span&gt; &lt;span style="color: #008000;"&gt;     * Creates a proxy to represent the render info for a post process effect&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum9" style="color: #606060;"&gt;   9:&lt;/span&gt; &lt;span style="color: #008000;"&gt;     * @param WorldSettings - The world's post process settings for the view.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum10" style="color: #606060;"&gt;  10:&lt;/span&gt; &lt;span style="color: #008000;"&gt;     * @return The proxy object.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum11" style="color: #606060;"&gt;  11:&lt;/span&gt; &lt;span style="color: #008000;"&gt;     */&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum12" style="color: #606060;"&gt;  12:&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; FPostProcessSceneProxy* CreateSceneProxy(&lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; FPostProcessSettings* WorldSettings);&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum13" style="color: #606060;"&gt;  13:&lt;/span&gt;  &lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum14" style="color: #606060;"&gt;  14:&lt;/span&gt;     &lt;span style="color: #008000;"&gt;/**&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum15" style="color: #606060;"&gt;  15:&lt;/span&gt; &lt;span style="color: #008000;"&gt;     * @param View - current view&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum16" style="color: #606060;"&gt;  16:&lt;/span&gt; &lt;span style="color: #008000;"&gt;     * @return TRUE if the effect should be rendered&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum17" style="color: #606060;"&gt;  17:&lt;/span&gt; &lt;span style="color: #008000;"&gt;     */&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum18" style="color: #606060;"&gt;  18:&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;virtual&lt;/span&gt; UBOOL IsShown(&lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; FSceneView* View) &lt;span style="color: #0000ff;"&gt;const&lt;/span&gt;;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum19" style="color: #606060;"&gt;  19:&lt;/span&gt;  &lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum20" style="color: #606060;"&gt;  20:&lt;/span&gt;     &lt;span style="color: #008000;"&gt;/**&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum21" style="color: #606060;"&gt;  21:&lt;/span&gt; &lt;span style="color: #008000;"&gt;    * Called after this instance has been serialized.  UberPostProcessEffect should only&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum22" style="color: #606060;"&gt;  22:&lt;/span&gt; &lt;span style="color: #008000;"&gt;    * ever exists in the SDPG_PostProcess scene&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum23" style="color: #606060;"&gt;  23:&lt;/span&gt; &lt;span style="color: #008000;"&gt;    */&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum24" style="color: #606060;"&gt;  24:&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; PostLoad();&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum25" style="color: #606060;"&gt;  25:&lt;/span&gt; }&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: 13px;"&gt;&lt;span style="font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 然后修改UnTestPixelShader.cpp，在开头的代码之后添加如下代码：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;div id="codeSnippet" style="padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; FTestEffectPostProcessSceneProxy : &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; FPostProcessSceneProxy&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt; {&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   3:&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;:&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   4:&lt;/span&gt;     &lt;span style="color: #008000;"&gt;/** &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum5" style="color: #606060;"&gt;   5:&lt;/span&gt; &lt;span style="color: #008000;"&gt;    * Initialization constructor. &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum6" style="color: #606060;"&gt;   6:&lt;/span&gt; &lt;span style="color: #008000;"&gt;    * @param InEffect - DOF post process effect to mirror in this proxy&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum7" style="color: #606060;"&gt;   7:&lt;/span&gt; &lt;span style="color: #008000;"&gt;    */&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum8" style="color: #606060;"&gt;   8:&lt;/span&gt;     FTestEffectPostProcessSceneProxy(&lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; UTestEffect* InEffect,&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum9" style="color: #606060;"&gt;   9:&lt;/span&gt;                                      &lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; FPostProcessSettings* WorldSettings);&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum10" style="color: #606060;"&gt;  10:&lt;/span&gt;  &lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum11" style="color: #606060;"&gt;  11:&lt;/span&gt;     &lt;span style="color: #008000;"&gt;/**&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum12" style="color: #606060;"&gt;  12:&lt;/span&gt; &lt;span style="color: #008000;"&gt;    * Render the post process effect&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum13" style="color: #606060;"&gt;  13:&lt;/span&gt; &lt;span style="color: #008000;"&gt;    * Called by the rendering thread during scene rendering&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum14" style="color: #606060;"&gt;  14:&lt;/span&gt; &lt;span style="color: #008000;"&gt;    * @param InDepthPriorityGroup - scene DPG currently being rendered&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum15" style="color: #606060;"&gt;  15:&lt;/span&gt; &lt;span style="color: #008000;"&gt;    * @param View - current view&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum16" style="color: #606060;"&gt;  16:&lt;/span&gt; &lt;span style="color: #008000;"&gt;    * @param CanvasTransform - same canvas transform used to render the scene&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum17" style="color: #606060;"&gt;  17:&lt;/span&gt; &lt;span style="color: #008000;"&gt;    * @param LDRInfo - helper information about SceneColorLDR&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum18" style="color: #606060;"&gt;  18:&lt;/span&gt; &lt;span style="color: #008000;"&gt;    * @return TRUE if anything was rendered&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum19" style="color: #606060;"&gt;  19:&lt;/span&gt; &lt;span style="color: #008000;"&gt;    */&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum20" style="color: #606060;"&gt;  20:&lt;/span&gt;     UBOOL Render(&lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; FScene* Scene, UINT InDepthPriorityGroup,FViewInfo&amp;amp; View,&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum21" style="color: #606060;"&gt;  21:&lt;/span&gt;                  &lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; FMatrix&amp;amp; CanvasTransform,FSceneColorLDRInfo&amp;amp; LDRInfo);&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum22" style="color: #606060;"&gt;  22:&lt;/span&gt; };&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum23" style="color: #606060;"&gt;  23:&lt;/span&gt;  &lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum24" style="color: #606060;"&gt;  24:&lt;/span&gt; FTestEffectPostProcessSceneProxy&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum25" style="color: #606060;"&gt;  25:&lt;/span&gt; ::FTestEffectPostProcessSceneProxy(&lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; UTestEffect* InEffect,&lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; FPostProcessSettings* WorldSettings)&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum26" style="color: #606060;"&gt;  26:&lt;/span&gt; : FPostProcessSceneProxy(InEffect)&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum27" style="color: #606060;"&gt;  27:&lt;/span&gt; {&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum28" style="color: #606060;"&gt;  28:&lt;/span&gt; }&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum29" style="color: #606060;"&gt;  29:&lt;/span&gt;  &lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum30" style="color: #606060;"&gt;  30:&lt;/span&gt; UBOOL FTestEffectPostProcessSceneProxy::Render(&lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; FScene* Scene, UINT InDepthPriorityGroup,FViewInfo&amp;amp; View,&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum31" style="color: #606060;"&gt;  31:&lt;/span&gt;                                                &lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; FMatrix&amp;amp; CanvasTransform,FSceneColorLDRInfo&amp;amp; LDRInfo)&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum32" style="color: #606060;"&gt;  32:&lt;/span&gt; {&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum33" style="color: #606060;"&gt;  33:&lt;/span&gt;     RHISetRenderTarget(GSceneRenderTargets.GetSceneColorSurface(), FSurfaceRHIRef());&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum34" style="color: #606060;"&gt;  34:&lt;/span&gt;  &lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum35" style="color: #606060;"&gt;  35:&lt;/span&gt;     GSceneRenderTargets.BeginRenderingSceneColor();&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum36" style="color: #606060;"&gt;  36:&lt;/span&gt;  &lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum37" style="color: #606060;"&gt;  37:&lt;/span&gt;     TShaderMapRef&amp;lt;FScreenVertexShader&amp;gt;  TestVertexShader( GetGlobalShaderMap() );&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum38" style="color: #606060;"&gt;  38:&lt;/span&gt;     TShaderMapRef&amp;lt;FTestPixelShader&amp;gt;     TestPixelShader( GetGlobalShaderMap() );&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum39" style="color: #606060;"&gt;  39:&lt;/span&gt;  &lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum40" style="color: #606060;"&gt;  40:&lt;/span&gt;     RHISetViewport( 0, 0, 0.0f, View.RenderTargetX + View.RenderTargetSizeX, &lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum41" style="color: #606060;"&gt;  41:&lt;/span&gt;                                 View.RenderTargetY + View.RenderTargetSizeY, 1.0f );&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum42" style="color: #606060;"&gt;  42:&lt;/span&gt;     RHISetViewParameters(View);&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum43" style="color: #606060;"&gt;  43:&lt;/span&gt;  &lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum44" style="color: #606060;"&gt;  44:&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; FGlobalBoundShaderState TestBoundState;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum45" style="color: #606060;"&gt;  45:&lt;/span&gt;     SetGlobalBoundShaderState( &lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum46" style="color: #606060;"&gt;  46:&lt;/span&gt;         TestBoundState,&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum47" style="color: #606060;"&gt;  47:&lt;/span&gt;         GFilterVertexDeclaration.VertexDeclarationRHI,&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum48" style="color: #606060;"&gt;  48:&lt;/span&gt;         *TestVertexShader,&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum49" style="color: #606060;"&gt;  49:&lt;/span&gt;         *TestPixelShader,&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum50" style="color: #606060;"&gt;  50:&lt;/span&gt;         &lt;span style="color: #0000ff;"&gt;sizeof&lt;/span&gt;(&lt;span style="color: #0000ff;"&gt;sizeof&lt;/span&gt;(FFilterVertex))&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum51" style="color: #606060;"&gt;  51:&lt;/span&gt;         );&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum52" style="color: #606060;"&gt;  52:&lt;/span&gt;  &lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum53" style="color: #606060;"&gt;  53:&lt;/span&gt;     DrawDenormalizedQuad(&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum54" style="color: #606060;"&gt;  54:&lt;/span&gt;         View.RenderTargetX, View.RenderTargetY,&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum55" style="color: #606060;"&gt;  55:&lt;/span&gt;         View.RenderTargetSizeX, View.RenderTargetSizeY,&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum56" style="color: #606060;"&gt;  56:&lt;/span&gt;         View.RenderTargetX, View.RenderTargetY,&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum57" style="color: #606060;"&gt;  57:&lt;/span&gt;         View.RenderTargetSizeX, View.RenderTargetSizeY,&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum58" style="color: #606060;"&gt;  58:&lt;/span&gt;         View.RenderTargetSizeX, View.RenderTargetSizeY,&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum59" style="color: #606060;"&gt;  59:&lt;/span&gt;         GSceneRenderTargets.GetBufferSizeX(), GSceneRenderTargets.GetBufferSizeY()&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum60" style="color: #606060;"&gt;  60:&lt;/span&gt;         );&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum61" style="color: #606060;"&gt;  61:&lt;/span&gt;  &lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum62" style="color: #606060;"&gt;  62:&lt;/span&gt;     GSceneRenderTargets.FinishRenderingSceneColor();&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum63" style="color: #606060;"&gt;  63:&lt;/span&gt;  &lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum64" style="color: #606060;"&gt;  64:&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;TRUE&lt;/span&gt;;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum65" style="color: #606060;"&gt;  65:&lt;/span&gt; }&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum66" style="color: #606060;"&gt;  66:&lt;/span&gt;  &lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum67" style="color: #606060;"&gt;  67:&lt;/span&gt; FPostProcessSceneProxy* UTestEffect::CreateSceneProxy(&lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; FPostProcessSettings* WorldSettings)&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum68" style="color: #606060;"&gt;  68:&lt;/span&gt; {&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum69" style="color: #606060;"&gt;  69:&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; FTestEffectPostProcessSceneProxy(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;, WorldSettings);&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum70" style="color: #606060;"&gt;  70:&lt;/span&gt; }&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum71" style="color: #606060;"&gt;  71:&lt;/span&gt;  &lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum72" style="color: #606060;"&gt;  72:&lt;/span&gt; UBOOL UTestEffect::IsShown(&lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; FSceneView* View) &lt;span style="color: #0000ff;"&gt;const&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum73" style="color: #606060;"&gt;  73:&lt;/span&gt; {&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum74" style="color: #606060;"&gt;  74:&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; Super::IsShown(View);&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum75" style="color: #606060;"&gt;  75:&lt;/span&gt; }&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum76" style="color: #606060;"&gt;  76:&lt;/span&gt;  &lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum77" style="color: #606060;"&gt;  77:&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; UTestEffect::PostLoad()&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum78" style="color: #606060;"&gt;  78:&lt;/span&gt; {&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum79" style="color: #606060;"&gt;  79:&lt;/span&gt;     Super::PostLoad();&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum80" style="color: #606060;"&gt;  80:&lt;/span&gt; }&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 完成之后先运行一遍Editor，引擎会解析TestEffect.uc然后在EngineClasses.h头文件中添加对应的native类定义。之后完整编译整个项目。重新打开Editor，新建一个PostProcessChain，命名为TestEffect，双击打开，在Post Process编辑器中右键可以看到菜单底部有我们自定义的TestEffect，将它连接到默认的SceneRenderTarget上，保存PostProcessChain，然后选中它。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/21737/2012042603575272.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: medium;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: 14px;"&gt;打开任意一张地图，进入View-&amp;gt;World Properties菜单项，点击World Post Process Chain栏旁的箭头按钮赋予我们选中的TestEffect，如果一切正常，结果应该类似这样：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/21737/2012042603584758.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: 14px;"&gt;至此一个简单的自定义Post Process Effect就完成了^_^。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: 14px;"&gt;&lt;span style="color: #ff0000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 更新&lt;/span&gt;:带参数的Shader&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 昨天试验过不带参数的简单Shader之后，今天尝试了添加Shader参数的支持。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 首先我们在TestPixelShader.usf文件中添加一个变量：&lt;/span&gt;&lt;/p&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;div id="codeSnippet" style="padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; &lt;span style="color: #008000;"&gt;// TestShader.usf&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt; float4 ShadingColor;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   3:&lt;/span&gt;  &lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   4:&lt;/span&gt; float4 MainPS(float2 InUV : TEXCOORD0) : COLOR0&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum5" style="color: #606060;"&gt;   5:&lt;/span&gt; {&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum6" style="color: #606060;"&gt;   6:&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; float4(InUV, 0, 1.0) + ShadingColor;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum7" style="color: #606060;"&gt;   7:&lt;/span&gt; }&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 简单的进行颜色叠加。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 然后我们在TestEffect.uc文件中添加一个编辑器变量以便我们在运行时更改Shader参数进行测试。&lt;/span&gt;&lt;/p&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;div id="codeSnippet" style="padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; var() Vector ShadingColor;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在defaultproperties块中给一个默认值：&lt;/span&gt;&lt;/p&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;div id="codeSnippet" style="padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; defaultproperties&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt; {&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   3:&lt;/span&gt;     ShadingColor = (X=0.0f, Y=0.0f, Z=0.0f)&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   4:&lt;/span&gt; }&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 保存文件，在这时运行一下Editor，让EngineClass中UTestShaderEffect的声明得到更新。现在来修改UnTestPixelShader.cpp文件。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: 14px;"&gt;先在FTestPixelShader类中声明一个FShaderParameter变量:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;div id="codeSnippet" style="padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; FShaderParameter ShadingColorParameters;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp; 因为这一次我们用到了Shader参数，所以要重写FGlobalShader基类的Serialize(FArchive&amp;amp; Ar)方法：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;div id="codeSnippet" style="padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;virtual&lt;/span&gt; UBOOL Serialize(FArchive&amp;amp; Ar)&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt; {&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   3:&lt;/span&gt;     UBOOL bShaderHasOutdatedParameters = FShader::Serialize(Ar);&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   4:&lt;/span&gt;     Ar &amp;lt;&amp;lt; ShadingColorParameters;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum5" style="color: #606060;"&gt;   5:&lt;/span&gt;  &lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum6" style="color: #606060;"&gt;   6:&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; bShaderHasOutdatedParameters;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum7" style="color: #606060;"&gt;   7:&lt;/span&gt; }&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: 14px;"&gt;然后在构造函数中绑定我们的Shader参数：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;div id="codeSnippet" style="padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; FTestPixelShader(&lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; ShaderMetaType::CompiledShaderInitializerType&amp;amp; Initializer)&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt; : FGlobalShader(Initializer)&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   3:&lt;/span&gt; {&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   4:&lt;/span&gt;     ShadingColorParameters.Bind(Initializer.ParameterMap, TEXT(&lt;span style="color: #006080;"&gt;"ShadingColor"&lt;/span&gt;), &lt;span style="color: #0000ff;"&gt;TRUE&lt;/span&gt;);&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum5" style="color: #606060;"&gt;   5:&lt;/span&gt; }&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: 14px;"&gt;之后，在FTestEffectPostProcessSceneProxy类中定义一个用来传入Shader的变量FVector ShadingColor，在FTestEffectPostProcessSceneProxy构造函数中接收来自Post Process编辑器中用户指定的ShadingColor值。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;div id="codeSnippet" style="padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; FTestEffectPostProcessSceneProx&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt; y::FTestEffectPostProcessSceneProxy(&lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; UTestEffect* InEffect,&lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; FPostProcessSettings* WorldSettings)&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   3:&lt;/span&gt; : FPostProcessSceneProxy(InEffect)&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   4:&lt;/span&gt; {&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum5" style="color: #606060;"&gt;   5:&lt;/span&gt;     ShadingColor = InEffect-&amp;gt;ShadingColor;&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum6" style="color: #606060;"&gt;   6:&lt;/span&gt; }&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: 14px;"&gt;最后，我们需要将接收到的Shader参数实际应用到Shader中，在FTestEffectPostProcessSceneProxy::Render函数的SetGlobalBoundShaderState后面添加以下代码：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;div id="codeSnippet" style="padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; SetPixelShaderValues(&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt;     TestPixelShader-&amp;gt;GetPixelShader(),&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   3:&lt;/span&gt;     TestPixelShader-&amp;gt;ShadingColorParameters,&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   4:&lt;/span&gt;     &amp;amp;ShadingColor,&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;span style="font-family: Bitstream Vera Sans Mono; font-size: 14px;"&gt;&lt;span id="lnum5" style="color: #606060;"&gt;   5:&lt;/span&gt;     1);&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;!--CRLF--&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 这样，编辑器中的ShadingColor参数就和Shader文件中的ShadingColor变量建立了联系，现在启动Editor来进行测试。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 加载任意一张地图，打开内容浏览器找到上次创建TestEffect PostProcessChain，双击打开，在Post Process编辑器中选中它，我们可以发现编辑中已经可以看到我们定义的Shading Color变量了。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;"&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/21737/2012042603560461.png" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: 14px;"&gt;随便改一下试试，比如把X改成1.0，然后将将PostProcessChain赋予场景观察结果：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;"&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/21737/2012042604012234.png" alt="" /&gt;B&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Bingo！运行正常~&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/eros/aggbug/2469077.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/eros/archive/2012/04/24/2469077.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/eros/archive/2012/03/31/2426279.html</id><title type="text">关于“应用程序无法正常启动(0xc000007b)。请单击“确定”关闭应用程序。”</title><summary type="text">最近换了新电脑，赶时髦装上了Win7 x64旗舰版，以前一直用x86系统，换到x64之后使用上没有遇到过啥问题，直到今天，要调试以前的一份老代码，在原来的Win7 x86下可以正常运行，但是今天启动程序的时候，一直报“应用程序无法正常启动(0xc000007b)。请单击“确定”关闭应用程序。”，我以为是简单的运行时问题，于是又重新编译了一遍(Win32模式），结果问题依旧，上网搜索良久也无甚收获，说得最多的就是一些硬盘版游戏启动时遇到这种错误，但是和我的情况不尽相同。折腾了一下午，没法了，只有曲线救国装了个虚拟机运行Win7 x86，然后来调试代码。 虚拟机系统装好以后，我试着运行了一下程序.</summary><published>2012-03-30T21:16:00Z</published><updated>2012-03-30T21:16:00Z</updated><author><name>林公子</name><uri>http://www.cnblogs.com/eros/</uri></author><link rel="alternate" href="http://www.cnblogs.com/eros/archive/2012/03/31/2426279.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/eros/archive/2012/03/31/2426279.html"/><content type="html">&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: 12px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 最近换了新电脑，赶时髦装上了Win7 x64旗舰版，以前一直用x86系统，换到x64之后使用上没有遇到过啥问题，直到今天，要调试以前的一份老代码，在原来的Win7 x86下可以正常运行，但是今天启动程序的时候，一直报&amp;ldquo;应用程序无法正常启动(0xc000007b)。请单击&amp;ldquo;确定&amp;rdquo;关闭应用程序。&amp;rdquo;，我以为是简单的运行时问题，于是又重新编译了一遍(Win32模式），结果问题依旧，上网搜索良久也无甚收获，说得最多的就是一些硬盘版游戏启动时遇到这种错误，但是和我的情况不尽相同。折腾了一下午，没法了，只有曲线救国装了个虚拟机运行Win7 x86，然后来调试代码。&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-family: 微软雅黑; font-size: 12px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 虚拟机系统装好以后，我试着运行了一下程序，结果提示libmysql.dll找不到，我这才想起来MySql忘装了，装上MySql，程序顺利运行起来。就在这么一刹那，灵光一闪，我突然好像想到了什么，因为本机装的Win7 x64，所以安装的程序我都尽量找x64版本的，MySql也不例外，莫非就是这个DLL版本的问题？我赶紧把虚拟机里装好的x86 MySql的libmysql.dll拷贝到我的程序目录下，运行，bingo！一切正常了！&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-family: 微软雅黑; font-size: 12px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 才用上x64系统做开发，经验不足啊，因为一时疏忽，忘记了这种导致错误的可能性，Win32程序可以在Win64下运行，但是一定得有对应版本的DLL才行，否则就是&amp;ldquo;当！&amp;rdquo;的一声在脑海里回响纠结一下午&amp;hellip;&amp;hellip;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/eros/aggbug/2426279.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/eros/archive/2012/03/31/2426279.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/eros/archive/2010/08/23/1806433.html</id><title type="text">【转】齐次坐标的理解</title><summary type="text">一直对齐次坐标这个概念的理解不够彻底，只见大部分的书中说道“齐次坐标在仿射变换中非常的方便”，然后就没有了后文，今天在一个叫做“三百年 重生”的博客上看到一篇关于透视投影变换的探讨的文章，其中有对齐次坐标有非常精辟的说明，特别是针对这样一句话进行了有力的证明：“齐次坐标表示是计算机图形学的重要手段之一，它既能够用来明确区分向量和点，同时也...</summary><published>2010-08-23T06:46:00Z</published><updated>2010-08-23T06:46:00Z</updated><author><name>林公子</name><uri>http://www.cnblogs.com/eros/</uri></author><link rel="alternate" href="http://www.cnblogs.com/eros/archive/2010/08/23/1806433.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/eros/archive/2010/08/23/1806433.html"/><content type="html">&lt;p&gt;&amp;nbsp; 一直对齐次坐标这个概念的理解不够彻底，只见大部分的书中说道&amp;ldquo;齐次坐标在仿射变换中非常的方便&amp;rdquo;，然后就没有了后文，今天在一个叫做&amp;ldquo;三百年 重生&amp;rdquo;的博客上看到一篇关于透视投影变换的探讨的文章，其中有对齐次坐标有非常精辟的说明，特别是针对这样一句话进行了有力的证明：&lt;em&gt;&lt;span style="font-family: 宋体;"&gt;&amp;ldquo;齐次坐标表示是计算机图形学的重要手段之一，它既能够用来明确区分向量和点，同时也更易用于进行仿射（线性）几何变换。&amp;rdquo;&amp;mdash;&amp;mdash;&lt;/span&gt; &lt;/em&gt;F.S. Hill, JR。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 由于作者对齐次坐标真的解释的不错，我就原封不动的摘抄过来：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-family: Times New Roman;"&gt; 对于一个&lt;/span&gt;&lt;em style="font-family: Times New Roman; mso-bidi-font-style: normal;"&gt;向量&lt;/em&gt;&lt;strong style="font-family: Times New Roman; mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;v&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-family: Times New Roman; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;以及基&lt;/span&gt;&lt;strong style="font-family: Times New Roman; mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;oabc&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;，&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;可以找到一组坐标&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;(v1,v2,v3)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，使得&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;strong style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="font-family: Times New Roman; font-size: 12pt;"&gt;v&lt;/span&gt;&lt;/strong&gt;&lt;span lang="EN-US" style="font-family: Times New Roman; font-size: 12pt;"&gt; = v1 &lt;/span&gt;&lt;span lang="EN-US" style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;strong style="mso-bidi-font-weight: normal;"&gt;a&lt;/strong&gt; + v2 &lt;strong style="font-family: Times New Roman; font-size: 10pt; mso-bidi-font-weight: normal;"&gt;b + &lt;/strong&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Times New Roman; font-size: 12pt;"&gt;v3&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;strong style="mso-bidi-font-weight: normal;"&gt; c&lt;/strong&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Times New Roman;"&gt;&lt;strong style="mso-bidi-font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;strong style="mso-bidi-font-weight: normal;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;（&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;strong style="mso-bidi-font-weight: normal;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;）&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;O:p&gt;&lt;/O:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;strong style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US"&gt;&lt;O:p&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/O:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;而对于一个&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&lt;em style="mso-bidi-font-style: normal;"&gt;点&lt;/em&gt;&lt;/span&gt;&lt;strong style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;p&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，则可以找到一组坐标（&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;p1,p2,p3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;），使得&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;O:p&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/O:p&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;strong style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="font-size: 12pt;"&gt;p&lt;/span&gt;&lt;/strong&gt;&lt;span lang="EN-US" style="font-size: 12pt;"&gt; &amp;ndash; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt;"&gt;&lt;strong style="mso-bidi-font-weight: normal;"&gt;o&lt;/strong&gt; = p1 &lt;strong style="font-size: 12pt; mso-bidi-font-weight: normal;"&gt;a + &lt;/strong&gt;p2 &lt;strong style="mso-bidi-font-weight: normal;"&gt;b&lt;/strong&gt; + p3 &lt;strong&gt;c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&lt;strong&gt;（&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="font-family: Times New Roman;"&gt;2&lt;/span&gt;），&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&amp;nbsp;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-size: 12pt;"&gt;从上面对&lt;/span&gt;&lt;em style="font-size: 12pt; mso-bidi-font-style: normal;"&gt;向量&lt;/em&gt;&lt;span style="font-size: 12pt;"&gt;和&lt;/span&gt;&lt;em style="font-size: 12pt; mso-bidi-font-style: normal;"&gt;点&lt;/em&gt;&lt;span style="font-size: 12pt;"&gt;的表达，我们可以看出为了在坐标系中表示一个&lt;/span&gt;&lt;em style="font-size: 12pt; mso-bidi-font-style: normal;"&gt;点&lt;/em&gt;&lt;span style="font-size: 12pt;"&gt;（如&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;p&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;），我们把点的位置看作是对这个基的原点&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;o&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;所进行的一个位移，即一个向量&amp;mdash;&amp;mdash;&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;p &amp;ndash; o&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;（有的书中把这样的向量叫做&lt;em style="mso-bidi-font-style: normal;"&gt;位置向量&lt;/em&gt;&amp;mdash;&amp;mdash;起始于坐标原点的特殊向量），我们在表达这个向量的同时用等价的方式表达出了点&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;p：&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;strong style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US"&gt;p &lt;/span&gt;&lt;/strong&gt;&lt;span lang="EN-US"&gt;= &lt;strong style="mso-bidi-font-weight: normal;"&gt;o&lt;/strong&gt; + p1 &lt;strong style="mso-bidi-font-weight: normal;"&gt;a + &lt;/strong&gt;p2 &lt;strong style="mso-bidi-font-weight: normal;"&gt;b&lt;/strong&gt; + p3 &lt;strong style="mso-bidi-font-weight: normal;"&gt;c (3)&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: Times New Roman;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;O:p&gt;&amp;nbsp;&lt;/O:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;(1)(3)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;是坐标系下表达一个&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&lt;em style="mso-bidi-font-style: normal;"&gt;向量&lt;/em&gt;和&lt;em style="mso-bidi-font-style: normal;"&gt;点&lt;/em&gt;的不同表达方式。这里可以看出，虽然都是用代数分量的形式表达向量和点，但表达一个点比一个向量需要额外的信息。如果我写出一个代数分量表达&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;(1, 4, 7)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，谁知道它是个向量还是个点！&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;我们现在把（&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;）（&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;）写成矩阵的形式：&lt;span style="color: red; font-size: 12pt;"&gt;v = (v1 v2 v3 0)&amp;nbsp;X&amp;nbsp;(a b c o)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&lt;span style="color: red;"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;p = (p1 p2 p3 1) X (a b c o),&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;这里&lt;/span&gt;&lt;strong style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;(a,b,c,o)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;是坐标基矩阵，右边的列向量分别是向量&lt;/span&gt;&lt;strong style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;v&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;和点&lt;/span&gt;&lt;strong style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;p&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;在基下的坐标。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;这样，向量和点在同一个基下就有了不同的表达：&lt;em style="mso-bidi-font-style: normal;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;3D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal;"&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;向量&lt;/span&gt;&lt;/em&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的第&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;个代数分量是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，而&lt;/span&gt;&lt;em style="mso-bidi-font-style: normal;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;3D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal;"&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;点&lt;/span&gt;&lt;/em&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的第&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;个代数分量是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;。像这种这种用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;个代数分量表示&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;3D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;几何概念的方式是一种齐次坐标表示。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&lt;span style="font-size: 12pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;这样，上面的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;(1, 4, 7)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;如果写成（&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;1,4,7,0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;），它就是个向量；如果是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;(1,4,7,1)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，它就是个点。&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;下面是如何在普通坐标&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;(Ordinary Coordinate)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;和齐次坐标&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;(Homogeneous Coordinate)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;之间进行转换：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&amp;nbsp;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&amp;nbsp;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&amp;nbsp;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-size: 12pt;"&gt;(1)&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;从普通坐标转换成齐次坐标时&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;如果&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;(x,y,z)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;是个点，则变为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;(x,y,z,1);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;如果&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;(x,y,z)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;是个向量，则变为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;(x,y,z,0)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span lang="EN-US" style="font-size: 12pt;"&gt;(2)&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="color: red;"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-size: 12pt;"&gt;从齐次坐标转换成普通坐标时&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;如果是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;(x,y,z,1)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，则知道它是个点，变成&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;(x,y,z);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;如果是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;(x,y,z,0)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，则知道它是个向量，仍然变成&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;(x,y,z)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;以上是通过齐次坐标来区分向量和点的方式。从中可以思考得知，对于平移&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;T&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、旋转&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;R&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、缩放&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;S&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;这&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;个最常见的仿射变换，平移变换只对于点才有意义，因为普通向量没有位置概念，只有大小和方向.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size: 12pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-size: 12pt;"&gt;而旋转和缩放对于向量和点都有意义，你可以用类似上面齐次表示来检测。从中可以看出，齐次坐标用于仿射变换非常方便。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-family: Times New Roman;"&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;O:p&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&lt;span style="color: red;"&gt;&lt;span lang="EN-US"&gt;&lt;O:p&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;此外，对于一个普通坐标的&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&lt;em style="mso-bidi-font-style: normal;"&gt;点&lt;/em&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;P=(Px, Py, Pz)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，有对应的一族齐次坐标&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;(wPx, wPy, wPz, w)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，其中&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;w&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;不等于零&lt;/span&gt;&lt;/span&gt;&lt;/O:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;。比如，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;P(1, 4, 7)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的齐次坐&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;标有&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;(1, 4, 7, 1)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、（&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;2, 8, 14, 2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;）、（&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;-0.1, -0.4, -0.7, -0.1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;）等等&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;。&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;因此，如果把一个点从普通坐标变成齐次坐标，给&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;x,y,z&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;乘上同一个非零数&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;w&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，然后增加第&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;个分量&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;w&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;；如果把一个齐&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;次坐标转换成普通坐标，把&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;前三个坐标同时除以第&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;个坐标，然后去掉第&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;个分量。&lt;/span&gt;&lt;/span&gt;&lt;/O:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;O:p&gt;&amp;nbsp;&lt;/O:p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;由于齐次坐标使用了&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;个分量来表达&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;3D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;概念，使得平移变换可以使用矩阵进行，从而如&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 12pt;"&gt;F.S. Hill, JR&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;所说，仿射（线性）变换的进行&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;更加方便。由于图形硬件已经普遍地支持齐次坐标与矩阵乘法，因此更加促进了齐次坐标使用，使得它似乎成为图形学中的一个标准。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;以上很好的阐释了齐次坐标的作用及运用齐次坐标的好处。其实在图形学的理论中，很多已经被封装的好的API也是很有研究&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的，要想成为一名专业的计算机&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;图形学&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;学习者，除了知其然必须还得知其所以然。&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;这样在遇到问题的时候才能迅速定位问题的根源，从而解决问题。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;来源：&lt;a href="http://www.cnblogs.com/csyisong/archive/2008/12/09/1351372.html"&gt;http://www.cnblogs.com/csyisong/archive/2008/12/09/1351372.html&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/p&gt;&lt;O:p&gt;&lt;/O:p&gt;&lt;img src="http://www.cnblogs.com/eros/aggbug/1806433.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/eros/archive/2010/08/23/1806433.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/eros/archive/2009/06/15/1503333.html</id><title type="text">Learning XNA 3.0翻译连载--第六章 基本的人工智能(2)</title><summary type="text">译者：林公子出处：木木的二进制人生转载请注明作者和出处，谢谢！第六章 基本的人工智能(2)创建一个追逐精灵如同之前提到过的，当由计算机控制对象时，任何游戏的目标是使得对象表现的智能程度让玩家无法分辨是由人类在控制还是计算机在控制。很明显的，我们远远没有做到这一点。您添加的自动精灵仅仅只是沿着直线前进。虽然您对SpriteManager做了些很棒的工作，我们还没有讨论如何去改善自动精灵的移动。让我们...</summary><published>2009-06-14T17:45:00Z</published><updated>2009-06-14T17:45:00Z</updated><author><name>林公子</name><uri>http://www.cnblogs.com/eros/</uri></author><link rel="alternate" href="http://www.cnblogs.com/eros/archive/2009/06/15/1503333.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/eros/archive/2009/06/15/1503333.html"/><content type="text">译者：林公子出处：木木的二进制人生转载请注明作者和出处，谢谢！第六章 基本的人工智能(2)创建一个追逐精灵如同之前提到过的，当由计算机控制对象时，任何游戏的目标是使得对象表现的智能程度让玩家无法分辨是由人类在控制还是计算机在控制。很明显的，我们远远没有做到这一点。您添加的自动精灵仅仅只是沿着直线前进。虽然您对SpriteManager做了些很棒的工作，我们还没有讨论如何去改善自动精灵的移动。让我们...</content></entry><entry><id>http://www.cnblogs.com/eros/archive/2009/06/15/1503315.html</id><title type="text">Learning XNA 3.0翻译连载--第六章 基本的人工智能(1)</title><summary type="text">译者：林公子出处：木木的二进制人生转载请注明作者和出处，谢谢！第六章 基本的人工智能人工智能，哈？或许听起来有一点点吓人和酷。我们在之前的章节中接触到了人工智能这个概念，不过现在让我们看看人工智能到底是什么。自从计算机时代开始，研究者们就开始考虑和讨论让机器的行动更像人类或给它们某种形式人工智能的方法。整个人工智能科学最大的问题就是实际上没有办法来定义“智能”。是什么使...</summary><published>2009-06-14T17:17:00Z</published><updated>2009-06-14T17:17:00Z</updated><author><name>林公子</name><uri>http://www.cnblogs.com/eros/</uri></author><link rel="alternate" href="http://www.cnblogs.com/eros/archive/2009/06/15/1503315.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/eros/archive/2009/06/15/1503315.html"/><content type="text">译者：林公子出处：木木的二进制人生转载请注明作者和出处，谢谢！第六章 基本的人工智能人工智能，哈？或许听起来有一点点吓人和酷。我们在之前的章节中接触到了人工智能这个概念，不过现在让我们看看人工智能到底是什么。自从计算机时代开始，研究者们就开始考虑和讨论让机器的行动更像人类或给它们某种形式人工智能的方法。整个人工智能科学最大的问题就是实际上没有办法来定义“智能”。是什么使...</content></entry><entry><id>http://www.cnblogs.com/eros/archive/2009/05/07/1452284.html</id><title type="text">Learning XNA 3.0翻译连载--第5章 声音和音效</title><summary type="text">译者：林公子出处：木木的二进制人生转载请注明作者和出处，谢谢！第五章 声音和音效好了，您已经有了一个可靠的设计并准备继续前进了。在上一章的末尾，您的成果看起来已经像一个游戏了：您有一个可以受用户控制的在屏幕上移动的精灵，并且一旦它和某一个"敌人"精灵接触，游戏将结束。缺陷就是敌方精灵不会移动或干些什么，所以这个游戏并不是那么棒——但虽然如此，是一个好的开始。现在，让我们集中...</summary><published>2009-05-07T15:03:00Z</published><updated>2009-05-07T15:03:00Z</updated><author><name>林公子</name><uri>http://www.cnblogs.com/eros/</uri></author><link rel="alternate" href="http://www.cnblogs.com/eros/archive/2009/05/07/1452284.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/eros/archive/2009/05/07/1452284.html"/><content type="text">译者：林公子出处：木木的二进制人生转载请注明作者和出处，谢谢！第五章 声音和音效好了，您已经有了一个可靠的设计并准备继续前进了。在上一章的末尾，您的成果看起来已经像一个游戏了：您有一个可以受用户控制的在屏幕上移动的精灵，并且一旦它和某一个"敌人"精灵接触，游戏将结束。缺陷就是敌方精灵不会移动或干些什么，所以这个游戏并不是那么棒——但虽然如此，是一个好的开始。现在，让我们集中...</content></entry><entry><id>http://www.cnblogs.com/eros/archive/2009/04/28/1445638.html</id><title type="text">Learning XNA 3.0翻译连载--第4章 应用面向对象设计</title><summary type="text">译者：林公子出处：木木的二进制人生转载请注明作者和出处，谢谢！第四章 应用面向对象设计恭喜！在上一章的末尾您已经初步建立了一个基本的游戏。不过到目前为止我们编码的方式用作教学演示不错，从设计的角度来说是非常低效的。一个好的设计总是能提升开发效率的。您可能注意到要添加一个新的精灵到项目中是件多么棘手的事情。特别是当您需要添加一个动画物体，移动并使用碰撞检测，有许多变量和代码需要复制粘贴，结果您的代码...</summary><published>2009-04-28T11:56:00Z</published><updated>2009-04-28T11:56:00Z</updated><author><name>林公子</name><uri>http://www.cnblogs.com/eros/</uri></author><link rel="alternate" href="http://www.cnblogs.com/eros/archive/2009/04/28/1445638.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/eros/archive/2009/04/28/1445638.html"/><content type="text">译者：林公子出处：木木的二进制人生转载请注明作者和出处，谢谢！第四章 应用面向对象设计恭喜！在上一章的末尾您已经初步建立了一个基本的游戏。不过到目前为止我们编码的方式用作教学演示不错，从设计的角度来说是非常低效的。一个好的设计总是能提升开发效率的。您可能注意到要添加一个新的精灵到项目中是件多么棘手的事情。特别是当您需要添加一个动画物体，移动并使用碰撞检测，有许多变量和代码需要复制粘贴，结果您的代码...</content></entry><entry><id>http://www.cnblogs.com/eros/archive/2009/04/17/1437656.html</id><title type="text">Learning XNA 3.0翻译连载--第3章 用户输入和碰撞检测</title><summary type="text">译者：林公子出处：木木的二进制人生转载请注明作者和出处，谢谢！第三章用户输入和碰撞检测虽然看到一组漂亮的旋转圆环由您自己实现的时候是很酷的事情，但您还有漫漫长路要走。尽管圆环动画看起来很漂亮，但是它没有干任何事情，并且它并不受您的控制。一个和玩家没有交互的游戏有什么乐趣可言呢？在这一章里，我们会研究用户输入和碰撞检测来使您的游戏除了看起来很漂亮外再干点有意义的事情。这一章将会用到第2章末尾编写的代...</summary><published>2009-04-16T16:19:00Z</published><updated>2009-04-16T16:19:00Z</updated><author><name>林公子</name><uri>http://www.cnblogs.com/eros/</uri></author><link rel="alternate" href="http://www.cnblogs.com/eros/archive/2009/04/17/1437656.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/eros/archive/2009/04/17/1437656.html"/><content type="text">译者：林公子出处：木木的二进制人生转载请注明作者和出处，谢谢！第三章用户输入和碰撞检测虽然看到一组漂亮的旋转圆环由您自己实现的时候是很酷的事情，但您还有漫漫长路要走。尽管圆环动画看起来很漂亮，但是它没有干任何事情，并且它并不受您的控制。一个和玩家没有交互的游戏有什么乐趣可言呢？在这一章里，我们会研究用户输入和碰撞检测来使您的游戏除了看起来很漂亮外再干点有意义的事情。这一章将会用到第2章末尾编写的代...</content></entry><entry><id>http://www.cnblogs.com/eros/archive/2009/04/13/1434529.html</id><title type="text">Learning XNA 3.0翻译连载--第2章 精灵的乐趣(2)</title><summary type="text">译者：林公子出处：木木的二进制人生转载请注明作者和出处，谢谢！第二章 精灵的乐趣(2)透明度及其他当往屏幕上绘制多个精灵的时候，您可以（而且也应该，处于速度的考虑）在一个SpriteBatch.Begin和SpriteBatch.End调用对中绘制尽可能多的精灵。实际上您应该做的是在游戏中用一个SpriteBatch对象然后在一个调用对绘制所有的2D图像。就像您在图2-4中看到的那样，我使...</summary><published>2009-04-13T02:19:00Z</published><updated>2009-04-13T02:19:00Z</updated><author><name>林公子</name><uri>http://www.cnblogs.com/eros/</uri></author><link rel="alternate" href="http://www.cnblogs.com/eros/archive/2009/04/13/1434529.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/eros/archive/2009/04/13/1434529.html"/><content type="text">译者：林公子出处：木木的二进制人生转载请注明作者和出处，谢谢！第二章 精灵的乐趣(2)透明度及其他当往屏幕上绘制多个精灵的时候，您可以（而且也应该，处于速度的考虑）在一个SpriteBatch.Begin和SpriteBatch.End调用对中绘制尽可能多的精灵。实际上您应该做的是在游戏中用一个SpriteBatch对象然后在一个调用对绘制所有的2D图像。就像您在图2-4中看到的那样，我使...</content></entry><entry><id>http://www.cnblogs.com/eros/archive/2009/04/13/1434527.html</id><title type="text">Learning XNA 3.0翻译连载--第2章 精灵的乐趣(1)</title><summary type="text">译者：林公子出处：木木的二进制人生转载请注明作者和出处，谢谢！第二章 精灵的乐趣(1)译注：精灵，原文为Sprite，本文译作精灵，Sprite指场景中用来表示角色或其他物体的2D或3D图像。具体的论述可以看风海迷沙的文章以便得到关于Sprite一词准更准确的认识：关于Sprite一词的译法感谢风海迷沙的专业精神，让我受益良多。在上一章中，我提到您创建的项目的简单蓝色背景下实际上有很多事正在发生。...</summary><published>2009-04-13T02:17:00Z</published><updated>2009-04-13T02:17:00Z</updated><author><name>林公子</name><uri>http://www.cnblogs.com/eros/</uri></author><link rel="alternate" href="http://www.cnblogs.com/eros/archive/2009/04/13/1434527.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/eros/archive/2009/04/13/1434527.html"/><content type="text">译者：林公子出处：木木的二进制人生转载请注明作者和出处，谢谢！第二章 精灵的乐趣(1)译注：精灵，原文为Sprite，本文译作精灵，Sprite指场景中用来表示角色或其他物体的2D或3D图像。具体的论述可以看风海迷沙的文章以便得到关于Sprite一词准更准确的认识：关于Sprite一词的译法感谢风海迷沙的专业精神，让我受益良多。在上一章中，我提到您创建的项目的简单蓝色背景下实际上有很多事正在发生。...</content></entry></feed>
