<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ATEGPU &#187; 透视投影变换</title>
	<atom:link href="http://www.ategpu.com/tag/%e9%80%8f%e8%a7%86%e6%8a%95%e5%bd%b1%e5%8f%98%e6%8d%a2/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ategpu.com</link>
	<description>Embedded GPU With OpenGL ES API</description>
	<lastBuildDate>Thu, 24 Nov 2011 05:46:54 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>深入探索透视投影变换</title>
		<link>http://www.ategpu.com/2009/10/06/%e6%b7%b1%e5%85%a5%e6%8e%a2%e7%b4%a2%e9%80%8f%e8%a7%86%e6%8a%95%e5%bd%b1%e5%8f%98%e6%8d%a2.html</link>
		<comments>http://www.ategpu.com/2009/10/06/%e6%b7%b1%e5%85%a5%e6%8e%a2%e7%b4%a2%e9%80%8f%e8%a7%86%e6%8a%95%e5%bd%b1%e5%8f%98%e6%8d%a2.html#comments</comments>
		<pubDate>Tue, 06 Oct 2009 10:21:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[透视投影变换]]></category>

		<guid isPermaLink="false">http://www.ategpu.com/2009/10/06/%e6%b7%b1%e5%85%a5%e6%8e%a2%e7%b4%a2%e9%80%8f%e8%a7%86%e6%8a%95%e5%bd%b1%e5%8f%98%e6%8d%a2.html</guid>
		<description><![CDATA[好文章，记得刚开始接触ogl时，阅读过此文，当时看的云里雾里。现在看来，不禁要称赞作者，能写的如此详细。感谢作者的好文！
深入探索透视投影变换
透视投影是3D固定流水线的重要组成部分，是将相机空间中的点从视锥体(frustum)变换到规则观察体(Canonical View Volume)中，待裁剪完毕后进行透视除法的行为。在算法中它是通过透视矩阵乘法和透视除法两步完成的。
透视投影变换是令很多刚刚进入3D图形领域的开发人员感到迷惑乃至神秘的一个图形技术。其中的理解困难在于步骤繁琐，对一些基础知识过分依赖，一旦对它们中的任何地方感到陌生，立刻导致理解停止不前。
没错，主流的3D APIs如OpenGL、 D3D的确把具体的透视投影细节封装起来，比如gluPerspective(…)就可以根据输入生成一个透视投影矩阵。而且在大多数情况下不需要了解具体的内幕算法也可以完成任务。但是你不觉得，如果想要成为一个职业的图形程序员或游戏开发者，就应该真正降伏透视投影这个家伙么？我们先从必需的基础知识着手，一步一步深入下去（这些知识在很多地方可以单独找到，但我从来没有在同一个地方全部找到，但是你现在找到了J）。

我们首先介绍两个必须掌握的知识。有了它们，我们才不至于在理解透视投影变换的过程中迷失方向。 齐次坐标表示 透视投影变换是在齐次坐标下进行的，而齐次坐标本身就是一个令人迷惑的概念，这里我们先把它理解清楚。 对于一个向量v以及基oabc，

可以找到一组坐标(v1,v2,v3)，使得 v = v1 a + v2 b + v3 c （1） 而对于一个点p，则可以找到一组坐标（p1,p2,p3），使得 p &#8211; o = p1 a + p2 b + p3 c （2）
从上面对向量和点的表达，我们可以看出为了在坐标系中表示一个点（如p），我们把点的位置看作是对这个基的原点o所进行的一个位移，即一个向量&#8211; p &#8211; o（有的书中把这样的向量叫做位置向量&#8211;起始于坐标原点的特殊向量），我们在表达这个向量的同时用等价的方式表达出了点p: p = o + p1 a + p2 b + p3 c (3)
(1)(3)是坐标系下表达一个向量和点的不同表达方式。这里可以看出，虽然都是用代数分量的形式表达向量和点，但表达一个点比一个向量需要额外的信息。如果我写出一个代数分量表达(1, 4, 7)，谁知道它是个向量还是个点！
我们现在把（1）（3）写成矩阵的形式：

这里(a,b,c,o)是坐标基矩阵，右边的列向量分别是向量v和点p在基下的坐标。这样，向量和点在同一个基下就有了不同的表达：3D向量的第4个代数分量是0，而3D点的第4个代数分量是1。像这种这种用4个代数分量表示3D几何概念的方式是一种齐次坐标表示。 &#8220;齐次坐标表示是计算机图形学的重要手段之一，它既能够用来明确区分向量和点，同时也更易用于进行仿射（线性）几何变换。&#8221;&#8211; F.S. Hill, JR [...]]]></description>
		<wfw:commentRss>http://www.ategpu.com/2009/10/06/%e6%b7%b1%e5%85%a5%e6%8e%a2%e7%b4%a2%e9%80%8f%e8%a7%86%e6%8a%95%e5%bd%b1%e5%8f%98%e6%8d%a2.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

