﻿<?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>C++博客-koilin</title><link>http://www.cppblog.com/koilin/</link><description>beautiful graphics, beautiful world!</description><language>zh-cn</language><lastBuildDate>Tue, 14 Apr 2026 23:08:04 GMT</lastBuildDate><pubDate>Tue, 14 Apr 2026 23:08:04 GMT</pubDate><ttl>60</ttl><item><title>根据Mesh生成Cage的心历路程（4）</title><link>http://www.cppblog.com/koilin/archive/2010/01/29/106703.html</link><dc:creator>koilin</dc:creator><author>koilin</author><pubDate>Fri, 29 Jan 2010 03:34:00 GMT</pubDate><guid>http://www.cppblog.com/koilin/archive/2010/01/29/106703.html</guid><wfw:comment>http://www.cppblog.com/koilin/comments/106703.html</wfw:comment><comments>http://www.cppblog.com/koilin/archive/2010/01/29/106703.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koilin/comments/commentRss/106703.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koilin/services/trackbacks/106703.html</trackback:ping><description><![CDATA[&nbsp;
<p><span>下面开始描述我是怎么样去实现方法五的。</span></p>
<p><span>根据我目前掌握的知识，和实验室已知的编程条件，方法五我需要以下三个过程：</span></p>
<p><span><span>（1）<span>&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span>CGAL</span><span>框架下生成</span><span>GPU</span><span>的绘制数据。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>对原</span><span>Mesh</span><span>的每个面生成局部坐标系；</span></p>
<p><span><img alt="local coordinates.bmp" src="file:///d:/Temp/msohtmlclip1/01/clip_image002.jpg" width=328 height=182 v:shapes="图片_x0020_16"></span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>由局部坐标系形成面的</span><span>OBB</span><span>包围盒</span><span>Shell</span><span>；</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><img alt=shells.bmp src="file:///d:/Temp/msohtmlclip1/01/clip_image004.jpg" width=151 height=90 v:shapes="图片_x0020_17"><img alt="shell slice.bmp" src="file:///d:/Temp/msohtmlclip1/01/clip_image006.jpg" width=173 height=90 v:shapes="图片_x0020_18"><img alt="a shell.bmp" src="file:///d:/Temp/msohtmlclip1/01/clip_image008.jpg" width=183 height=90 v:shapes="图片_x0020_19"></span></p>
<p>&nbsp;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Shell</span><span>划分为</span><span>5</span><span>个</span><span>Tetrahedron</span><span>；</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>根据离散化规格沿</span><span>Z</span><span>轴产生等距的</span><span>Slice</span><span>，每个</span><span>Slice</span><span>与</span><span>Tetrahedron</span><span>产生的交点即为</span><span>GPU</span><span>的输入顶点数据流。</span></p>
<p><span><img alt=slice.bmp src="file:///d:/Temp/msohtmlclip1/01/clip_image010.jpg" width=174 height=90 v:shapes="图片_x0020_22"><img alt="points in plane.bmp" src="file:///d:/Temp/msohtmlclip1/01/clip_image012.jpg" width=167 height=90 v:shapes="图片_x0020_21">&nbsp;<img alt="all points.bmp" src="file:///d:/Temp/msohtmlclip1/01/clip_image014.jpg" width=168 height=90 v:shapes="图片_x0020_20"></span></p>
<p><span>Cylinder</span><span>内部看</span></p>
<p><span><img alt=自己画的图.bmp src="file:///d:/Temp/msohtmlclip1/01/clip_image016.jpg" width=332 height=202 v:shapes="图片_x0020_25"></span></p>
<p><span><span>（2）<span>&nbsp;&nbsp;&nbsp; </span></span></span><span>GPU</span><span>绘制</span></p>
<p><span>根据得到的顶点数据流，以及距离计算函数对每个切片数据进行绘制。绘制的过程其实一直都是有问题的，个中的原因我也说不清楚，只是知道结果是不正确的。</span></p>
<p align=center><span><img alt=距离值错误1.bmp src="file:///d:/Temp/msohtmlclip1/01/clip_image018.jpg" width=118 height=93 v:shapes="图片_x0020_26"><img alt=距离值错误2.bmp src="file:///d:/Temp/msohtmlclip1/01/clip_image020.jpg" width=118 height=93 v:shapes="图片_x0020_27"><img alt=距离值错误4.bmp src="file:///d:/Temp/msohtmlclip1/01/clip_image022.jpg" width=118 height=93 v:shapes="图片_x0020_28"><img alt=距离值错误3.bmp src="file:///d:/Temp/msohtmlclip1/01/clip_image024.jpg" width=118 height=93 v:shapes="图片_x0020_29"></span></p>
<p>&nbsp;</p>
<p><span>直到这个图才有了点成功的迹象</span><span>~</span></p>
<p align=center><span><img alt=好像有点成功的迹象了.bmp src="file:///d:/Temp/msohtmlclip1/01/clip_image026.jpg" width=198 height=156 v:shapes="图片_x0020_30"><img alt=貌似正确.bmp src="file:///d:/Temp/msohtmlclip1/01/clip_image028.jpg" width=199 height=156 v:shapes="图片_x0020_40"></span></p>
<p><span>对深度计算方法进行调整好以后才出现了自己想要的结果。以下是三个连续的切片。从整体上来看数据还是好的，但是最遗憾的就是中间的黑色部分出现了间断。</span></p>
<p align=center><span><img alt=20.bmp src="file:///d:/Temp/msohtmlclip1/01/clip_image030.gif" width=140 height=140 v:shapes="图片_x0020_31"><img alt=15.bmp src="file:///d:/Temp/msohtmlclip1/01/clip_image032.gif" width=140 height=140 v:shapes="图片_x0020_32"><img alt=16.bmp src="file:///d:/Temp/msohtmlclip1/01/clip_image034.gif" width=140 height=140 v:shapes="图片_x0020_33"></span></p>
<p><span>由于</span><span>vtk</span><span>处理的数据是</span><span>8</span><span>或</span><span>24</span><span>位的，而</span><span>D3D</span><span>的函数默认生成</span><span>bmp</span><span>图是</span><span>32</span><span>位的。这里幸亏张大帮忙，并提醒我用</span><span>opencv</span><span>来解决。</span><span>Opencv</span><span>不错，用起来挺方便的，建议数字图像处理的人用。</span></p>
<p><span>生成的</span><span>64x64</span><span>的</span><span>8</span><span>位灰度图如下：</span></p>
<p align=center><span><img alt=45.bmp src="file:///d:/Temp/msohtmlclip1/01/clip_image035.gif" width=64 height=64 v:shapes="图片_x0020_34"><img alt=43.bmp src="file:///d:/Temp/msohtmlclip1/01/clip_image036.gif" width=64 height=64 v:shapes="图片_x0020_35"><img alt=44.bmp src="file:///d:/Temp/msohtmlclip1/01/clip_image037.gif" width=64 height=64 v:shapes="图片_x0020_36"></span></p>
<p><span><span>（3）<span>&nbsp;&nbsp;&nbsp; </span></span></span><span>VTK</span><span>根据切片数据，由</span><span>2D</span><span>的</span><span>bmp</span><span>图片生成</span><span>3D</span><span>网格模型</span></p>
<p align=left><span><img alt="gpu draw.bmp" src="file:///d:/Temp/msohtmlclip1/01/clip_image039.jpg" width=344 height=271 v:shapes="图片_x0020_41"></span></p>
<p><span>上图为</span><span>GPU</span><span>的绘制结果，通过</span><span>vtk</span><span>（</span><span>Visualization Toolkit</span><span>）绘制的结果。</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>vtkBMPReader</span> *<span>reader</span> = <span>vtkBMPReader</span>::<span>New</span>();<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>reader</span>-&gt;<span>SetFilePrefix</span>(<span>"D://cylinder/"</span>);</span></p>
<p align=left><span>&nbsp;<span>&nbsp;&nbsp;&nbsp; </span><span>reader</span>-&gt;<span>SetFilePattern</span>(<span>"%s%d.bmp"</span>);</span></p>
<p align=left><span>&nbsp;<span>&nbsp;&nbsp;&nbsp; </span><span>reader</span>-&gt;<span>SetDataByteOrderToLittleEndian</span>();</span></p>
<p align=left><span>&nbsp;<span>&nbsp;&nbsp;&nbsp; </span><span>reader</span>-&gt;<span>SetDataSpacing</span>(1, 1, 3);</span></p>
<p align=left><span>&nbsp;<span>&nbsp;&nbsp;&nbsp; </span><span>reader</span>-&gt;<span>SetFileNameSliceSpacing</span>(1);</span></p>
<p align=left><span>&nbsp;<span>&nbsp;&nbsp;&nbsp; </span><span>reader</span>-&gt;<span>SetDataExtent</span>(0, 63, 0, 63, 1, 50);</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>reader</span>-&gt;<span>Allow8BitBMPOn</span>();</span></p>
<p><span>&nbsp;<span>&nbsp;&nbsp;&nbsp; </span><span>reader</span>-&gt;<span>Update</span>();</span></p>
<p><span><img alt=vtk.bmp src="file:///d:/Temp/msohtmlclip1/01/clip_image041.jpg" width=284 height=207 v:shapes="图片_x0020_42"></span></p>
<p><span>生成了</span><span>STL</span><span>文件格式，然后再使用</span><span>3ds Max</span><span>进行</span><span>obj</span><span>文件格式转换。</span></p>
<p><span><img alt=obj1.bmp src="file:///d:/Temp/msohtmlclip1/01/clip_image043.jpg" width=281 height=218 v:shapes="图片_x0020_43"><img alt=obj2.bmp src="file:///d:/Temp/msohtmlclip1/01/clip_image045.jpg" width=264 height=218 v:shapes="图片_x0020_45"></span></p>
<p><span>比较郁闷的是网格模型竟然是双层的，不知道是什么原因啊？还好我的</span><span>Deformation</span><span>框架可以把文件读进来啊。</span></p>
<p><span>到现在，我的工作也可以说是到了一个段落了。接下来怎么改？迷茫</span><span>~~</span></p>
<img src ="http://www.cppblog.com/koilin/aggbug/106703.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koilin/" target="_blank">koilin</a> 2010-01-29 11:34 <a href="http://www.cppblog.com/koilin/archive/2010/01/29/106703.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>太傻</title><link>http://www.cppblog.com/koilin/archive/2009/10/13/98479.html</link><dc:creator>koilin</dc:creator><author>koilin</author><pubDate>Tue, 13 Oct 2009 07:13:00 GMT</pubDate><guid>http://www.cppblog.com/koilin/archive/2009/10/13/98479.html</guid><wfw:comment>http://www.cppblog.com/koilin/comments/98479.html</wfw:comment><comments>http://www.cppblog.com/koilin/archive/2009/10/13/98479.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koilin/comments/commentRss/98479.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koilin/services/trackbacks/98479.html</trackback:ping><description><![CDATA[有时候，科学并不一定意味着繁琐的计算与测量，而是一种有浓厚艺术气息的思维方式。<br>
<img src ="http://www.cppblog.com/koilin/aggbug/98479.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koilin/" target="_blank">koilin</a> 2009-10-13 15:13 <a href="http://www.cppblog.com/koilin/archive/2009/10/13/98479.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Visual Assist 添加支持*.cu文件</title><link>http://www.cppblog.com/koilin/archive/2009/09/28/97448.html</link><dc:creator>koilin</dc:creator><author>koilin</author><pubDate>Mon, 28 Sep 2009 04:04:00 GMT</pubDate><guid>http://www.cppblog.com/koilin/archive/2009/09/28/97448.html</guid><wfw:comment>http://www.cppblog.com/koilin/comments/97448.html</wfw:comment><comments>http://www.cppblog.com/koilin/archive/2009/09/28/97448.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koilin/comments/commentRss/97448.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koilin/services/trackbacks/97448.html</trackback:ping><description><![CDATA[<p>Visual Assist 添加支持*.cu文件<br>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打开注册表，在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\Languages\File Extensions\ 下面添加子键 .cu 然后copy .cpp的键值到.cu。这样才能表示cu也是VS下的VC的工程文件。</p>
<p>&nbsp;</p>
<p>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打开注册表<br>HKEY_CURRENT_USER\Software\Whole Tomato\Visual Assist X\VANet8 在ExtSource键添加键值.cu。</p>
<p>3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打开Visual Assist属性，在projects 的C/C++ Directories custom下面添加CUDA的头文件目录，这样才能在Visual Assist 生成规则的时候找到CUDA自身的特殊定义才能生成Visual Assist的关键字，如__global__.</p>
<p>&nbsp;</p>
<p><br>本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/OpenHero/archive/2008/04/24/2324711.aspx">http://blog.csdn.net/OpenHero/archive/2008/04/24/2324711.aspx</a></p>
<img src ="http://www.cppblog.com/koilin/aggbug/97448.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koilin/" target="_blank">koilin</a> 2009-09-28 12:04 <a href="http://www.cppblog.com/koilin/archive/2009/09/28/97448.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DX里面的问题</title><link>http://www.cppblog.com/koilin/archive/2009/09/28/97447.html</link><dc:creator>koilin</dc:creator><author>koilin</author><pubDate>Mon, 28 Sep 2009 04:02:00 GMT</pubDate><guid>http://www.cppblog.com/koilin/archive/2009/09/28/97447.html</guid><wfw:comment>http://www.cppblog.com/koilin/comments/97447.html</wfw:comment><comments>http://www.cppblog.com/koilin/archive/2009/09/28/97447.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/koilin/comments/commentRss/97447.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koilin/services/trackbacks/97447.html</trackback:ping><description><![CDATA[1、像float4X4这样的变量都是在哪个头文件定义的啊？<br>2、通过DX的D3DXLoadMeshFromX()函数下载的网格模型，其本身有哪些属性是一定有的啊？比如说有些时候不包含法向，还要重新计算法向，切向之类的。<br>3、一般你是怎么去调试HLSL代码的？<br><br>DXUT里面的问题？<br>1、如果要显示什么值的话，怎么办？说白了也就是我想看到某个时候某个变量的值，比便于调试。可以直接告诉我怎么调试是最终的目标。<br><br>
<img src ="http://www.cppblog.com/koilin/aggbug/97447.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koilin/" target="_blank">koilin</a> 2009-09-28 12:02 <a href="http://www.cppblog.com/koilin/archive/2009/09/28/97447.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cube map</title><link>http://www.cppblog.com/koilin/archive/2009/09/28/97438.html</link><dc:creator>koilin</dc:creator><author>koilin</author><pubDate>Mon, 28 Sep 2009 02:27:00 GMT</pubDate><guid>http://www.cppblog.com/koilin/archive/2009/09/28/97438.html</guid><wfw:comment>http://www.cppblog.com/koilin/comments/97438.html</wfw:comment><comments>http://www.cppblog.com/koilin/archive/2009/09/28/97438.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koilin/comments/commentRss/97438.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koilin/services/trackbacks/97438.html</trackback:ping><description><![CDATA[<p style="MARGIN: 20px auto 10px" id=blogtitle_fks_082065083095085064093086082095085087089066087081095067093 class="g_p_center g_t_wrap g_t_left g_t_20 g_c_pdin c07">转自：<a href="http://memecha24.blog.163.com/blog/static/118137909200942494851483/">http://memecha24.blog.163.com/blog/static/118137909200942494851483/</a><br><span style="FONT-FAMILY: '微软雅黑','黑体',Arial,Helvetica,Sans-Serif"><br>环境反射效果 </span></p>
<div style="MARGIN-BOTTOM: 15px" class="g_p_center g_t_right g_c_pdin g_h_20 c08">
<div class=g_p_left><a id=aBelongClsfks_082065083095085064093086082095085087089066087081095067093 class=c05 onclick="NEBlog.gPermaLinkPage.updownMenu.openSameClass('fks_087071092085088068081083084095085087089066087081095067093', '图像处理');" href="http://memecha24.blog.163.com/blog/static/118137909200942494851483/#">图像处理</a> &nbsp;&nbsp;<span class="g_t_12 c08">2009-05-24 21:48</span> <span class=c08>&nbsp;&nbsp;阅读<nobr id=accessCount_fks_082065083095085064093086082095085087089066087081095067093>24</nobr>&nbsp;&nbsp;&nbsp;评论<nobr id=comCount_fks_082065083095085064093086082095085087089066087081095067093>0</nobr></span> <span class=c08>&nbsp;</span> </div>
<div>字号： <a style="FONT-SIZE: 12px" id=bigfont class="g_c_ul c05" onclick="NEBlog.gPermaLinkPage.updownMenu.changeFont('blogtext_fks_082065083095085064093086082095085087089066087081095067093', 1);return false;" href="http://memecha24.blog.163.com/blog/static/118137909200942494851483/#">大</a><span style="DISPLAY: none" id=bigfont_off class="g_t_bold c07"><strong>大</strong></span>&nbsp; <a style="FONT-SIZE: 12px" id=middlefont class="g_c_ul c05" onclick="NEBlog.gPermaLinkPage.updownMenu.changeFont('blogtext_fks_082065083095085064093086082095085087089066087081095067093', 2);return false;" href="http://memecha24.blog.163.com/blog/static/118137909200942494851483/#">中</a><span style="DISPLAY: none" id=middlefont_off class="g_t_bold c07"><strong>中</strong></span>&nbsp; <a style="DISPLAY: none; FONT-SIZE: 12px" id=smallfont class="g_c_ul c05" onclick="NEBlog.gPermaLinkPage.updownMenu.changeFont('blogtext_fks_082065083095085064093086082095085087089066087081095067093', 3);return false;" href="http://memecha24.blog.163.com/blog/static/118137909200942494851483/#">小</a><span style="DISPLAY: inline" id=smallfont_off class="g_t_bold c07"><strong>小</strong></span> </div>
</div>
<div class=g_blog_list>
<div id=blogtext_fks_082065083095085064093086082095085087089066087081095067093 class="g_t_center g_c_pdin g_p_center c07 content">
<div class=ns_content>
<p style="TEXT-INDENT: 2em"></p>
<p style="TEXT-INDENT: 2em"><a href="http://www.cppblog.com/Herbert/archive/2009/02/11/73489.html"><font color=#864f0e>环境反射效果</font></a> </p>
<p style="TEXT-INDENT: 2em"></p>
<p style="TEXT-INDENT: 2em">&nbsp; 就我所知常用的环境贴图有两种，一种是球状的环境贴图；一种是立方体的环境贴图。如果是制作水体的反射或折射效果也可以只做平面的环境贴图。</p>
<p style="TEXT-INDENT: 2em">&nbsp; DirectX中提供了一个很方便的立方体环境贴图。立方体的六个面定义如下：</p>
<p style="TEXT-INDENT: 2em"></p>
<fieldset><legend></legend>typedef enum _D3DCUBEMAP_FACES
<p>&#160;</p>
<p style="TEXT-INDENT: 2em">{</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; D3DCUBEMAP_FACE_POSITIVE_X&nbsp;&nbsp;&nbsp;&nbsp; = 0,</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; D3DCUBEMAP_FACE_NEGATIVE_X&nbsp;&nbsp;&nbsp;&nbsp; = 1,</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; D3DCUBEMAP_FACE_POSITIVE_Y&nbsp;&nbsp;&nbsp;&nbsp; = 2,</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; D3DCUBEMAP_FACE_NEGATIVE_Y&nbsp;&nbsp;&nbsp;&nbsp; = 3,</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; D3DCUBEMAP_FACE_POSITIVE_Z&nbsp;&nbsp;&nbsp;&nbsp; = 4,</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; D3DCUBEMAP_FACE_NEGATIVE_Z&nbsp;&nbsp;&nbsp;&nbsp; = 5, </p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; D3DCUBEMAP_FACE_FORCE_DWORD&nbsp;&nbsp;&nbsp; = 0x7fffffff</p>
<p style="TEXT-INDENT: 2em">} D3DCUBEMAP_FACES;</p>
</fieldset>
<p>&#160;</p>
<p style="TEXT-INDENT: 2em">如下图所示：</p>
<p style="TEXT-INDENT: 2em"><img title="环境反射效果  - Ben - Ben" border=0 alt="环境反射效果  - Ben - Ben" src="http://www.cppblog.com/images/cppblog_com/herbert/EnvMap/CubeMap1.PNG"></p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;实现原理也很简单：</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;1、把立方体环境贴图放到反射物体所知位置，并把该反射物体以外的东西映射到立方体环境贴图上。</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;2、根据摄像机到反射物体表面的点的向量a和该点的法向量n，求出a的反射向量b。</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;3、以反射向量b作为立方体环境贴图的寻址，把它所对应的颜色赋给反射物体上的点。</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;实现过程需要用到一个立方体环境贴图和一个深度表面，步骤如下：</p>
<p style="TEXT-INDENT: 2em"></p>
<fieldset><legend></legend>&nbsp;&nbsp;&nbsp;1、定义
<p>&#160;</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;LPDIRECT3DCUBETEXTURE9&nbsp;m_pReflectCubeTex;&nbsp;&nbsp;//反射的立方贴图&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;LPDIRECT3DSURFACE9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pSurfDepthCube;&nbsp;// DepthStencilSurface</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;2、初始化</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;HRESULT hr; </p>
<p style="TEXT-INDENT: 2em">&nbsp;//创建 DepthStencilSurface</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; DXUTDeviceSettings d3dSettings = DXUTGetDeviceSettings();</p>
<p style="TEXT-INDENT: 2em">&nbsp;hr = pDev-&gt;CreateDepthStencilSurface( ENVMAPSIZE,</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENVMAPSIZE,</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d3dSettings.pp.AutoDepthStencilFormat,</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D3DMULTISAMPLE_NONE,</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TRUE,</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp; m_pSurfDepthCube,</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL );</p>
<p style="TEXT-INDENT: 2em">&nbsp;if( FAILED( hr))</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;return hr;</p>
<p style="TEXT-INDENT: 2em">&nbsp;//创建立方体贴图</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; hr = pDev-&gt;CreateCubeTexture( ENVMAPSIZE,</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1,</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D3DUSAGE_RENDERTARGET,</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D3DFMT_A16B16G16R16F,</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D3DPOOL_DEFAULT,</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp; m_pReflectCubeTex,</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NULL );</p>
<p style="TEXT-INDENT: 2em">&nbsp;if( FAILED( hr) )</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;return hr;</p>
<p style="TEXT-INDENT: 2em">3、把被反射物体渲染到立方体环境贴图中</p>
<p style="TEXT-INDENT: 2em">//------------------------------------------------------------</p>
<p style="TEXT-INDENT: 2em">//desc: 渲染反射场景</p>
<p style="TEXT-INDENT: 2em">//param: pDev 设备</p>
<p style="TEXT-INDENT: 2em">//return: 是否创建成功</p>
<p style="TEXT-INDENT: 2em">//------------------------------------------------------------</p>
<p style="TEXT-INDENT: 2em">HRESULT GRenderMaterialProxy::RenderReflectScene(LPDIRECT3DDEVICE9 pDev)</p>
<p style="TEXT-INDENT: 2em">{</p>
<p style="TEXT-INDENT: 2em">&nbsp;HRESULT hr;</p>
<p style="TEXT-INDENT: 2em">&nbsp;if( pDev == NULL)</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;return E_FAIL;</p>
<p style="TEXT-INDENT: 2em">&nbsp;LPDIRECT3DSURFACE9 pSufRTBackup;&nbsp;//RenderTarget 备份</p>
<p style="TEXT-INDENT: 2em">&nbsp;LPDIRECT3DSURFACE9 pSufDSBackup;&nbsp;//DepthStencilSurface 备份</p>
<p style="TEXT-INDENT: 2em">&nbsp;pDev-&gt;GetRenderTarget( 0, &amp; pSufRTBackup);</p>
<p style="TEXT-INDENT: 2em">&nbsp;if( SUCCEEDED( pDev-&gt;GetDepthStencilSurface( &amp; pSufDSBackup) ) )</p>
<p style="TEXT-INDENT: 2em">&nbsp;{</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;pDev-&gt;SetDepthStencilSurface( m_pSurfDepthCube);</p>
<p style="TEXT-INDENT: 2em">&nbsp;}</p>
<p style="TEXT-INDENT: 2em">&nbsp;//以反射物体为中心，设置视口投影矩阵</p>
<p style="TEXT-INDENT: 2em">&nbsp;LPDIRECT3DSURFACE9 pSurf;</p>
<p style="TEXT-INDENT: 2em">&nbsp;D3DXMATRIXA16 mView, mProj;</p>
<p style="TEXT-INDENT: 2em">&nbsp;D3DXMATRIXA16 mViewDir( * GCameraManager::GetInstance()-&gt;GetCamera()-&gt;GetViewMatrix() );</p>
<p style="TEXT-INDENT: 2em">&nbsp;mViewDir._41 = mViewDir._42 = mViewDir._43 = 0.0f;</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; D3DXMatrixPerspectiveFovLH( &amp;mProj, D3DX_PI * 0.5f, 1.0f, 0.01f, 10000.0f );</p>
<p style="TEXT-INDENT: 2em">&nbsp;std::vector&lt; IRenderObject *&gt;::iterator itRenderObj;</p>
<p style="TEXT-INDENT: 2em">&nbsp;//渲染Cube 6个表面</p>
<p style="TEXT-INDENT: 2em">&nbsp;for( int iFace = 0; iFace &lt; 6; ++iFace)</p>
<p style="TEXT-INDENT: 2em">&nbsp;{</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;//获取立方体环境贴图表面，并设为设备的渲染目标</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;//注意：GetCubeMapSurface的第二个参数0表示获取立方体环境贴图的表面</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;//如果是 n则表示获取立方体环境贴图的第n层表面</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;V( m_pReflectCubeTex-&gt;GetCubeMapSurface( ( D3DCUBEMAP_FACES) iFace, 0, &amp; pSurf)); </p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;V( pDev-&gt;SetRenderTarget( 0, pSurf));</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;mView = DXUTGetCubeMapViewMatrix( iFace);</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;D3DXMatrixMultiply( &amp; mView, &amp; mViewDir, &amp; mView);</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;V( pDev-&gt;Clear( 0L, NULL, D3DCLEAR_ZBUFFER, 0x000000ff, 1.0f, 0L ));</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;//渲染被反射物体</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;for( itRenderObj = m_vpReflectObjects.begin(); itRenderObj != m_vpReflectObjects.end(); itRenderObj++)</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;(*itRenderObj)-&gt;Render( pDev, &amp; mView, &amp; mProj);</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;SAFE_RELEASE( pSurf);</p>
<p style="TEXT-INDENT: 2em">&nbsp;}</p>
<p style="TEXT-INDENT: 2em">&nbsp;if( pSufDSBackup)</p>
<p style="TEXT-INDENT: 2em">&nbsp;{</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;pDev-&gt;SetDepthStencilSurface( pSufDSBackup); //恢复深度表面</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;SAFE_RELEASE( pSufDSBackup);</p>
<p style="TEXT-INDENT: 2em">&nbsp;}</p>
<p style="TEXT-INDENT: 2em">&nbsp;pDev-&gt;SetRenderTarget( 0, pSufRTBackup); //恢复渲染目标</p>
<p style="TEXT-INDENT: 2em">&nbsp;SAFE_RELEASE( pSufRTBackup);</p>
<p style="TEXT-INDENT: 2em">&nbsp;return S_OK;</p>
<p style="TEXT-INDENT: 2em">}</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">4、根据立方体环境贴图确定反射物体的颜色(用HLSL实现）</p>
<p style="TEXT-INDENT: 2em">&nbsp;//渲染环境贴图</p>
<p style="TEXT-INDENT: 2em">&nbsp;if( m_bEnableReflect)</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;RenderReflectScene( pDev);</p>
<p style="TEXT-INDENT: 2em">&nbsp;D3DXMATRIXA16 mWorld, mView, mProj, mWorldView;</p>
<p style="TEXT-INDENT: 2em">&nbsp;CBaseCamera * pCamera = GCameraManager::GetInstance()-&gt;GetCamera();</p>
<p style="TEXT-INDENT: 2em">&nbsp;D3DXVECTOR4 vEyePos = D3DXVECTOR4(* GCameraManager::GetInstance()-&gt;GetCamera()-&gt;GetEyePt(), 0.0f);</p>
<p style="TEXT-INDENT: 2em">&nbsp;D3DXMATRIXA16 mEyePos;</p>
<p style="TEXT-INDENT: 2em">&nbsp;::D3DXMatrixTranslation( &amp; mEyePos, vEyePos.x, vEyePos.y, vEyePos.z);</p>
<p style="TEXT-INDENT: 2em">&nbsp;::D3DXMatrixTranslation( &amp; mWorld, 0.0f, 0.0f, 0.0f);</p>
<p style="TEXT-INDENT: 2em">&nbsp;mView = * pCamera-&gt;GetViewMatrix();</p>
<p style="TEXT-INDENT: 2em">&nbsp;mProj = * pCamera-&gt;GetProjMatrix();</p>
<p style="TEXT-INDENT: 2em">&nbsp;GVector4 * pLightDirList = G3DSceneManager::GetInstance()-&gt;GetLightDirList();</p>
<p style="TEXT-INDENT: 2em">&nbsp;UINT iLightCount = G3DSceneManager::GetInstance()-&gt;GetLightCount();</p>
<p style="TEXT-INDENT: 2em">&nbsp;//设置变化矩阵</p>
<p style="TEXT-INDENT: 2em">&nbsp;m_pEffect-&gt;SetMatrix("g_mWorld", &amp;mWorld); </p>
<p style="TEXT-INDENT: 2em">&nbsp;m_pEffect-&gt;SetMatrix("g_mProj", &amp;mProj);</p>
<p style="TEXT-INDENT: 2em">&nbsp;m_pEffect-&gt;SetMatrix("g_mView", &amp;mView);</p>
<p style="TEXT-INDENT: 2em">&nbsp;m_pEffect-&gt;SetTexture("g_texReflect", m_pReflectCubeTex);&nbsp;//设置立方体环境贴图</p>
<p style="TEXT-INDENT: 2em">&nbsp;m_pEffect-&gt;SetFloat("g_fReflectivity", m_fReflectivity); //设置反射率</p>
<p style="TEXT-INDENT: 2em"></p>
<p style="TEXT-INDENT: 2em">( fx文件代码如下）</p>
<p style="TEXT-INDENT: 2em">extern matrix&nbsp;&nbsp;g_mWorld;</p>
<p style="TEXT-INDENT: 2em">extern matrix&nbsp;&nbsp;g_mView;</p>
<p style="TEXT-INDENT: 2em">extern matrix&nbsp;&nbsp;g_mProj;</p>
<p style="TEXT-INDENT: 2em">texture&nbsp;&nbsp;&nbsp;&nbsp;g_texReflect;</p>
<p style="TEXT-INDENT: 2em">float&nbsp;&nbsp;&nbsp;&nbsp;g_fReflectivity = 0.9f;</p>
<p style="TEXT-INDENT: 2em">samplerCUBE g_samReflect =</p>
<p style="TEXT-INDENT: 2em">sampler_state</p>
<p style="TEXT-INDENT: 2em">{</p>
<p style="TEXT-INDENT: 2em">&nbsp;Texture = &lt;g_texReflect&gt;;</p>
<p style="TEXT-INDENT: 2em">&nbsp;MinFilter = Linear;</p>
<p style="TEXT-INDENT: 2em">&nbsp;MagFilter = Linear;</p>
<p style="TEXT-INDENT: 2em">&nbsp;MipFilter = Linear;</p>
<p style="TEXT-INDENT: 2em">};</p>
<p style="TEXT-INDENT: 2em">void VS_Reflect( float4 iPos : POSITION,</p>
<p style="TEXT-INDENT: 2em">&nbsp;float3 iNor : NORMAL,</p>
<p style="TEXT-INDENT: 2em">&nbsp;out float4 oPos : POSITION,</p>
<p style="TEXT-INDENT: 2em">&nbsp;out float3 oEnvTex : TEXCOORD0 )</p>
<p style="TEXT-INDENT: 2em">{</p>
<p style="TEXT-INDENT: 2em">&nbsp;matrix mWorldView = mul( g_mWorld, g_mView);</p>
<p style="TEXT-INDENT: 2em">&nbsp;oPos = mul( iPos, mWorldView);</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp;float3 vN = mul( iNor, mWorldView);</p>
<p style="TEXT-INDENT: 2em">&nbsp;vN = normalize( vN);</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp;float3 vEyeR = -normalize( oPos);</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp;float3 vRef;</p>
<p style="TEXT-INDENT: 2em">&nbsp;vRef = 2 * dot( vEyeR, vN) * vN - vEyeR;</p>
<p style="TEXT-INDENT: 2em">&nbsp;//vRef = reflect( vEyeR, vN);</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp;oEnvTex = vRef;</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp;oPos = mul( oPos, g_mProj);</p>
<p style="TEXT-INDENT: 2em">}</p>
<p style="TEXT-INDENT: 2em">float4 PS_Reflect( float3 iTex : TEXCOORD0 ) : COLOR</p>
<p style="TEXT-INDENT: 2em">{</p>
<p style="TEXT-INDENT: 2em">&nbsp;float4 fColor = texCUBE( g_samReflect, iTex);</p>
<p style="TEXT-INDENT: 2em">&nbsp;fColor.x = fColor.x * g_fReflectivity;</p>
<p style="TEXT-INDENT: 2em">&nbsp;fColor.y = fColor.y * g_fReflectivity;</p>
<p style="TEXT-INDENT: 2em">&nbsp;fColor.z = fColor.z * g_fReflectivity;</p>
<p style="TEXT-INDENT: 2em">&nbsp;return fColor;&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">}</p>
<p style="TEXT-INDENT: 2em">technique Tec_RenderMaterial</p>
<p style="TEXT-INDENT: 2em">{</p>
<p style="TEXT-INDENT: 2em">&nbsp;pass p0</p>
<p style="TEXT-INDENT: 2em">&nbsp;{</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;vertexShader = compile vs_2_0 VS_Reflect();</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;pixelShader = compile ps_2_0 PS_Reflect();&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp;}</p>
<p style="TEXT-INDENT: 2em">}</p>
</fieldset>
<p>&#160;</p>
<p style="TEXT-INDENT: 2em">实现效果如下：</p>
<p style="TEXT-INDENT: 2em"><img title="环境反射效果  - Ben - Ben" border=0 alt="环境反射效果  - Ben - Ben" src="http://www.cppblog.com/images/cppblog_com/herbert/EnvMap/CubeMap2.PNG"></p>
<p style="TEXT-INDENT: 2em"></p>
<p style="TEXT-INDENT: 2em"><img title="环境反射效果  - Ben - Ben" alt="环境反射效果  - Ben - Ben" width=0 height=0/> </p>
</div>
</div>
</div>
<img src ="http://www.cppblog.com/koilin/aggbug/97438.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koilin/" target="_blank">koilin</a> 2009-09-28 10:27 <a href="http://www.cppblog.com/koilin/archive/2009/09/28/97438.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DX笔记</title><link>http://www.cppblog.com/koilin/archive/2009/09/26/97273.html</link><dc:creator>koilin</dc:creator><author>koilin</author><pubDate>Sat, 26 Sep 2009 02:57:00 GMT</pubDate><guid>http://www.cppblog.com/koilin/archive/2009/09/26/97273.html</guid><wfw:comment>http://www.cppblog.com/koilin/comments/97273.html</wfw:comment><comments>http://www.cppblog.com/koilin/archive/2009/09/26/97273.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koilin/comments/commentRss/97273.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koilin/services/trackbacks/97273.html</trackback:ping><description><![CDATA[<p>1、D3DXMatrixPerspectiveFovLH()<br>DirectX中投影变换D3DXMatrixPerspectiveFovLH（）其实产生的变换矩阵不是将3D物体转换为2D平面画面的变换。实际上是把3D世界的物体变换到(1,1,0) (-1,1,0) (-1,-1,0) (1,-1,0) (1,1,1) (-1,1,1) (-1,-1,1) (1,-1,1)这个小盒子中。在Jim Adams 的著作&lt;Role playing games with DriectX 8.0&gt;和Frank Luna 的著作中&lt;Introduction to 3D Game Programming with DirectX9.0&gt;都把这个变换矩阵讲成从3D到2D的变换。实际上在DirectX中3D到2D的变换是由SDK自己完成的。而我们要做的是把3D世界变换到上面那个小盒子中。</p>
<p>本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/normallife/archive/2008/12/24/3597214.aspx">http://blog.csdn.net/normallife/archive/2008/12/24/3597214.aspx</a><br><br>2、LPDIRECT3DSURFACE9<br>多重贴图其实就是先按照基本帖图方法为模型指定帖图,<br>然后读入第二个帖图调用D3DXLoadSurfaceFromSurface(...)把第二个的部分贴到第一上.<br>只是D3DXLoadSurfaceFromSurface()函数不能直接操作已经读入帖图文件定向到设备上的纹理对象<br><br>Surfaces是什么：</p>
<p style="TEXT-INDENT: 2em">　　 通俗的讲surfaces就是一个二维的矩形平面。在DX9中，与其对应的com接口为IDirect3DSurface9，LPDIRECT3DSURFACE9。<br><br>Surfaces的作用：</p>
<p style="TEXT-INDENT: 2em">　　 作为一个矩形平面，surfaces用来在屏幕上显示平面图象，即从文件中读取图象数据呈现给用户<br><br>IDirect3DSurface9的使用一般过程：</p>
<p style="TEXT-INDENT: 2em">　　 声明： LPDIRECT3DSURFACE9</p>
<p style="TEXT-INDENT: 2em">　　 创建： CreateOffscreenPlainSurface(&#8230;)</p>
<p style="TEXT-INDENT: 2em">　　 获取图象信息： D3DXGetImageInfoFromFile(&#8230;)</p>
<p style="TEXT-INDENT: 2em">　　 装载到surfaces中： D3DXLoadSurfaceFromFile(&#8230;)</p>
<p style="TEXT-INDENT: 2em">　　 获取back buffer地址： GetBackBuffer(&#8230;)</p>
<p style="TEXT-INDENT: 2em">　　 显示： UpdateSurface(&#8230;)</p>
<p style="TEXT-INDENT: 2em">　　 释放内存 Release()<br><br>3、GetRenderTarget()<br>将对象渲染到指定目标上<br><br>4、<u>GetDepthStencilSurface</u></p>
<p><span>以下示例代码显示了如何使用<u><span>IDirect3DDevice9::GetDepthStencilSurface</span></u>方法取得设备拥有的深度缓存。</span></p>
<p><span>LPDIRECT3DSURFACE9 pZBuffer;<br><br>5、 g_pEffect-&gt;CommitChanges()<br></span></p>
<span><span>
<p>对用通道中的状态设置，通过CommitChanges()更新变换,<br><br>6、</p>
<p>&nbsp;&nbsp;&nbsp; </span></span></p>
<p><span>m_d3dDevice-&gt;GetDepthStencilSurface( &amp;pZBuffer );</span></p>
<p style="TEXT-INDENT: 2em"><br><br><br><br>&nbsp;</p>
<img src ="http://www.cppblog.com/koilin/aggbug/97273.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koilin/" target="_blank">koilin</a> 2009-09-26 10:57 <a href="http://www.cppblog.com/koilin/archive/2009/09/26/97273.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>3dsMax导出x模型</title><link>http://www.cppblog.com/koilin/archive/2009/09/25/97249.html</link><dc:creator>koilin</dc:creator><author>koilin</author><pubDate>Fri, 25 Sep 2009 11:40:00 GMT</pubDate><guid>http://www.cppblog.com/koilin/archive/2009/09/25/97249.html</guid><wfw:comment>http://www.cppblog.com/koilin/comments/97249.html</wfw:comment><comments>http://www.cppblog.com/koilin/archive/2009/09/25/97249.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koilin/comments/commentRss/97249.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koilin/services/trackbacks/97249.html</trackback:ping><description><![CDATA[<p>突然才发现3dsMax竟然不能到处X模型，装了3D模型转换器也没有成功，磨去了一个下午~~现在终于解决了<br><a href="http://www.andytather.co.uk/Panda/directxmax.aspx">http://www.andytather.co.uk/Panda/directxmax.aspx</a><br>上面下载panda exporter，是个DLE文件，然后放在3dsMax的安装路径下plugins文件夹下，之后在3dsMax的模型导出里面就可以选择.x模型了。</p>
<img src ="http://www.cppblog.com/koilin/aggbug/97249.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koilin/" target="_blank">koilin</a> 2009-09-25 19:40 <a href="http://www.cppblog.com/koilin/archive/2009/09/25/97249.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>纹理贴图</title><link>http://www.cppblog.com/koilin/archive/2009/09/25/97214.html</link><dc:creator>koilin</dc:creator><author>koilin</author><pubDate>Fri, 25 Sep 2009 02:43:00 GMT</pubDate><guid>http://www.cppblog.com/koilin/archive/2009/09/25/97214.html</guid><wfw:comment>http://www.cppblog.com/koilin/comments/97214.html</wfw:comment><comments>http://www.cppblog.com/koilin/archive/2009/09/25/97214.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koilin/comments/commentRss/97214.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koilin/services/trackbacks/97214.html</trackback:ping><description><![CDATA[<p>纹理坐标，其u和v值都在0~1之间，然而，如果我们给了一个超出范围的值怎么办呢？在DirectX和OpenGL中，早已为我们想到了这个问题。在DirectX中，有一种叫做Texture Addressing Mode的东西（在OpenGL中有Wraping Mode），提供了几种常见的方式：<br>typedef enum D3DTEXTUREADDRESS<br>{<br>D3DTADDRESS_WRAP = 1,<br>D3DTADDRESS_MIRROR = 2,<br>D3DTADDRESS_CLAMP = 3,<br>D3DTADDRESS_BORDER = 4,<br>D3DTADDRESS_MIRRORONCE = 5,<br>D3DTADDRESS_FORCE_DWORD = 0&#215;7fffffff,<br>} D3DTEXTUREADDRESS, *LPD3DTEXTUREADDRESS;</p>
<p>Wrap，类似于平铺，就是把这个图片复制很多份，然后像铺瓦片一样一片一片拼起来。</p>
<p>Mirror，和Wrap差不多，唯一不同的是相邻两个拷贝之间是镜像关系。</p>
<p>Clamp，就是超出部分直接抛弃。</p>
<p>Mirror_Once，就是先将图片镜像一份，从而u和v的坐标范围就变成了-1~1了。</p>
<img src ="http://www.cppblog.com/koilin/aggbug/97214.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koilin/" target="_blank">koilin</a> 2009-09-25 10:43 <a href="http://www.cppblog.com/koilin/archive/2009/09/25/97214.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mathtype 用法、技巧</title><link>http://www.cppblog.com/koilin/archive/2009/09/24/97161.html</link><dc:creator>koilin</dc:creator><author>koilin</author><pubDate>Thu, 24 Sep 2009 13:11:00 GMT</pubDate><guid>http://www.cppblog.com/koilin/archive/2009/09/24/97161.html</guid><wfw:comment>http://www.cppblog.com/koilin/comments/97161.html</wfw:comment><comments>http://www.cppblog.com/koilin/archive/2009/09/24/97161.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koilin/comments/commentRss/97161.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koilin/services/trackbacks/97161.html</trackback:ping><description><![CDATA[<div>mathtype 用法、技巧</div>
<div>MathType5.1使用技巧集合<a href="http://soft.rdxx.com/Apply/Tool/ToolOther/2006-5/6/171027065617102798211157.shtml"><u><font color=#0000ff>http://soft.rdxx.com/Apply/Tool/ToolOther/2006-5/6/171027065617102798211157.shtml</font></u></a></div>
<div>MathType 使用技巧教程<a href="http://www.blog.edu.cn/user1/1888/archives/2006/1540995.shtml"><u><font color=#0000ff>http://www.blog.edu.cn/user1/1888/archives/2006/1540995.shtml</font></u></a></div>
<div>Word公式编辑器简明使用手册<a href="http://soft.yesky.com/lesson/442/2398942.shtml"><u><font color=#0000ff>http://soft.yesky.com/lesson/442/2398942.shtml</font></u></a></div>
<div>&nbsp;</div>
<div>MathType是&#8220;公式编辑器&#8221;的功能强大而全面的版本。如果要经常在文档中编排各种复杂的数学、化学公式，则MathType是非常合适的选择。MathType用法与&#8220;公式编辑器&#8221;一样简单易学，而且其额外的功能使你的工作更快捷，文档更美观。 <br>　　MathType包括：<br>　　(1)Euclid字体设置了几百个数学符号。<br>　　(2)具有应用于几何、化学及其他方面的新样板和符号。<br>　　(3)专业的颜色支持。<br>　　(4)为全球广域网创建公式。<br>　　(5)将输出公式译成其他语言(例如：TeX、AMS-TeX、LaTeX、MathML及自定义语言)的翻译器。<br>　　(6)用于公式编号、格式设置及转换Microsoft Word文档的专用命令。<br>　　(7)可自定义的工具栏，可容纳最近使用过的几百个符号、表达式和公式。<br>　　(8)可自定义的键盘快捷键。</div>
<div><strong><font color=#0099cc>小技巧</font></strong></div>
<div>　　在编辑word文档时，如果需要录入公式将是一件非常痛苦的事情。利用Mathtype作为辅助工具，会为文档的公式编辑和修改提供很多方便。下面介绍几种mathtype中比较重要的技巧</div>
<div>　　<font color=#0099cc>一、批量修改公式的字号和大小<br></font>　　论文中，由于排版要求往往需要修改公式的大小，一个一个修改不仅费时费力还容易使word产生非法操作。<br>　　解决办法，批量修改：双击一个公式，打开mathtype，进入编辑状态，<br>　　点击size菜单-&gt;define-&gt;字号对应的pt值，一般五号对应10pt，小四对应12pt<br>　　其他可以自己按照具体要求自行调节。其他默认大小设置不推荐改动。<br>　　然后点击preference-&gt;equation preference -&gt; save to file -&gt;存一个与默认配置文件不同的名字，然后关闭mathtype回到word文档。<br>　　点击word界面上的mathtype -&gt;format equation -&gt; load equation preferrence选项下面的browse按钮，选中刚才存的配置文件，点选whole document选项，确定，就安心等着公式一个个改过来。<br>&nbsp;&nbsp;&nbsp; <font color=#0099cc>二、word中被行距被撑大的解决方法<br></font>&nbsp;&nbsp;&nbsp; 在Word文档中插入公式后，行距便会变得很大，简单的调整段落的行距是行不通的。逐个点选公式，然后拖动下角的箭头倒可以将它任意放大缩小以调整行距，但是如果在一篇文档中使用了大量的公式，这种操作显然太麻烦，手工操作也容易使得公式大小不一，一些小的公式还会影响到显示的效果。下面介绍两种调整公式行距的方法：<br>　　&#183;全部一次调整<br>　　依次单击菜单命令&#8220;文件&#8594;页面设置&#8221;。单击&#8220;文档网格&#8221;选项卡，如图1所示。选中&#8220;无网格&#8221;，单击&#8220;确定&#8221;按钮就可以了。<br>　　小提示<br>　　此种方法可以轻松地对全文档进行行距的调整，而无需对公式本身进行任何操作，非常简便。<br>　　&#183;局部调整方法<br>　　在正篇文章中如果你想只对其中的一部分内容进行类似行距的调整，可以按下面的步骤进行：<br>　　选中要进行操作的那些行，依次单击菜单命令&#8220;格式&#8594;段落&#8221;，打开&#8220;段落&#8221;对话框；单击&#8220;缩进和间距&#8221;选项卡，将间距的&#8220;段前&#8221;和&#8220;段后&#8221;都调整为&#8220;0行&#8221;；将&#8220;如果定义了文档网格，则对齐网格&#8221;复选项前的小勾去掉，如图2所示，最后单击&#8220;确定&#8221;按钮即可。</div>
<div>&nbsp;&nbsp;&nbsp; 快速调整被公式撑大的Word行距大家在Word文档中某一行使用&#8220;公式编辑器&#8221;输入数学公式后，往往公式所在行的行距明显变大，就好像公式把这一行和其它行给撑开了一样，非常不美观，使用改变行距的命令也不能解决问题。<br>　　解决这个问题有两种方法：<br>　　首先是修改公式大小。点击要修改的数学公式，每个公式又六个控制点，将鼠标移动到控制点上，当光标变成&#8220;双箭头&#8221;时，通过拖动我们可以把缩小减小行距。这种方法适用于只含有极少符号的数学公式，如果符号过多，缩小后的公式会因为字体过小而看不清楚。</div>
<div>　　另外一种方法是点击&#8220;文件&#8221;菜单下的&#8220;页面设置&#8221;项。在&#8220;文档网格&#8221;标签页中的&#8220;网格&#8221;一栏，勾选&#8220;无网格&#8221;项（如图）。这样能很大程度上缓解行距不等的情况，然后再进行公式大小的微调，就能取得很好的显示效果。</div>
<div><br>&nbsp;<br><font color=#0099cc><strong>mathtype使用技巧</strong></font></div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; 在编辑word文档时，如果需要录入公式将是一件非常痛苦的事情。利用Mathtype作为辅助工具，会为文档的公式编辑和修改提供很多方便。 下面介绍几种mathtype中比较重要的技巧 <br>&nbsp;&nbsp;&nbsp; 一、 批量修改公式的字号和大小 <br>&nbsp;&nbsp;&nbsp; 论文中，由于排版要求往往需要修改公式的大小，一个一个修改不仅费时费力还容易使word产生非法操作。解决办法，批量修改： 双击一个公式，打开mathtype，进入编辑状态，点击size菜单－》define-&gt;字号对应的pt值，一般五号对应10pt，小四对应12pt ,其他可以自己按照具体要求自行调节。其他默认大小设置不推荐改动。然后点击preference-&gt;equation preference -&gt; save to file -&gt;存一个与默认配置文件不同的名字，然后关闭mathtype回到word文档。点击word界面上的mathtype -&gt;format quation -&gt; load equation preferrence选项下面的browse按钮，选中刚才存的配置文件，点选whole document选项，确定，就安心等着公式一个个改过来。 <br>&nbsp;&nbsp;&nbsp; 二、公式的自动编号和引用功能 <br>&nbsp;&nbsp;&nbsp; mathtype提供四种类型的公式输入 inline（文本中的公式） display style 没有编号的单行公式 ,left numbered display style 编号在左边, right ... 编号在右边 ,在编辑公式时，如果出现删除公式的情况，采用手动编号会使得修改量变得很大，采用自动编号和自动引用会方便很多，这些功能都已经在安装mathtype后集成在word的按钮上了，将鼠标悬停在相应的按钮上就可以看到具体的功能描述，由于应用十分简单，就不再此赘述了。 <br>&nbsp;&nbsp;&nbsp; 三、与latex代码之间的转换 <br>&nbsp;&nbsp;&nbsp; mathtype编辑器中的translator 里面提供了向latex,amslatex等格式的方便转换。选择相应的翻译目标后，将下面的两个inculde 选项去掉，你的mathtype就可以直接将公式翻译称为latex代码了，这对于latex的初学者和记不住latex代码的人非常重要。 <br><br>转自：<a href="http://blog.chinaunix.net/u1/59015/showart_1845027.html">http://blog.chinaunix.net/u1/59015/showart_1845027.html</a><br></div>
<img src ="http://www.cppblog.com/koilin/aggbug/97161.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koilin/" target="_blank">koilin</a> 2009-09-24 21:11 <a href="http://www.cppblog.com/koilin/archive/2009/09/24/97161.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mean Value coordinates</title><link>http://www.cppblog.com/koilin/archive/2009/09/19/96708.html</link><dc:creator>koilin</dc:creator><author>koilin</author><pubDate>Sat, 19 Sep 2009 05:58:00 GMT</pubDate><guid>http://www.cppblog.com/koilin/archive/2009/09/19/96708.html</guid><wfw:comment>http://www.cppblog.com/koilin/comments/96708.html</wfw:comment><comments>http://www.cppblog.com/koilin/archive/2009/09/19/96708.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koilin/comments/commentRss/96708.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koilin/services/trackbacks/96708.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>针对</span><span>Wachspress</span><span>坐标只能定义在凸多边形上，</span><span>Floater<sup>[11,12]</sup></span><span>等运用均值理论定义了任意多面体的重心坐标，</span><span>Ju<sup>[13]</sup></span><span>等人在此基础上对空间三角形网格的</span><span>MVC</span><span>作了详细研究。</span><span>MVC</span><span>定义如下：以多面体内的点</span><span><img src="file:///d:/Temp/msohtmlclip1/01/clip_image002.gif" width=11 height=14 v:shapes="_x0000_i1025"></span><span>为中心做一个单位球</span><span><img src="file:///d:/Temp/msohtmlclip1/01/clip_image004.gif" width=16 height=18 v:shapes="_x0000_i1026"></span><span>，多面体上任意点</span><span><img src="file:///d:/Temp/msohtmlclip1/01/clip_image006.gif" width=23 height=17 v:shapes="_x0000_i1027"></span><span>与</span><span><img src="file:///d:/Temp/msohtmlclip1/01/clip_image002.gif" width=11 height=14 v:shapes="_x0000_i1028"></span><span>形成的单位方向向量</span><span><img src="file:///d:/Temp/msohtmlclip1/01/clip_image009.gif" width=85 height=22 v:shapes="_x0000_i1029"></span><span>构成单位球</span><span><img src="file:///d:/Temp/msohtmlclip1/01/clip_image004.gif" width=16 height=18 v:shapes="_x0000_i1030"></span><span>上的单位法向。根据</span><span>Stokes</span><span>公式，球上所有单位法向的积分为</span><span>0</span><span>，我们可以得到</span><span><img src="file:///d:/Temp/msohtmlclip1/01/clip_image002.gif" width=11 height=14 v:shapes="_x0000_i1031"></span><span>的表达式</span>
<p align=right><span></span><span>&nbsp;</span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>(</span><span><span>3</span></span><span>)</span></p>
<p><span>对于多面体上参数化的点</span><span><img src="file:///d:/Temp/msohtmlclip1/01/clip_image006.gif" width=23 height=17 v:shapes="_x0000_i1033"></span><span>可以表示为</span><span><img src="file:///d:/Temp/msohtmlclip1/01/clip_image016.gif" width=79 height=28 v:shapes="_x0000_i1034"></span><span>，我们考虑多面体的一个三角形面</span><span><img src="file:///d:/Temp/msohtmlclip1/01/clip_image018.gif" width=14 height=14 v:shapes="_x0000_i1035"></span><span>，对应的三个顶点为</span><span><img src="file:///d:/Temp/msohtmlclip1/01/clip_image020.gif" width=50 height=20 v:shapes="_x0000_i1036"></span><span>，</span><span><img src="file:///d:/Temp/msohtmlclip1/01/clip_image022.gif" width=25 height=18 v:shapes="_x0000_i1037"></span><span>即为该三角形的经典重心坐标。三角形单位球</span><span><img src="file:///d:/Temp/msohtmlclip1/01/clip_image004.gif" width=16 height=18 v:shapes="_x0000_i1038"></span><span>上的投影为球面三角形</span><span><img src="file:///d:/Temp/msohtmlclip1/01/clip_image025.gif" width=14 height=16 v:shapes="_x0000_i1039"></span><span>，与三个顶点形成的方向向量可以组成一个楔形，如</span><span><span><span><span>图</span></span><span><span> <span>1</span></span></span></span></span><span>所示。从而</span><span><img src="file:///d:/Temp/msohtmlclip1/01/clip_image002.gif" width=11 height=14 v:shapes="_x0000_i1040"></span><span>可以离散化为</span></p>
<p align=right><span></span><span>&nbsp;</span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>(</span><span><span>4</span></span><span>)</span></p>
<p><span>其中</span><span><img src="file:///d:/Temp/msohtmlclip1/01/clip_image030.gif" width=101 height=37 v:shapes="_x0000_i1042"></span><span>，</span><span><img src="file:///d:/Temp/msohtmlclip1/01/clip_image032.gif" width=92 height=37 v:shapes="_x0000_i1043"></span><span>。</span></p>
<p align=center><span><img src="file:///d:/Temp/msohtmlclip1/01/clip_image034.jpg" width=129 height=117 v:shapes="图片_x0020_201"></span></p>
<p><a name=_Ref226350242></a><a name=_Ref226350248><span><span>图</span> </span></a><span><span><span><span>1</span></span></span></span><span></span><span><span> </span></span><span><span>均值坐标对应的楔形图</span></span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>在球面三角形</span><span><img src="file:///d:/Temp/msohtmlclip1/01/clip_image025.gif" width=14 height=16 v:shapes="_x0000_i1044"></span><span>上定义一个均值向量</span><span><img src="file:///d:/Temp/msohtmlclip1/01/clip_image037.gif" width=14 height=14 v:shapes="_x0000_i1045"></span><span>，其中</span><span><img src="file:///d:/Temp/msohtmlclip1/01/clip_image039.gif" width=157 height=37 v:shapes="_x0000_i1046"></span><span>。根据均值理论，</span><span><img src="file:///d:/Temp/msohtmlclip1/01/clip_image041.gif" width=126 height=34 v:shapes="_x0000_i1047"></span><span>，可以得到</span><span><img src="file:///d:/Temp/msohtmlclip1/01/clip_image043.gif" width=14 height=18 v:shapes="_x0000_i1048"></span><span>，最后归一化得到</span><span><img src="file:///d:/Temp/msohtmlclip1/01/clip_image002.gif" width=11 height=14 v:shapes="_x0000_i1049"></span><span>相对于多面体上顶点</span><span><img src="file:///d:/Temp/msohtmlclip1/01/clip_image046.gif" width=11 height=18 v:shapes="_x0000_i1050"></span><span>的重心坐标</span><span><img src="file:///d:/Temp/msohtmlclip1/01/clip_image048.gif" width=69 height=45 v:shapes="_x0000_i1051"></span><span>。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>由于在均值坐标的建立过程中，多面体上点</span><span><img src="file:///d:/Temp/msohtmlclip1/01/clip_image006.gif" width=23 height=17 v:shapes="_x0000_i1052"></span><span>与任意点</span><span><img src="file:///d:/Temp/msohtmlclip1/01/clip_image002.gif" width=11 height=14 v:shapes="_x0000_i1053"></span><span>之间采用欧氏距离，当多面体为凹时，此距离包含了多面体的外部，从而均值坐标不满足内部局部性。同时均值向量和多面体表面的法向一致，当多面体为凹时，均值坐标可能为负，因此均值坐标不满足非负性。</span></p>
<img src ="http://www.cppblog.com/koilin/aggbug/96708.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koilin/" target="_blank">koilin</a> 2009-09-19 13:58 <a href="http://www.cppblog.com/koilin/archive/2009/09/19/96708.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>