<?xml version="1.0" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="css/rss.xslt"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Alchemy3D - Flash 3D Engine - 3D Programming</title><link>http://www.niuniuzhu.cn/blog/</link><description> - </description><generator>RainbowSoft Studio Z-Blog 1.8 Arwen Build 90619</generator><language>zh-CN</language><copyright>CopyRight 2008 - 2009 Alchemy3D.CN / NiuNiuZhu.CN粤ICP备08126271号</copyright><pubDate>Tue, 07 Sep 2010 17:47:38 +0800</pubDate><item><title>透视投影变换推导(续)</title><author>a@b.com (niuniuzhu)</author><link>http://www.niuniuzhu.cn/blog/post/5.html</link><pubDate>Fri, 07 Aug 2009 11:15:16 +0800</pubDate><guid>http://www.niuniuzhu.cn/blog/post/5.html</guid><description><![CDATA[<p>在上一篇文章中我们讨论了透视投影变换的原理，分析了OpenGL所使用的透视投影矩阵的生成方法。正如我们所说，不同的图形API因为左右手坐标系、行向量列向量矩阵以及变换范围等等的不同导致了矩阵的差异，可以有几十个不同的透视投影矩阵，但它们的原理大同小异。这次我们准备讨论一下Direct3D（以下简称D3D）以及J2ME平台上的JSR184（M3G）（以下简称M3G）的透视投影矩阵，主要出于以下几个目的：</p><p>（1）&nbsp;我们在写图形引擎的时候需要采用不同的图形API实现，当前主要是OpenGL和D3D。虽然二者的推导极为相似，但D3D的自身特点导致了一些地方仍然需要澄清。</p><p>（2）&nbsp;DirectX SDK的手册中有关于透视投影矩阵的一些说明，但并不详细，甚至有一些错误，从而使初学者理解起来变得困难，而这正是本文写作的目的。</p><p>（3）&nbsp;M3G是J2ME平台上的3D开发包，采用了OpenGL作为底层标准进行封装。它的透视投影矩阵使用OpenGL的环境但又进行了简化，值得一提。</p><p>本文努力让读者清楚地了解D3D与M3G透视投影矩阵的原理，从而能够知道它与OpenGL的一些差别，为构建跨API的图形引擎打好基础。需要指出的一点是为了完全理解本文的内容，请读者先理解上一篇文章《深入探索透视投影变换》的内容，因为OpenGL和它们的透视投影矩阵的原理非常相似，因此这里不会像上一篇文章从基础知识讲起，而是对比它们的差异来推导变换矩阵。我们开始！</p>]]></description><category>3D Programming</category><comments>http://www.niuniuzhu.cn/blog/post/5.html#comment</comments><wfw:comment>http://www.niuniuzhu.cn/blog/</wfw:comment><wfw:commentRss>http://www.niuniuzhu.cn/blog/feed.asp?cmt=5</wfw:commentRss><trackback:ping>http://www.niuniuzhu.cn/blog/cmd.asp?act=tb&amp;id=5&amp;key=42a78abb</trackback:ping></item><item><title>透视投影变换推导</title><author>a@b.com (niuniuzhu)</author><link>http://www.niuniuzhu.cn/blog/post/4.html</link><pubDate>Fri, 07 Aug 2009 10:59:52 +0800</pubDate><guid>http://www.niuniuzhu.cn/blog/post/4.html</guid><description><![CDATA[<p>透视投影是3D固定流水线的重要组成部分，是将相机空间中的点从视锥体(frustum)变换到规则观察体(Canonical View Volume)中，待裁剪完毕后进行透视除法的行为。在算法中它是通过透视矩阵乘法和透视除法两步完成的。</p><p>透视投影变换是令很多刚刚进入3D图形领域的开发人员感到迷惑乃至神秘的一个图形技术。其中的理解困难在于步骤繁琐，对一些基础知识过分依赖，一旦对它们中的任何地方感到陌生，立刻导致理解停止不前。</p><p>没错，主流的3D APIs如OpenGL、D3D的确把具体的透视投影细节封装起来，比如</p><p>gluPerspective(&hellip;)就可以根据输入生成一个透视投影矩阵。而且在大多数情况下不需要了解具体的内幕算法也可以完成任务。但是你不觉得，如果想要成为一个职业的图形程序员或游戏开发者，就应该真正降伏透视投影这个家伙么？我们先从必需的基础知识着手，一步一步深入下去（这些知识在很多地方可以单独找到，但我从来没有在同一个地方全部找到，但是你现在找到了）。</p>]]></description><category>3D Programming</category><comments>http://www.niuniuzhu.cn/blog/post/4.html#comment</comments><wfw:comment>http://www.niuniuzhu.cn/blog/</wfw:comment><wfw:commentRss>http://www.niuniuzhu.cn/blog/feed.asp?cmt=4</wfw:commentRss><trackback:ping>http://www.niuniuzhu.cn/blog/cmd.asp?act=tb&amp;id=4&amp;key=0a9f33c6</trackback:ping></item><item><title>高级碰撞检测技术</title><author>a@b.com (niuniuzhu)</author><link>http://www.niuniuzhu.cn/blog/post/2.html</link><pubDate>Tue, 04 Aug 2009 14:56:15 +0800</pubDate><guid>http://www.niuniuzhu.cn/blog/post/2.html</guid><description><![CDATA[<p>　　自从计算机游戏出现以来，程序员就不断地想办法来更精确地模拟现实世界。就拿乒乓游戏为例子（译者：Pong&mdash;被誉为电子游戏的祖先，有幸见过一次：），能见到祖先做的游戏感觉真是爽啊，想看的可以到FTP上下载&ldquo;地球故事&rdquo;就可以看到了：），游戏中有一个象征性的小方块（球）和两支拍子，游戏者需要在恰当的时间将拍子移动到恰当的地点，将小球反弹回去。这个基本操作的背后（以现在的标准来看）就是最原初的碰撞检测了。今天的游戏比&ldquo;乒乓&rdquo;要高级得多，并且基本上是基于3D的。3D游戏中的碰撞检测比&ldquo;乒乓&rdquo;游戏里的要更加难实现。玩一些早期模拟飞行游戏的体验向我们展现出糟糕的碰撞检测是如何毁灭一个游戏的。当穿过一座大山的尖顶的时候仍然活着，感觉很不真实。即便是现在的一些游戏也还是有碰撞上的问题，许多玩家曾经失望地看着他们喜爱的英雄或女英雄的部分身体穿进了墙里。甚至更糟的是，许多玩家都有过这样糟糕的体验，就是被那些离得很远的子弹或火箭击中。因为游戏者们要求提升真实性，我们开发者就不得不绞尽脑汁想办法让我们的游戏世界尽可能地接近现实世界。<br />...</p>]]></description><category>3D Programming</category><comments>http://www.niuniuzhu.cn/blog/post/2.html#comment</comments><wfw:comment>http://www.niuniuzhu.cn/blog/</wfw:comment><wfw:commentRss>http://www.niuniuzhu.cn/blog/feed.asp?cmt=2</wfw:commentRss><trackback:ping>http://www.niuniuzhu.cn/blog/cmd.asp?act=tb&amp;id=2&amp;key=35832bcb</trackback:ping></item><item><title>理解万向节死锁(Gimbal Lock) </title><author>a@b.com (niuniuzhu)</author><link>http://www.niuniuzhu.cn/blog/post/1.html</link><pubDate>Tue, 04 Aug 2009 14:55:28 +0800</pubDate><guid>http://www.niuniuzhu.cn/blog/post/1.html</guid><description><![CDATA[<p>可能有点不好理解。让我们看个现实中的场景。</p><p>假如我们有一个望远镜和一个用来放望远镜的三脚架，（我们将）三脚架放在地面上，使支撑望远镜的三脚架的顶部是平行于地平面（参考平面）的，以便使得竖向的旋转轴（记为x轴）是完全地垂直于地平面的。现在，我们就可以将望远镜饶x轴旋转360度，从而观察（以望远镜为中心的）水平包围圈的所有方向。通常将正北朝向方位角度记为0度方位角。第二个坐标轴，即平行于地平面的横向的坐标轴（记为y轴）使得望远镜可以饶着它上下旋转，通常将地平面朝向的仰角记为0度，这样，望远镜可以向上仰+90度指向天顶，或者向下-90度指向脚底。</p>...]]></description><category>3D Programming</category><comments>http://www.niuniuzhu.cn/blog/post/1.html#comment</comments><wfw:comment>http://www.niuniuzhu.cn/blog/</wfw:comment><wfw:commentRss>http://www.niuniuzhu.cn/blog/feed.asp?cmt=1</wfw:commentRss><trackback:ping>http://www.niuniuzhu.cn/blog/cmd.asp?act=tb&amp;id=1&amp;key=f35f4964</trackback:ping></item><item><title>透视投影，与Z BUFFER求值</title><author>a@b.com (niuniuzhu)</author><link>http://www.niuniuzhu.cn/blog/post/8.html</link><pubDate>Fri, 31 Jul 2009 16:48:41 +0800</pubDate><guid>http://www.niuniuzhu.cn/blog/post/8.html</guid><description><![CDATA[<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 为什么有透视。因为眼球是个透镜。假如地球生物进化的都靠超声波探测空间，那也许眼睛就不会有变成球，而是其他形状...<br />为什么有人玩3D头晕？其中一个重要的作用是，眼球不完全是个透镜。所以当视野大于60度，屏幕四周投影的变形就比眼球投影视网膜利害多。而且人脑习惯了矫正眼球投影的信息。突然有个屏幕上粗糙的模拟眼球成像，大脑还真一时适应不了。</font></p><p><font face="Verdana">&nbsp;&nbsp;&nbsp; Z BUFFER数值计算，以及PERSPECTIVE PROJECTION MATRIX设置，使用D3D或者OPENGL，可以直接让显卡完成这些工作。但是弄清Z BUFFER如何计算，以及PROJECT MATRIX的原理。对于进行各种高级图像处理，非常有用。例如shadowmap的应用。目前为了得到好的shadowmap，很多人在如何加大shadowmap精度做了很多努力（改变生成shadowmap时的perspective project matrix来生成精度更合理的shadowmap） 。比如透视空间的perspective shadow map，light空间的Light-space perspective shadow，perspective shadowmap变种Trapezoidal shadow maps，改正交投影为对数参数投影的 Logarithmic Shadow Maps。另外，Doom3中shadow volume采用的无限远平面透视矩阵绘制stencil shadow volume。都需要对perspective projection有透彻了解。</font></p>...]]></description><category>3D Programming</category><comments>http://www.niuniuzhu.cn/blog/post/8.html#comment</comments><wfw:comment>http://www.niuniuzhu.cn/blog/</wfw:comment><wfw:commentRss>http://www.niuniuzhu.cn/blog/feed.asp?cmt=8</wfw:commentRss><trackback:ping>http://www.niuniuzhu.cn/blog/cmd.asp?act=tb&amp;id=8&amp;key=09a946ad</trackback:ping></item></channel></rss>
