﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><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>博客园-胡说八道</title><link>http://www.cnblogs.com/sevecol/</link><description>学而不思则罔，思而不学则殆</description><language>zh-cn</language><lastBuildDate>Sat, 17 May 2008 16:05:43 GMT</lastBuildDate><pubDate>Sat, 17 May 2008 16:05:43 GMT</pubDate><ttl>60</ttl><item><title>NVIDIA GDC2006 presentation </title><link>http://www.cnblogs.com/sevecol/archive/2006/04/03/365206.html</link><dc:creator>胡说八道</dc:creator><author>胡说八道</author><pubDate>Sun, 02 Apr 2006 18:19:00 GMT</pubDate><guid>http://www.cnblogs.com/sevecol/archive/2006/04/03/365206.html</guid><wfw:comment>http://www.cnblogs.com/sevecol/comments/365206.html</wfw:comment><comments>http://www.cnblogs.com/sevecol/archive/2006/04/03/365206.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/sevecol/comments/commentRss/365206.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/sevecol/services/trackbacks/365206.html</trackback:ping><description><![CDATA[连接:<a href="ftp://download.nvidia.com/developer/presentations/2006/gdc">ftp://download.nvidia.com/developer/presentations/2006/gdc</a><br><br>
<img src ="http://www.cnblogs.com/sevecol/aggbug/365206.html?type=1" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://sevecol.cnblogs.com/" target="_blank">胡说八道</a> 2006-04-03 02:19 <a href="http://www.cnblogs.com/sevecol/archive/2006/04/03/365206.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ATI GDC2006 Presentations </title><link>http://www.cnblogs.com/sevecol/archive/2006/04/02/364875.html</link><dc:creator>胡说八道</dc:creator><author>胡说八道</author><pubDate>Sun, 02 Apr 2006 06:30:00 GMT</pubDate><guid>http://www.cnblogs.com/sevecol/archive/2006/04/02/364875.html</guid><wfw:comment>http://www.cnblogs.com/sevecol/comments/364875.html</wfw:comment><comments>http://www.cnblogs.com/sevecol/archive/2006/04/02/364875.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/sevecol/comments/commentRss/364875.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/sevecol/services/trackbacks/364875.html</trackback:ping><description><![CDATA[连接:<a href="http://www.ati.com/developer/techpapers.html#gdc06">http://www.ati.com/developer/techpapers.html#gdc06<br></a><br>
<img src ="http://www.cnblogs.com/sevecol/aggbug/364875.html?type=1" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://sevecol.cnblogs.com/" target="_blank">胡说八道</a> 2006-04-02 14:30 <a href="http://www.cnblogs.com/sevecol/archive/2006/04/02/364875.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GDC 2006 Microsoft Developer Day Presentations</title><link>http://www.cnblogs.com/sevecol/archive/2006/03/25/358847.html</link><dc:creator>胡说八道</dc:creator><author>胡说八道</author><pubDate>Sat, 25 Mar 2006 14:06:00 GMT</pubDate><guid>http://www.cnblogs.com/sevecol/archive/2006/03/25/358847.html</guid><wfw:comment>http://www.cnblogs.com/sevecol/comments/358847.html</wfw:comment><comments>http://www.cnblogs.com/sevecol/archive/2006/03/25/358847.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/sevecol/comments/commentRss/358847.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/sevecol/services/trackbacks/358847.html</trackback:ping><description><![CDATA[<a name=Intro>DirectX Presentations</a><br><br>连接:<a href="http://msdn.microsoft.com/directx/presentations/">http://msdn.microsoft.com/directx/presentations/</a><br><br>
<img src ="http://www.cnblogs.com/sevecol/aggbug/358847.html?type=1" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://sevecol.cnblogs.com/" target="_blank">胡说八道</a> 2006-03-25 22:06 <a href="http://www.cnblogs.com/sevecol/archive/2006/03/25/358847.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>天空的颜色和大气散射</title><link>http://www.cnblogs.com/sevecol/archive/2005/12/16/298539.html</link><dc:creator>胡说八道</dc:creator><author>胡说八道</author><pubDate>Fri, 16 Dec 2005 07:08:00 GMT</pubDate><guid>http://www.cnblogs.com/sevecol/archive/2005/12/16/298539.html</guid><wfw:comment>http://www.cnblogs.com/sevecol/comments/298539.html</wfw:comment><comments>http://www.cnblogs.com/sevecol/archive/2005/12/16/298539.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnblogs.com/sevecol/comments/commentRss/298539.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/sevecol/services/trackbacks/298539.html</trackback:ping><description><![CDATA[<P>天空的颜色采用"A Practical Analytic Model for Daylight"建造的模型计算。<BR>地形颜色的大气散射采用"Rendering Outdoor Lght Scattering in real Time"介绍的方法计算。<BR><BR>A Practical Analytic Model for Daylight中的模型通过太阳的方位，Zenith的颜色(Yxy空间)来计算天空中<BR>没个方向的颜色。由于Shader的限制，在我的实现里，只是简单的在RGB空间里面做了scale。<BR><BR>1 吸收和Out-Scattering<BR><IMG height=596 hspace=5 src="http://www.cnblogs.com/images/cnblogs_com/sevecol/吸收.jpg" width=798 align=baseline><BR>2 太阳的In-Scattering<BR><IMG height=596 hspace=5 src="http://www.cnblogs.com/images/cnblogs_com/sevecol/太阳的入散射.jpg" width=798 align=baseline><BR>3 综合<BR><IMG height=596 hspace=5 src="http://www.cnblogs.com/images/cnblogs_com/sevecol/最终.jpg" width=798 align=baseline><BR></P><img src ="http://www.cnblogs.com/sevecol/aggbug/298539.html?type=1" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://sevecol.cnblogs.com/" target="_blank">胡说八道</a> 2005-12-16 15:08 <a href="http://www.cnblogs.com/sevecol/archive/2005/12/16/298539.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>引擎渲染截图 -地形</title><link>http://www.cnblogs.com/sevecol/archive/2005/08/20/219081.html</link><dc:creator>胡说八道</dc:creator><author>胡说八道</author><pubDate>Sat, 20 Aug 2005 06:36:00 GMT</pubDate><guid>http://www.cnblogs.com/sevecol/archive/2005/08/20/219081.html</guid><wfw:comment>http://www.cnblogs.com/sevecol/comments/219081.html</wfw:comment><comments>http://www.cnblogs.com/sevecol/archive/2005/08/20/219081.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/sevecol/comments/commentRss/219081.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/sevecol/services/trackbacks/219081.html</trackback:ping><description><![CDATA[几何采用GeoMipMap样式的LOD<BR>渲染采用<BR>1 Absorb Map(Alpha&nbsp;for&nbsp;AO)<BR>2 1-4 layers Detail Map<BR>3 Diffuse Cube Map<BR>4 Shadow Map<BR>5 Atmospheric Scattering <IMG height=596 hspace=5 src="http://www.cnblogs.com/images/cnblogs_com/sevecol/terrain.jpg" width=797 align=baseline><IMG height=596 hspace=5 src="http://www.cnblogs.com/images/cnblogs_com/sevecol/terrain3.jpg" width=799 align=baseline>&nbsp; <img src ="http://www.cnblogs.com/sevecol/aggbug/219081.html?type=1" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://sevecol.cnblogs.com/" target="_blank">胡说八道</a> 2005-08-20 14:36 <a href="http://www.cnblogs.com/sevecol/archive/2005/08/20/219081.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>引擎渲染截图</title><link>http://www.cnblogs.com/sevecol/archive/2005/08/08/210279.html</link><dc:creator>胡说八道</dc:creator><author>胡说八道</author><pubDate>Mon, 08 Aug 2005 12:44:00 GMT</pubDate><guid>http://www.cnblogs.com/sevecol/archive/2005/08/08/210279.html</guid><wfw:comment>http://www.cnblogs.com/sevecol/comments/210279.html</wfw:comment><comments>http://www.cnblogs.com/sevecol/archive/2005/08/08/210279.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/sevecol/comments/commentRss/210279.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/sevecol/services/trackbacks/210279.html</trackback:ping><description><![CDATA[人物渲染使用PRT,每个顶点保存16个系数<BR>with Diffuse<BR><IMG height=300 hspace=5 src="http://www.cnblogs.com/images/cnblogs_com/sevecol/act3.jpg" width=403 align=baseline><IMG height=300 hspace=0 src="http://www.cnblogs.com/images/cnblogs_com/sevecol/act2.jpg" width=400><BR>without Diffuse<BR><IMG height=300 hspace=5 src="http://www.cnblogs.com/images/cnblogs_com/sevecol/act4.jpg" width=399 align=baseline><BR><IMG height=300 hspace=5 src="http://www.cnblogs.com/images/cnblogs_com/sevecol/act5.jpg" width=403 align=baseline><BR><img src ="http://www.cnblogs.com/sevecol/aggbug/210279.html?type=1" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://sevecol.cnblogs.com/" target="_blank">胡说八道</a> 2005-08-08 20:44 <a href="http://www.cnblogs.com/sevecol/archive/2005/08/08/210279.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Trapezoidal Shadow Map(3) </title><link>http://www.cnblogs.com/sevecol/archive/2005/08/04/207662.html</link><dc:creator>胡说八道</dc:creator><author>胡说八道</author><pubDate>Thu, 04 Aug 2005 13:02:00 GMT</pubDate><guid>http://www.cnblogs.com/sevecol/archive/2005/08/04/207662.html</guid><wfw:comment>http://www.cnblogs.com/sevecol/comments/207662.html</wfw:comment><comments>http://www.cnblogs.com/sevecol/archive/2005/08/04/207662.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnblogs.com/sevecol/comments/commentRss/207662.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/sevecol/services/trackbacks/207662.html</trackback:ping><description><![CDATA[<P><IMG height=597 hspace=5 src="http://www.cnblogs.com/images/cnblogs_com/sevecol/tsm3.jpg" width=800 align=baseline><BR><IMG height=595 hspace=5 src="http://www.cnblogs.com/images/cnblogs_com/sevecol/tsm4.jpg" width=798 align=baseline></P>
<P><IMG height=598 hspace=5 src="http://www.cnblogs.com/images/cnblogs_com/sevecol/tsm5.jpg" width=799 align=baseline></P>
<P><IMG height=596 hspace=5 src="http://www.cnblogs.com/images/cnblogs_com/sevecol/tsm6.jpg" width=796 align=baseline>上面图中右上角为Shadow Map.<BR><BR>使用TSM做Self-Shadow时需要注意ShadowMap保存和第二步用于比较的Depth不要转换到trapezoidal space中,只转换x和y就行了.<BR><BR>计算trapezoidal和LPPS-&gt;trapezoidal space的代码修正后为:<BR>&nbsp;HRESULT CTrapezoidalShadowMap::ComputeTrapezoidalMatrix(D3DXMATRIX&amp; matrix,D3DXVECTOR3&amp; topl,D3DXVECTOR3&amp; topr,D3DXVECTOR3&amp; bottoml,D3DXVECTOR3&amp; bottomr,D3DXVECTOR3&amp; intersection)<BR>{<BR>&nbsp;// 平移梯形使得两侧边交点到LightProjectSpace的中点<BR>&nbsp;D3DXMatrixTranslation(&amp;matrix,-intersection.x,-intersection.y,0);<BR>&nbsp;<BR>&nbsp;// 旋转梯形使得TopLine和LightProjectSpace的x轴重合<BR>&nbsp;D3DXVECTOR3 t_topline=(topl-topr);<BR>&nbsp;D3DXVec3Normalize(&amp;t_topline,&amp;t_topline);</P>
<P>&nbsp;float t_angle=D3DXVec3Dot(&amp;t_topline,&amp;D3DXVECTOR3(1,0,0));<BR>&nbsp;<BR>&nbsp;D3DXMATRIX t_matrix;<BR>&nbsp;<BR>&nbsp;if (t_topline.y&gt;0)<BR>&nbsp;&nbsp;D3DXMatrixRotationZ(&amp;t_matrix,-acosf(t_angle));<BR>&nbsp;else<BR>&nbsp;&nbsp;D3DXMatrixRotationZ(&amp;t_matrix,+acosf(t_angle));</P>
<P>&nbsp;matrix*=t_matrix;</P>
<P>&nbsp;// 变换使得成为等边梯形<BR>&nbsp;D3DXVECTOR3 t_point1,t_point2;<BR>&nbsp;D3DXVec3TransformCoord(&amp;t_point1,&amp;topl,&amp;matrix);<BR>&nbsp;D3DXVec3TransformCoord(&amp;t_point2,&amp;topr,&amp;matrix);</P>
<P>&nbsp;t_point1+=t_point2;</P>
<P>&nbsp;D3DXMatrixIdentity(&amp;t_matrix);<BR>&nbsp;t_matrix._21=-t_point1.x/t_point1.y;</P>
<P>&nbsp;matrix*=t_matrix;</P>
<P>&nbsp;// 变换使得两侧边成90度,TopLine的两点在[-1,1]和[1,1]上<BR>&nbsp;D3DXVec3TransformCoord(&amp;t_point1,&amp;topr,&amp;matrix);</P>
<P>&nbsp;D3DXMatrixScaling(&amp;t_matrix,1.0f/t_point1.x,1.0f/t_point1.y,1.0f);</P>
<P>&nbsp;matrix*=t_matrix;</P>
<P>&nbsp;// 变换使得梯形变成矩形<BR>&nbsp;t_matrix._11=t_matrix._22=t_matrix._33=1.0f;<BR>&nbsp;t_matrix._12=t_matrix._13=t_matrix._14=t_matrix._21=t_matrix._23=0.0f;<BR>&nbsp;t_matrix._31=t_matrix._32=t_matrix._34=t_matrix._41=t_matrix._43=t_matrix._44=0.0f;</P>
<P>&nbsp;t_matrix._42=1.0f;<BR>&nbsp;t_matrix._24=1.0f;</P>
<P>&nbsp;matrix*=t_matrix;</P>
<P>&nbsp;// 平移使得矩形的中心到LightProjectSpace的中点<BR>&nbsp;D3DXVec3TransformCoord(&amp;t_point1,&amp;topl,&amp;matrix);<BR>&nbsp;D3DXVec3TransformCoord(&amp;t_point2,&amp;bottomr,&amp;matrix);</P>
<P>&nbsp;D3DXMatrixTranslation(&amp;t_matrix,0,-(t_point1.y+t_point2.y)/2.0f,0);</P>
<P>&nbsp;matrix*=t_matrix;</P>
<P>&nbsp;// 拉伸矩形的Y方向,使得充满整个LightProjectSpace<BR>&nbsp;D3DXVECTOR4 t_point3;<BR>&nbsp;D3DXVec3Transform(&amp;t_point3,&amp;topl,&amp;matrix);</P>
<P>&nbsp;D3DXMatrixIdentity(&amp;t_matrix);</P>
<P>&nbsp;t_matrix._22=-t_point3.w/t_point3.y;</P>
<P>&nbsp;matrix*=t_matrix;</P>
<P>&nbsp;//<BR>&nbsp;return S_OK;<BR>};</P>
<P>HRESULT CTrapezoidalShadowMap::ComplteLightPostPerspectiveTrapezoidal(SFrustum&amp; frustum,D3DXMATRIX&amp; lightviewproj,D3DXVECTOR3&amp; topl,D3DXVECTOR3&amp; topr,D3DXVECTOR3&amp; bottoml,D3DXVECTOR3&amp; bottomr,D3DXVECTOR3&amp; intersection)<BR>{<BR>&nbsp;D3DXVECTOR3 t_frustumvertex[9];<BR>&nbsp;<BR>&nbsp;D3DXVec3TransformCoordArray( t_frustumvertex, sizeof(D3DXVECTOR3), frustum.m_Vertexs, sizeof(D3DXVECTOR3), &amp;lightviewproj, sizeof(t_frustumvertex)/sizeof(D3DXVECTOR3) );</P>
<P>&nbsp;for (int i=0;i&lt;9;++i)<BR>&nbsp;{<BR>&nbsp;&nbsp;t_frustumvertex[i].z=0.0f;<BR>&nbsp;}</P>
<P>&nbsp;D3DXVECTOR3 t_topcenter&nbsp;&nbsp;=0.25*(t_frustumvertex[0]+t_frustumvertex[1]+t_frustumvertex[2]+t_frustumvertex[3]);<BR>&nbsp;D3DXVECTOR3 t_bottomcenter&nbsp;=0.25*(t_frustumvertex[4]+t_frustumvertex[5]+t_frustumvertex[6]+t_frustumvertex[7]);</P>
<P>&nbsp;D3DXVECTOR3 t_centerline = t_topcenter - t_bottomcenter;<BR>&nbsp;D3DXVec3Normalize(&amp;t_centerline,&amp;t_centerline);</P>
<P>&nbsp;D3DXMATRIX t_trans;<BR>&nbsp;D3DXMatrixTranslation(&amp;t_trans,-0.5f*(t_topcenter.x+t_bottomcenter.x),-0.5f*(t_topcenter.y+t_bottomcenter.y),0);</P>
<P>&nbsp;D3DXMATRIX t_rotation;<BR>&nbsp;float t_angle=acosf(D3DXVec3Dot(&amp;t_centerline,&amp;D3DXVECTOR3(0,1,0)));</P>
<P>&nbsp;if (t_centerline.x&gt;0)<BR>&nbsp;&nbsp;D3DXMatrixRotationZ(&amp;t_rotation,+t_angle);<BR>&nbsp;else<BR>&nbsp;&nbsp;D3DXMatrixRotationZ(&amp;t_rotation,-t_angle);</P>
<P>&nbsp;t_trans*=t_rotation;</P>
<P>&nbsp;D3DXVec3TransformCoordArray( t_frustumvertex, sizeof(D3DXVECTOR3), t_frustumvertex, sizeof(D3DXVECTOR3), &amp;t_trans, sizeof(t_frustumvertex)/sizeof(D3DXVECTOR3) );</P>
<P>&nbsp;BoundingBox frustumAABB2D( t_frustumvertex, (sizeof(t_frustumvertex)/sizeof(D3DXVECTOR3)-1) );</P>
<P>&nbsp;D3DXVECTOR3 t_topl,t_topr,t_bottoml,t_bottomr;</P>
<P>&nbsp;D3DXVECTOR3 t_side[4];<BR>&nbsp;float t_value[4];</P>
<P>&nbsp;for (int i=0;i&lt;4;++i)<BR>&nbsp;{<BR>&nbsp;&nbsp;t_side[i]=t_frustumvertex[i]-t_frustumvertex[i+4];<BR>&nbsp;&nbsp;D3DXVec3Normalize(&amp;t_side[i],&amp;t_side[i]);<BR>&nbsp;&nbsp;t_value[i]=D3DXVec3Dot(&amp;t_side[i],&amp;D3DXVECTOR3(0,1,0));<BR>&nbsp;}</P>
<P>&nbsp;float t_min=1.0f;<BR>&nbsp;int t_no;<BR>&nbsp;for (int i=0;i&lt;4;++i)<BR>&nbsp;{<BR>&nbsp;&nbsp;if (t_side[i].x&gt;0)<BR>&nbsp;&nbsp;&nbsp;continue;</P>
<P>&nbsp;&nbsp;if (t_value[i]&lt;t_min)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;t_min=t_value[i];<BR>&nbsp;&nbsp;&nbsp;t_no=i;<BR>&nbsp;&nbsp;}<BR>&nbsp;}</P>
<P>&nbsp;t_topr.y=frustumAABB2D.maxPt.y;<BR>&nbsp;t_topr.x=(t_frustumvertex[8].y-frustumAABB2D.maxPt.y)*tanf(acosf(t_value[t_no]));<BR>&nbsp;t_topr.z=0.0f;<BR>&nbsp;t_bottomr.y=frustumAABB2D.minPt.y;<BR>&nbsp;t_bottomr.x=(t_frustumvertex[8].y-frustumAABB2D.minPt.y)*tanf(acosf(t_value[t_no]));<BR>&nbsp;t_bottomr.z=0.0f;</P>
<P>&nbsp;t_min=1.0f;<BR>&nbsp;for (int i=0;i&lt;4;++i)<BR>&nbsp;{<BR>&nbsp;&nbsp;if (t_side[i].x&lt;0)<BR>&nbsp;&nbsp;&nbsp;continue;</P>
<P>&nbsp;&nbsp;if (t_value[i]&lt;t_min)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;t_min=t_value[i];<BR>&nbsp;&nbsp;&nbsp;t_no=i;<BR>&nbsp;&nbsp;}<BR>&nbsp;}</P>
<P>&nbsp;t_topl.y=frustumAABB2D.maxPt.y;<BR>&nbsp;t_topl.x=-(t_frustumvertex[8].y-frustumAABB2D.maxPt.y)*tanf(acosf(t_value[t_no]));<BR>&nbsp;t_topl.z=0.0f;<BR>&nbsp;t_bottoml.y=frustumAABB2D.minPt.y;<BR>&nbsp;t_bottoml.x=-(t_frustumvertex[8].y-frustumAABB2D.minPt.y)*tanf(acosf(t_value[t_no]));<BR>&nbsp;t_bottoml.z=0.0f;</P>
<P>&nbsp;D3DXMATRIX t_invtrans;<BR>&nbsp;D3DXMatrixInverse(&amp;t_invtrans,NULL,&amp;t_trans);</P>
<P>&nbsp;D3DXVec3TransformCoord(&amp;topl,&amp;t_topl,&amp;t_invtrans);<BR>&nbsp;D3DXVec3TransformCoord(&amp;topr,&amp;t_topr,&amp;t_invtrans);<BR>&nbsp;D3DXVec3TransformCoord(&amp;bottoml,&amp;t_bottoml,&amp;t_invtrans);<BR>&nbsp;D3DXVec3TransformCoord(&amp;bottomr,&amp;t_bottomr,&amp;t_invtrans);<BR>&nbsp;D3DXVec3TransformCoord(&amp;intersection,&amp;t_frustumvertex[8],&amp;t_invtrans);<BR>&nbsp;<BR>&nbsp;//<BR>&nbsp;return S_OK;<BR>};<BR></P><img src ="http://www.cnblogs.com/sevecol/aggbug/207662.html?type=1" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://sevecol.cnblogs.com/" target="_blank">胡说八道</a> 2005-08-04 21:02 <a href="http://www.cnblogs.com/sevecol/archive/2005/08/04/207662.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Trapezoidal Shadow Map(2) </title><link>http://www.cnblogs.com/sevecol/archive/2005/08/03/206813.html</link><dc:creator>胡说八道</dc:creator><author>胡说八道</author><pubDate>Wed, 03 Aug 2005 09:42:00 GMT</pubDate><guid>http://www.cnblogs.com/sevecol/archive/2005/08/03/206813.html</guid><wfw:comment>http://www.cnblogs.com/sevecol/comments/206813.html</wfw:comment><comments>http://www.cnblogs.com/sevecol/archive/2005/08/03/206813.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/sevecol/comments/commentRss/206813.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/sevecol/services/trackbacks/206813.html</trackback:ping><description><![CDATA[<P><IMG height=596 hspace=5 src="http://www.cnblogs.com/images/cnblogs_com/sevecol/tsm2.jpg" width=794 align=baseline><BR>中间的红色框包起来的是在light's post&#8722;perspective space中的视锥,红色框是构造出的trapezoidal,外围的是在trapezoidal space中的视锥.其中蓝色的表示视锥的Near Plane,绿色的表示Far Plane和边.<BR><BR>通过视锥计算梯形的代码:<BR>HRESULT CTrapezoidalShadowMap::ComplteLightPostPerspectiveTrapezoidal(SFrustum&amp; frustum,D3DXMATRIX&amp; lightviewproj,D3DXVECTOR3&amp; topl,D3DXVECTOR3&amp; topr,D3DXVECTOR3&amp; bottoml,D3DXVECTOR3&amp; bottomr,D3DXVECTOR3&amp; intersection)<BR>{<BR>&nbsp;D3DXVECTOR3 t_frustumvertex[9];<BR>&nbsp;<BR>&nbsp;// 转换到Light's Post-Perspective Space<BR>&nbsp;D3DXVec3TransformCoordArray( t_frustumvertex, sizeof(D3DXVECTOR3), frustum.m_Vertexs, sizeof(D3DXVECTOR3), &amp;lightviewproj, sizeof(t_frustumvertex)/sizeof(D3DXVECTOR3) );</P>
<P>&nbsp;for (int i=0;i&lt;9;++i)<BR>&nbsp;{<BR>&nbsp;&nbsp;t_frustumvertex[i].z=0.0f;<BR>&nbsp;}</P>
<P>&nbsp;// 求出中轴线<BR>&nbsp;D3DXVECTOR3 t_topcenter&nbsp;&nbsp;=0.25*(t_frustumvertex[0]+t_frustumvertex[1]+t_frustumvertex[2]+t_frustumvertex[3]);<BR>&nbsp;D3DXVECTOR3 t_bottomcenter&nbsp;=0.25*(t_frustumvertex[4]+t_frustumvertex[5]+t_frustumvertex[6]+t_frustumvertex[7]);</P>
<P>&nbsp;D3DXVECTOR3 t_centerline = t_topcenter - t_bottomcenter;<BR>&nbsp;D3DXVec3Normalize(&amp;t_centerline,&amp;t_centerline);</P>
<P>&nbsp;// 平移和旋转使得中轴线的中点在Light's Post-Perspective Space中点,方向指向Light's Post-Perspective Space的Y轴<BR>&nbsp;D3DXMATRIX t_trans;<BR>&nbsp;D3DXMatrixTranslation(&amp;t_trans,-0.5f*(t_topcenter.x+t_bottomcenter.x),-0.5f*(t_topcenter.y+t_bottomcenter.y),0);</P>
<P>&nbsp;D3DXMATRIX t_rotation;<BR>&nbsp;float t_angle=acosf(D3DXVec3Dot(&amp;t_centerline,&amp;D3DXVECTOR3(0,1,0)));</P>
<P>&nbsp;if (t_centerline.x&gt;0)<BR>&nbsp;&nbsp;D3DXMatrixRotationZ(&amp;t_rotation,-t_angle);<BR>&nbsp;else<BR>&nbsp;&nbsp;D3DXMatrixRotationZ(&amp;t_rotation,t_angle);</P>
<P>&nbsp;t_trans*=t_rotation;</P>
<P>&nbsp;D3DXVec3TransformCoordArray( t_frustumvertex, sizeof(D3DXVECTOR3), t_frustumvertex, sizeof(D3DXVECTOR3), &amp;t_trans, sizeof(t_frustumvertex)/sizeof(D3DXVECTOR3) );</P>
<P>&nbsp;// 求出2D AABB<BR>&nbsp;BoundingBox frustumAABB2D( t_frustumvertex, (sizeof(t_frustumvertex)/sizeof(D3DXVECTOR3)-1) );</P>
<P>&nbsp;// 计算梯形的四个顶点<BR>&nbsp;D3DXVECTOR3 t_topl,t_topr,t_bottoml,t_bottomr;</P>
<P>&nbsp;D3DXVECTOR3 t_side[4];<BR>&nbsp;float t_value[4];</P>
<P>&nbsp;for (int i=0;i&lt;4;++i)<BR>&nbsp;{<BR>&nbsp;&nbsp;t_side[i]=t_frustumvertex[i]-t_frustumvertex[i+4];<BR>&nbsp;&nbsp;D3DXVec3Normalize(&amp;t_side[i],&amp;t_side[i]);<BR>&nbsp;&nbsp;t_value[i]=D3DXVec3Dot(&amp;t_side[i],&amp;D3DXVECTOR3(0,1,0));<BR>&nbsp;}</P>
<P>&nbsp;float t_min=1.0f;<BR>&nbsp;int t_no;<BR>&nbsp;for (int i=0;i&lt;4;++i)<BR>&nbsp;{<BR>&nbsp;&nbsp;if (t_side[i].x&gt;0)<BR>&nbsp;&nbsp;&nbsp;continue;</P>
<P>&nbsp;&nbsp;if (t_value[i]&lt;t_min)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;t_min=t_value[i];<BR>&nbsp;&nbsp;&nbsp;t_no=i;<BR>&nbsp;&nbsp;}<BR>&nbsp;}</P>
<P>&nbsp;t_topl.y=frustumAABB2D.maxPt.y;<BR>&nbsp;t_topl.x=-(t_frustumvertex[8].y-frustumAABB2D.maxPt.y)*tanf(acosf(t_value[t_no]));<BR>&nbsp;t_bottoml.y=frustumAABB2D.minPt.y;<BR>&nbsp;t_bottoml.x=-(t_frustumvertex[8].y-frustumAABB2D.minPt.y)*tanf(acosf(t_value[t_no]));</P>
<P>&nbsp;t_min=1.0f;<BR>&nbsp;for (int i=0;i&lt;4;++i)<BR>&nbsp;{<BR>&nbsp;&nbsp;if (t_side[i].x&lt;0)<BR>&nbsp;&nbsp;&nbsp;continue;</P>
<P>&nbsp;&nbsp;if (t_value[i]&lt;t_min)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;t_min=t_value[i];<BR>&nbsp;&nbsp;&nbsp;t_no=i;<BR>&nbsp;&nbsp;}<BR>&nbsp;}</P>
<P>&nbsp;t_topr.y=frustumAABB2D.maxPt.y;<BR>&nbsp;t_topr.x=(t_frustumvertex[8].y-frustumAABB2D.maxPt.y)*tanf(acosf(t_value[t_no]));<BR>&nbsp;t_bottomr.y=frustumAABB2D.minPt.y;<BR>&nbsp;t_bottomr.x=(t_frustumvertex[8].y-frustumAABB2D.minPt.y)*tanf(acosf(t_value[t_no]));</P>
<P>&nbsp;// 将梯形四个顶点和两边的交点变换回Light's Post-Perspective Space<BR>&nbsp;D3DXMATRIX t_invtrans;<BR>&nbsp;D3DXMatrixInverse(&amp;t_invtrans,NULL,&amp;t_trans);</P>
<P>&nbsp;D3DXVec3TransformCoord(&amp;topl,&amp;t_topl,&amp;t_trans);<BR>&nbsp;D3DXVec3TransformCoord(&amp;topr,&amp;t_topr,&amp;t_trans);<BR>&nbsp;D3DXVec3TransformCoord(&amp;bottoml,&amp;t_bottoml,&amp;t_trans);<BR>&nbsp;D3DXVec3TransformCoord(&amp;bottomr,&amp;t_bottomr,&amp;t_trans);<BR>&nbsp;D3DXVec3TransformCoord(&amp;intersection,&amp;t_frustumvertex[8],&amp;t_trans);<BR>&nbsp;<BR>&nbsp;//<BR>&nbsp;return S_OK;<BR>};<BR><BR></P><img src ="http://www.cnblogs.com/sevecol/aggbug/206813.html?type=1" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://sevecol.cnblogs.com/" target="_blank">胡说八道</a> 2005-08-03 17:42 <a href="http://www.cnblogs.com/sevecol/archive/2005/08/03/206813.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Trapezoidal Shadow Map(1)</title><link>http://www.cnblogs.com/sevecol/archive/2005/08/03/206136.html</link><dc:creator>胡说八道</dc:creator><author>胡说八道</author><pubDate>Tue, 02 Aug 2005 16:32:00 GMT</pubDate><guid>http://www.cnblogs.com/sevecol/archive/2005/08/03/206136.html</guid><wfw:comment>http://www.cnblogs.com/sevecol/comments/206136.html</wfw:comment><comments>http://www.cnblogs.com/sevecol/archive/2005/08/03/206136.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/sevecol/comments/commentRss/206136.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/sevecol/services/trackbacks/206136.html</trackback:ping><description><![CDATA[<P><IMG height=596 hspace=5 src="http://www.cnblogs.com/images/cnblogs_com/sevecol/before.jpg" width=798 align=baseline></P>
<P>&nbsp;&nbsp;在light&#8217;s post&#8722;perspective space中根据视锥构建的梯形,为了方便表示,贴了一张贴图表示.贴图中的Top表示靠近视锥前截面的梯形的上底,Bottom表示靠近视锥后截面的梯形的下底.<BR><BR><IMG height=594 hspace=5 src="http://www.cnblogs.com/images/cnblogs_com/sevecol/after.jpg" width=795 align=baseline></P>
<P>梯形转换到trapezoidal space后的显示情况<BR><BR>light&#8217;s post&#8722;perspective space-&gt;trapezoidal space的距阵计算:<BR><BR>HRESULT CTrapezoidalShadowMap::ComputeTrapezoidalMatrix(D3DXMATRIX&amp; matrix,D3DXVECTOR3&amp; topl,D3DXVECTOR3&amp; topr,D3DXVECTOR3&amp; bottoml,D3DXVECTOR3&amp; bottomr,D3DXVECTOR3&amp; intersection)<BR>{<BR>&nbsp;// 平移TopLine的中点到Light's Post-Perspective Space的中点<BR>&nbsp;D3DXMatrixTranslation(&amp;matrix,-(topl.x+topr.x)/2.0f,-(topl.y+topr.y)/2.0f,0);<BR>&nbsp;<BR>&nbsp;// 旋转梯形使得TopLine和Light's Post-Perspective Space的x轴重合<BR>&nbsp;D3DXVECTOR3 t_topline=(topl-topr);<BR>&nbsp;D3DXVec3Normalize(&amp;t_topline,&amp;t_topline);</P>
<P>&nbsp;float t_angle=D3DXVec3Dot(&amp;t_topline,&amp;D3DXVECTOR3(1,0,0));<BR>&nbsp;<BR>&nbsp;D3DXMATRIX t_matrix;<BR>&nbsp;D3DXMatrixRotationZ(&amp;t_matrix,-acosf(t_angle));</P>
<P>&nbsp;matrix*=t_matrix;</P>
<P>&nbsp;// 平移梯形使得两侧边交点到Light's Post-Perspective Space的中点<BR>&nbsp;D3DXVECTOR3 t_intersection;</P>
<P>&nbsp;D3DXVec3TransformCoord(&amp;t_intersection,&amp;intersection,&amp;matrix);</P>
<P>&nbsp;D3DXMatrixTranslation(&amp;t_matrix,-t_intersection.x,-t_intersection.y,0);</P>
<P>&nbsp;matrix*=t_matrix;</P>
<P>&nbsp;// 变换使得成为等边梯形<BR>&nbsp;D3DXVECTOR3 t_point1,t_point2;<BR>&nbsp;D3DXVec3TransformCoord(&amp;t_point1,&amp;topl,&amp;matrix);<BR>&nbsp;D3DXVec3TransformCoord(&amp;t_point2,&amp;topr,&amp;matrix);</P>
<P>&nbsp;t_point1+=t_point2;</P>
<P>&nbsp;D3DXMatrixIdentity(&amp;t_matrix);<BR>&nbsp;t_matrix._21=-t_point1.x/t_point1.y;</P>
<P>&nbsp;matrix*=t_matrix;</P>
<P>&nbsp;// 变换使得两侧边成90度,TopLine的两点在[-1,1]和[1,1]上<BR>&nbsp;D3DXVec3TransformCoord(&amp;t_point1,&amp;topr,&amp;matrix);</P>
<P>&nbsp;D3DXMatrixScaling(&amp;t_matrix,1.0f/t_point1.x,1.0f/t_point1.y,1.0f);</P>
<P>&nbsp;matrix*=t_matrix;</P>
<P>&nbsp;// 变换使得梯形变成矩形<BR>&nbsp;t_matrix._11=t_matrix._22=t_matrix._33=t_matrix._24=t_matrix._42=1.0f;<BR>&nbsp;t_matrix._12=t_matrix._13=t_matrix._14=t_matrix._21=t_matrix._23=0.0f;<BR>&nbsp;t_matrix._31=t_matrix._32=t_matrix._34=t_matrix._41=t_matrix._43=t_matrix._44=0.0f;</P>
<P>&nbsp;matrix*=t_matrix;</P>
<P>&nbsp;// 平移使得矩形的中心到Light's Post-Perspective Space的中点<BR>&nbsp;D3DXVec3TransformCoord(&amp;t_point1,&amp;topl,&amp;matrix);<BR>&nbsp;D3DXVec3TransformCoord(&amp;t_point2,&amp;bottomr,&amp;matrix);</P>
<P>&nbsp;D3DXMatrixTranslation(&amp;t_matrix,0,-(t_point1.y+t_point2.y)/2.0f,0);</P>
<P>&nbsp;matrix*=t_matrix;</P>
<P>&nbsp;// 拉伸矩形的Y方向,使得充满整个Light's Post-Perspective Space<BR>&nbsp;D3DXVECTOR4 t_point3;<BR>&nbsp;D3DXVec3Transform(&amp;t_point3,&amp;topl,&amp;matrix);</P>
<P>&nbsp;D3DXMatrixIdentity(&amp;t_matrix);</P>
<P>&nbsp;t_matrix._22=-t_point3.w/t_point3.y;</P>
<P>&nbsp;matrix*=t_matrix;</P>
<P>&nbsp;//<BR>&nbsp;return S_OK;<BR>};<BR><BR></P><img src ="http://www.cnblogs.com/sevecol/aggbug/206136.html?type=1" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://sevecol.cnblogs.com/" target="_blank">胡说八道</a> 2005-08-03 00:32 <a href="http://www.cnblogs.com/sevecol/archive/2005/08/03/206136.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Meltdown 2005 Presentations </title><link>http://www.cnblogs.com/sevecol/archive/2005/07/29/202403.html</link><dc:creator>胡说八道</dc:creator><author>胡说八道</author><pubDate>Thu, 28 Jul 2005 16:46:00 GMT</pubDate><guid>http://www.cnblogs.com/sevecol/archive/2005/07/29/202403.html</guid><wfw:comment>http://www.cnblogs.com/sevecol/comments/202403.html</wfw:comment><comments>http://www.cnblogs.com/sevecol/archive/2005/07/29/202403.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/sevecol/comments/commentRss/202403.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/sevecol/services/trackbacks/202403.html</trackback:ping><description><![CDATA[Meltdown&nbsp;2005&nbsp;Presentations<BR><BR>Get&nbsp;up&nbsp;to&nbsp;date&nbsp;with&nbsp;the&nbsp;latest&nbsp;presentations&nbsp;from&nbsp;Meltdown&nbsp;2005.&nbsp;All&nbsp;presentations&nbsp;given&nbsp;at&nbsp;the&nbsp;Windows,&nbsp;Graphics,<BR>&nbsp;Visual&nbsp;Studio,&nbsp;and&nbsp;Business/Publisher&nbsp;tracks&nbsp;are&nbsp;available&nbsp;for&nbsp;immediate&nbsp;download.&nbsp;<BR><BR><A href="http://msdn.microsoft.com/directx/">http://msdn.microsoft.com/directx/</A><BR><BR><img src ="http://www.cnblogs.com/sevecol/aggbug/202403.html?type=1" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://sevecol.cnblogs.com/" target="_blank">胡说八道</a> 2005-07-29 00:46 <a href="http://www.cnblogs.com/sevecol/archive/2005/07/29/202403.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>