﻿<?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>IT博客-平民程序 - linghuye's blog-随笔分类-置顶项目</title><link>http://www.cnitblog.com/linghuye/category/935.html</link><description>&lt;p align=right style="background-color: transparent"&gt;天下风云出我辈，一入江湖岁月催。皇图霸业谈笑中，不胜人生一场醉。提剑跨骑挥鬼雨，白骨如山鸟惊飞。尘事如潮人如水，只笑江湖几人回。&lt;p align=right style="background-color: transparent;"&gt;&lt;/p&gt;</description><language>zh-cn</language><lastBuildDate>Thu, 05 Feb 2015 16:40:53 GMT</lastBuildDate><pubDate>Thu, 05 Feb 2015 16:40:53 GMT</pubDate><ttl>60</ttl><item><title>APE分轨整轨互转工具</title><link>http://www.cnitblog.com/linghuye/archive/2015/02/05/89980.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Thu, 05 Feb 2015 06:01:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2015/02/05/89980.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/89980.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2015/02/05/89980.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/89980.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/89980.html</trackback:ping><description><![CDATA[现有的APE分轨整轨互转用的工具方案很麻烦，用Monkey Audio的SDK自己写个了工具，可以将分轨ape合并成整轨ape并自动生成cue文件，或者根据cue文件将整轨ape拆分为分轨。<br /><a href="http://www.cnitblog.com/Files/linghuye/MyAPEToolkit.rar" title="APE分轨整轨互转工具"><br />APE分轨整轨互转工具</a><img src ="http://www.cnitblog.com/linghuye/aggbug/89980.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2015-02-05 14:01 <a href="http://www.cnitblog.com/linghuye/archive/2015/02/05/89980.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenGL中所有受当前ModelViewMatrix影响的参数设定</title><link>http://www.cnitblog.com/linghuye/archive/2007/10/19/35091.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Fri, 19 Oct 2007 15:20:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2007/10/19/35091.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/35091.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2007/10/19/35091.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/35091.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/35091.html</trackback:ping><description><![CDATA[<p>glLightfv(GL_LIGHT0, GL_POSITION, lightPos);<br>The position is transformed by the modelview matrix when glLight is called (just as if it were a point), and it is stored in eye coordinates.<br>如上,传入的光位置参数是定义在模型坐标系下的,但被保存在镜头空间中(即固定管线将其视为镜头坐标系下的语义使用).且除非再次指定,该值不变,即相当于光的位置相对镜头固定.这通常不是我们想要的,通常光应该相对世界固定(如DirectX).所以需要在每次变更ModelViewMatrix后再次设置光的位置,以表明其相对世界固定.</p>
<p><br>glClipPlane:<br>When you call glClipPlane, equation is transformed by the inverse of the modelview matrix and stored in the resulting eye coordinates. Subsequent changes to the modelview matrix have no effect on the stored plane-equation components. <br>即不同于glLightfv, glClipPlane指定的平面公式参数受到当前ModelViewMatrix逆矩阵的影响(没想到吧),实际存储的数值为: 传入的平面公式参数四元组 P 乘以 (ModelViewMatrix ^ -1). 需要特别指出的是,这里的计算是P * M,而不是OpenGL习惯的M * V.</p>
<p><br>glTexGenfv:<br>与glClipPlane相同,GL_EYE_LINEAR模式下的纹理坐标自动生成,参数指定的平面公式系数4元组,受到当前ModelViewMatrix逆矩阵影响后存储在镜头空间,即: P * (ModelViewMatrix ^ -1)。但GL_OBJECT_LINEAR没有这种特性。<br>推论:<br>1.分别为(s,t,r,q)这4个纹理坐标分量定义一个平面公式,实际上可以理解为定义了一个纹理坐标转换矩阵Ma,这个Ma与纹理变换矩阵glMatrixMode(GL_TEXTURE)机制是相互独立的,也就是说纹理坐标自动生成机制可以提供一个额外的纹理变换矩阵. 通过glTexGenfv(GL_x, GL_EYE_PLANE, ...)可以指定矩阵的4个行向量,记这个矩阵为Ma. </p>
<p>2.平面公式定义下的纹理坐标自动生成可以总结为 M * V.</p>
<p>3.在GL_OBJECT_LINERAR模式下, V是模型坐标系的坐标, M等于Ma.</p>
<p>4.在GL_EYE_LINEAR模式下就复杂多了,glTexGeni(GL_X, GL_TEXTURE_GEN_MODE, GL_EYE_LINERE)负责直接获得镜头空间的坐标值,但是得到后要先乘以使用glTexGenfv(GL_X, GL_EYE_PLANE, m)指定的平面方程(STRQ这4个平面方程组合相当于一个4x4矩阵),再乘以当前ModelViewMatrix的逆矩阵,即设V是取得的镜头坐标系下的坐标,M = Ma * (ModelViewMatrix ^ -1).其中ModelViewMatrix是执行glTexGenfv时的ModelViewMatrix.Ma是平面方程组合矩阵,纹理坐标总公式为:<br></p>
<p>&nbsp;Vtex = Ma * (ModelViewMatrix1 ^ -1) * TextureMatrix * ModelViewMatrix2 * Vobject<br>其中: Ma是glTexGenfv(GL_x, GL_EYE_PLANE, ...)定义的平面公式矩阵<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ModelViewMatrix1是指定glTexGenfv时的ModelViewMatrix,为了得到视图矩阵的逆矩阵,我们总是应该在当前只指定了gluLookAt的时候调用glTexGenfv.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ModelViewMatrix2是实际渲染时的ModelViewMatrix<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TextureMatrix是纹理矩阵<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Voject是模型顶点坐标.<br><br>5.假设当前Batch渲染时的ModelViewMatrix等于glTexGenfv指定时的ModelViewMatrix,且没有TextureMatrix作用,依矩阵乘法结合率,则有 Vtex = Ma * Vobject,等同与GL_OBJECT_LINERAR模式.这就是为什么有的时候GL_EYE_LINEAR和GL_OBJECT_LINEAR的图像没有差别的原因.</p>
<p>6.假设当前Batch渲染时的ModelViewMatrix不等于glTexGenfv指定时的ModelViewMatrix,通常的技巧设置glTexGenfv指定时的ModelViewMatrix为纯ViewMatrix(即用gluLookAt指定),随后镜头不再变换,ModelViewMatrix仅追加ModelMatrix变换,ViewMatrix不变,即有:<br>Vtex = Ma * (ViewMatrix ^ -1) * ModelViewMatrix * Vobject = Ma * (ViewMatrix ^ -1) * Veye = Ma * Vworld<br>就是说Ma神奇地作用到了物体的世界坐标上了,这就是Project Texture, Shadow Map使用固定管线渲染时大量应用的技巧.</p>
<p>Shader编程大大降低了一些图形学技巧的复杂性,但我坚持要知其然,知其所以然.</p><img src ="http://www.cnitblog.com/linghuye/aggbug/35091.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2007-10-19 23:20 <a href="http://www.cnitblog.com/linghuye/archive/2007/10/19/35091.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenGL/DirectX高级编程Bug</title><link>http://www.cnitblog.com/linghuye/archive/2007/06/12/28369.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Tue, 12 Jun 2007 14:59:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2007/06/12/28369.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/28369.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2007/06/12/28369.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/28369.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/28369.html</trackback:ping><description><![CDATA[<p>低级编程错误的根由是粗心造成的,而这里所谓高级编程错误源自各版本驱动程序的Bug和一些不合理的API接口,此类错误通常令人吐血,出现一个都要耗费数小时甚至数天来解决,这是个实际经验累计的过程,痛苦而又必要.<br><br>1.要求D3DXCreateTexture创建D3DFMT_A8R8G8B8格式纹理,在某些显卡(MX4000,Intel82815,FX5200)的某些驱动程序环境下,会意外地返回D3DFMT_A4R4G4B4,导致程序写内存错误,系统崩溃,蓝屏报告显卡驱动程序DLL错误,文字呈现白色方块等一系列错误现象.切记,不能相信D3DXCreateTexture.</p>
<p>2.表象上,单句g_D3DDevice-&gt;DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, s_vec, sizeof(LineVertex));渲染2D图象,消耗很高,达100-200ws,但实际应为4-10ws,且此消耗值不稳定浮动.将原顶点格式从D3DFVF_XYZRHW | D3DFVF_DIFFUSE改成D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX0后下降至正常的数值,但其他格式的渲染消耗又上升.此渲染状态的切换导致的消耗,非DrawPrimitiveUP之过,只因此句Draw恰逢渲染状态切换.Shader状态变化(SetVertexShader)伴随在谁身上,谁的消耗就最大,该消耗是100ws级的.</p>
<p>3.使用XP远程桌面登录启动D3D游戏时,DirectX设备创建失败.具体原因是,远程登录方式无法使用显卡硬件,在获取显卡硬件设备GetDeviceCaps时错误.</p>
<p>4.SetTexture(stage, NULL)在高端显卡上会关闭该stage的纹理作用,在低端显卡上不会.据MSDN理论上其含义应该等同于设置为一个黑色不透明的纹理,但NVidia显卡遵循OpenGL标准,等同于设置一个全白纹理.有些显卡会自动禁用该纹理层,等同D3DTOP_DISABLE. <br></p>
<p>5.Nvidia 7950GT上,使用&nbsp;<br>glInterleavedArrays(fvf, 0, pVertexPointer);<br>glDrawElements(primType, primCount, GL_UNSIGNED_SHORT, pIndices);<br>memset(pVertexPointer, 0, size);<br>最后一步的数据清空竟然会影响glDrawElements的结果!导致渲染错误.其他显卡无此问题,最新驱动仍未解决此问题,只能使用glXXXPointer来实现兼容.<br><br>6.ATI的GLSL其慢无比. X1650XT比Geforce6150高出一代,而同一个GLSL Skinning animation Shader, Geforce 6150跑200多帧,而X1650竟然只跑39帧,用HLSL实现的Shader则可以跑500帧.所以除非ATI对驱动程序作优化,这个问题无法解决.<br><br>7.在激活纹理坐标数组模式时,即使启用了自动生成纹理,也需要显示设置glTexCoordPointer为NULL,否则有崩溃的可能.<br><br>8.ATI 7500在CreateVertexBuffer时指明顶点FVF,而后在DrawIndexPrimitives时蓝屏崩溃(6.5驱动),改为不指明FVF,即设为0后正常. <br><br>9.渲染出的场景全白, glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE_ARB, GL_COMPARE_R_TO_TEXTURE_ARB) 被打开.&nbsp; <br><br>10.OpenGL中压缩纹理作glTexImage2D后马上glGetTexImage,会取不到数据,不稳定. ATI 1650XT 驱动8.1,发现此问题. Nvidia显卡无此问题,似乎glTexImage2D是异步的.<br><br>11.在不支持NPOT的机器上,创建非2的幂次方的RenderTarget纹理,使用D3DXCreateTexture,返回的纹理尺寸可能被扩整到2的幂次方大小,此时需要特别注意最后将RenderTarget渲染到屏幕的范围.<br><br>12.在RenderTarget上绘图,先ClearBuffer,然后将场景画在RenderTarget上. 最后将RenderTarget以FVF_XYZRHW的格式画一个Quad到屏幕上. 其他显卡均正常,但在ATI 2400XT上只看到ClearBuffer的背景,没看到场景. 更换数款驱动程序无效,最后吐血发现是XYZRHW的w值为0.0会产生此灵异现象,改为1.0后解决. 仅在ATI 2400XT上发现此Bug,其间陆续借用别人机器调整了6个小时,痛苦<br>.<br></p>
13.DX8.1同一个游戏程序,频繁启动,关闭,即频繁启动DX,关闭DX。 或者在多个游戏窗口间切换,(可能伴随启动关闭),发生D3DRS_ALPHABLEND状态丢失现象,即原本始终打开的D3DRS_ALPHABLEND,被莫名关闭,原因不明.
<img src ="http://www.cnitblog.com/linghuye/aggbug/28369.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2007-06-12 22:59 <a href="http://www.cnitblog.com/linghuye/archive/2007/06/12/28369.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>贴图方式总结及备忘</title><link>http://www.cnitblog.com/linghuye/archive/2006/11/02/18786.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Thu, 02 Nov 2006 15:58:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2006/11/02/18786.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/18786.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2006/11/02/18786.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/18786.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/18786.html</trackback:ping><description><![CDATA[<span style="FONT-SIZE: 12pt">实践之后才会觉得书中的每句话都富有含意,总结以备忘.</span><br>1. Light Mapping,<span style="FONT-SIZE: 12pt">光照贴图,准确地说是漫反射光照贴图,所以也有简称反射贴图的.<br></span><span style="FONT-SIZE: 12pt">按</span>&lt;Realtime Rendering&gt;<span style="FONT-SIZE: 12pt">定义如下</span>: For static lighting in an environment, the diffuse component on any surface remains the same from any angle. Because of this view-independence, the contribution of light to a surface could be captured in a texture structure attached to a surface. By using a seperate, precomputed texture that captured the lighting contributions, and multiplying it with the underlying surface, one can achieve Phong-like shading.<br>Reference: <a title=http://www.flipcode.com/articles/article_lightmapping.shtml href="http://www.flipcode.com/articles/article_lightmapping.shtml" target=""><span style="FONT-SIZE: 14pt">http://www.flipcode.com/articles/article_lightmapping.shtml</span></a><br><br><span style="FONT-SIZE: 14pt">2.AphaMapping,Alpha<span style="FONT-SIZE: 12pt">贴图</span>,Before testing and replacing the Z-buffer value, there needs to be a test of the alpha value. If alpha is 0, then nothing further is done for the pixel. If this additional test is not done, the tree's background color will not affect the pixel's color, but will potentially affect the z-value, which can lead to rendering errors.<br><br>3.Gloss mapping: A gloss map is a texture that changes the contribution of the specular component over the surface.<br><br>4.Cube Map:<br>A. Reflective surface need mapping locations on the object's surface to the appropriate reflected direction in the 360 degree environment surrounding the object.<br>B.The texturing enable priority is cube map, 3D, 2D, and finally 1D.<br>C.<span style="FONT-SIZE: 12pt">立方图非常适用于实现环境，反射和光照效果,立方图还可以把纹理环绕到球体上，使纹理单元均匀地分布于它的各个面上.<br></span><br>5.Shere Env Map<br>A.Also called reflection mapping<br>B.All EM start with a ray from the viewer to a point on the reflector. This ray is then reflected with respect to the normal at that point. Instead of finding the intersection with the closest surface, as ray tracing does, EM uses the direction of the reflection vector as an index to an image containing the environment.<br>C.Shere EM is&nbsp;view-dependent meaning that a different sphere map texture image is required for each different eye position. Additionally, sphere mapping is subject to unsightly "speckle" artifacts at the glancing edges of sphere mapped objects.<br><br>6.Dot3 Bump Map<br>A.<br><br>References: &lt;Realtime Rendering&gt; <br></span><a href="http://developer.nvidia.com/object/cube_map_ogl_tutorial.html">http://developer.nvidia.com/object/cube_map_ogl_tutorial.html</a> <br><span style="FONT-SIZE: 12pt">游戏编程精粹5.6</span> 
<img src ="http://www.cnitblog.com/linghuye/aggbug/18786.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2006-11-02 23:58 <a href="http://www.cnitblog.com/linghuye/archive/2006/11/02/18786.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>显卡调试信息</title><link>http://www.cnitblog.com/linghuye/archive/2006/03/13/7549.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Mon, 13 Mar 2006 13:34:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2006/03/13/7549.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/7549.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2006/03/13/7549.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/7549.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/7549.html</trackback:ping><description><![CDATA[// 台式<br />09:41:17.000 -- Graphic Card: NVIDIA GeForce FX 5200<br />09:41:17.328 -- **** OpenGL Information *******************<br />09:41:17.328 -- GL_EXT_framebuffer_object is found!<br />09:41:17.328 -- GL_ARB_pixel_buffer_object is found!<br />09:41:17.328 -- GL_ARB_vertex_shader is found!<br />09:41:17.328 -- GL_ARB_fragment_shader is found!<br />09:41:17.328 -- GL_ARB_texture_non_power_of_two is NOT found!<br />09:41:17.328 -- *******************************************<br /><br />// 台式<br />21:35:49.568 -- Graphic Card: NVIDIA GeForce 6200  <br />21:35:50.458 -- **** OpenGL Information *******************<br />21:35:50.458 -- GL_EXT_framebuffer_object is found!<br />21:35:50.458 -- GL_ARB_pixel_buffer_object is found!<br />21:35:50.458 -- GL_ARB_vertex_shader is found!<br />21:35:50.458 -- GL_ARB_fragment_shader is found!<br />21:35:50.458 -- GL_ARB_texture_non_power_of_two is found!<br />21:35:50.458 -- *******************************************<br /><br />// 笔记本<br />13:41:19.397 -- Graphic Card: Intel(R) 82852/82855 GM/GME Graphics Controller<br />13:41:19.547 -- **** OpenGL Information *******************<br />13:41:19.547 -- GL_EXT_framebuffer_object is NOT found!<br />13:41:19.547 -- GL_ARB_pixel_buffer_object is NOT found!<br />13:41:19.547 -- GL_ARB_vertex_shader is NOT found!<br />13:41:19.547 -- GL_ARB_fragment_shader is NOT found!<br />13:41:19.557 -- GL_ARB_texture_non_power_of_two is NOT found!<br /><br />//  笔记本,支持到OpenGL1.3<br />09:45:53.445 -- Graphic Card: SiS M661MX  <br />09:45:53.495 -- **** OpenGL Information *******************<br />09:45:53.505 -- GL_ARB_texture_compression is found!<br />09:45:53.505 -- GL_EXT_framebuffer_object is NOT found!<br />09:45:53.505 -- GL_ARB_pixel_buffer_object is NOT found!<br />09:45:53.505 -- GL_ARB_vertex_shader is NOT found!<br />09:45:53.505 -- GL_ARB_fragment_shader is NOT found!<br />09:45:53.505 -- GL_ARB_texture_non_power_of_two is NOT found!<br /><br />//IBM笔记本,连多重纹理都不支持<br />16:41:31.633 -- Graphic Card: S3 Graphics Savage/IX 1014<br />16:41:32.174 -- **** OpenGL Information *******************<br />16:41:32.174 -- GL_ARB_texture_compression is found!<br />16:41:32.184 -- GL_EXT_framebuffer_object is NOT found!<br />16:41:32.184 -- GL_ARB_pixel_buffer_object is NOT found!<br />16:41:32.184 -- GL_ARB_vertex_shader is NOT found!<br />16:41:32.194 -- GL_ARB_fragment_shader is NOT found!<br />16:41:32.194 -- GL_ARB_texture_non_power_of_two is NOT found!<br /><br />// 台式<br />18:22:41.546 -- Graphic Card: RADEON 9550 <br />18:22:41.890 -- **** OpenGL Information *******************<br />18:22:41.890 -- GL_ARB_texture_compression is found!<br />18:22:41.890 -- GL_EXT_framebuffer_object is found!<br />18:22:41.890 -- GL_ARB_pixel_buffer_object is NOT found!<br />18:22:41.890 -- GL_ARB_vertex_shader is found!<br />18:22:41.890 -- GL_ARB_fragment_shader is found!<br />18:22:41.890 -- GL_ARB_texture_non_power_of_two is NOT found!<br />18:22:41.906 -- *******************************************<br />//GL_ARB_pixel_buffer_object 不支持,我晕.<br /><br />// 台式<br />20:11:24.671 -- Graphic Card: ATI RADEON XPRESS 200 Series<br />20:11:25.562 -- **** OpenGL Information *******************<br />20:11:25.562 -- GL_ARB_texture_compression is found!<br />20:11:25.562 -- GL_EXT_framebuffer_object is found!<br />20:11:25.562 -- GL_ARB_pixel_buffer_object is NOT found!<br />20:11:25.562 -- GL_ARB_vertex_shader is found!<br />20:11:25.562 -- GL_ARB_fragment_shader is found!<br />20:11:25.562 -- GL_ARB_texture_non_power_of_two is NOT found!<br />20:11:25.562 -- *******************************************<br /><br />// 台式集成,驱动程序intel_845g_141034342<br />14:25:49.067 -- Graphic Card: Intel(R) 82845G/GL/GE/PE/GV Graphics Controller<br />14:25:49.107 -- ****OpenGL Information *******************<br />14:25:49.107 -- Vendor: Intel<br />14:25:49.107 -- GL_ARB_texture_compression is found!<br />14:25:49.117 -- GL_EXT_framebuffer_object is NOT found!<br />14:25:49.117 -- GL_ARB_pixel_buffer_object is NOT found!<br />14:25:49.117 -- GL_ARB_vertex_shader is NOT found!<br />14:25:49.117 -- GL_ARB_fragment_shader is NOT found!<br />14:25:49.117 -- GL_ARB_texture_non_power_of_two is NOT found!<br />14:25:49.117 -- Max Texture Units is  4<br />14:25:49.117 -- Max Texture Size is  2048<br />14:25:49.117 -- *******************************************<br />不支持全屏抗锯齿采样<br /><br />// 浦城网吧<br />14:55:24.476 -- Graphic Card: NVIDIA GeForce 7300 GT<br />14:55:24.601 -- **** OpenGL Information *******************<br />14:55:24.601 -- GL_ARB_texture_compression is found!<br />14:55:24.601 -- GL_EXT_framebuffer_object is found!<br />14:55:24.601 -- GL_ARB_pixel_buffer_object is found!<br />14:55:24.601 -- GL_ARB_vertex_shader is found!<br />14:55:24.601 -- GL_ARB_fragment_shader is found!<br />14:55:24.601 -- GL_ARB_texture_non_power_of_two is found!<br />14:55:24.601 -- *******************************************<br /><br />// 家门口网吧<br />20:42:20.679 -- Graphic Card: NVIDIA GeForce 7300 GS<br />20:42:21.101 -- **** OpenGL Information *******************<br />20:42:21.101 -- GL_ARB_texture_compression is found!<br />20:42:21.116 -- GL_EXT_framebuffer_object is found!<br />20:42:21.116 -- GL_ARB_pixel_buffer_object is found!<br />20:42:21.116 -- GL_ARB_vertex_shader is found!<br />20:42:21.116 -- GL_ARB_fragment_shader is found!<br />20:42:21.116 -- GL_ARB_texture_non_power_of_two is found!<br />20:42:21.132 -- *******************************************<br /><br />// Diamond Viper 550<br />16:04:12.747 -- Graphic Card: NVIDIA RIVA TNT <br />16:04:14.009 -- **** OpenGL Information ******************* <br />16:04:14.009 -- GL_ARB_texture_compression is NOT found! <br />16:04:14.009 -- GL_EXT_framebuffer_object is NOT found! <br />16:04:14.009 -- GL_ARB_pixel_buffer_object is NOT found! <br />16:04:14.009 -- GL_ARB_vertex_shader is NOT found! <br />16:04:14.009 -- GL_ARB_fragment_shader is NOT found! <br />16:04:14.009 -- GL_ARB_texture_non_power_of_two is NOT found! <br />16:04:14.009 -- ******************************************* <br /><br />// NV4 系列<br /><font face="Arial" size="2">21:06:56.953 -- Graphic Card: NVIDIA GeForce4 Ti 4600<br />21:06:57.078 -- **** OpenGL Information *******************<br />21:06:57.078 -- GL_ARB_texture_compression is found!<br />21:06:57.078 -- GL_EXT_framebuffer_object is NOT found!<br />21:06:57.078 -- GL_ARB_pixel_buffer_object is found!<br />21:06:57.078 -- GL_ARB_vertex_shader is found!<br />21:06:57.078 -- GL_ARB_fragment_shader is NOT found!<br />21:06:57.078 -- GL_ARB_texture_non_power_of_two is NOT found!<br />21:06:57.078 -- ******************************<wbr>*************</wbr></font><br /><br />// MMX 440<br />11:42:17.937 -- Graphic Card: NVIDIA GeForce4 MX 440 with AGP8X<br />11:42:21.000 -- **** OpenGL Information *******************<br />11:42:21.000 -- GL_ARB_texture_compression is found!<br />11:42:21.000 -- GL_EXT_framebuffer_object is NOT found!<br />11:42:21.000 -- GL_ARB_pixel_buffer_object is found!<br />11:42:21.000 -- GL_ARB_vertex_shader is found!<br />11:42:21.000 -- GL_ARB_fragment_shader is NOT found!<br />11:42:21.015 -- GL_ARB_texture_non_power_of_two is NOT found!<br />11:42:21.015 -- *******************************************<br /><br />18:51:08.578 -- Graphic Card: RADEON 9250 <br />18:51:08.734 -- **** OpenGL Information ******************* <br />18:51:08.734 -- GL_ARB_texture_compression is found! <br />18:51:08.750 -- GL_EXT_framebuffer_object is NOT found! <br />18:51:08.765 -- GL_ARB_pixel_buffer_object is NOT found! <br />18:51:08.765 -- GL_ARB_vertex_shader is NOT found! <br />18:51:08.781 -- GL_ARB_fragment_shader is NOT found! <br />18:51:08.781 -- GL_ARB_texture_non_power_of_two is NOT found! <br />18:51:08.796 -- ******************************<wbr>************* <br />09:18:28.250 -- Graphic Card: RADEON 9250 <br />09:18:28.296 -- **** DirectX Information *******************<br />09:18:28.312 -- Texture Compression is found!<br />09:18:28.312 -- Vertex Shader 1.1 is found!<br />09:18:28.328 -- MaxVertexShaderConst is 192!<br />09:18:28.328 -- Pixel Shader 1.4 is found!<br />09:18:28.343 -- NON-POWER-OF-TWO texture is NOT found!<br />09:18:28.343 -- *******************************************<br /><br />00:04:43.859 -- Graphic Card: NVIDIA GeForce2 Ti<br />00:04:44.187 -- **** OpenGL Information *******************<br />00:04:44.187 -- Vendor: NVIDIA Corporation<br />00:04:44.187 -- GL_ARB_texture_compression is found!<br />00:04:44.187 -- GL_EXT_framebuffer_object is NOT found!<br />00:04:44.187 -- GL_ARB_pixel_buffer_object is NOT found!<br />00:04:44.187 -- GL_ARB_vertex_shader is NOT found!<br />00:04:44.187 -- GL_ARB_fragment_shader is NOT found!<br />00:04:44.203 -- GL_ARB_vertex_buffer_object is found!<br />00:04:44.203 -- GL_ARB_texture_non_power_of_two is NOT found!<br />00:04:44.203 -- Max texture units is  2<br />00:04:44.203 -- Max texture texture is  2048<br /></wbr><img src ="http://www.cnitblog.com/linghuye/aggbug/7549.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2006-03-13 21:34 <a href="http://www.cnitblog.com/linghuye/archive/2006/03/13/7549.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DestinyMatrix开发手扎.2700</title><link>http://www.cnitblog.com/linghuye/archive/2005/09/29/2974.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Thu, 29 Sep 2005 03:12:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2005/09/29/2974.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/2974.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2005/09/29/2974.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/2974.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/2974.html</trackback:ping><description><![CDATA[<P>场景图系统使得引擎实体从管理层中分离出来,实体不参加管理层的运作,也不带管理的数据.<BR>对一个物质实体而言,其不存在可见性这一属性数据,可见性是由管理层控制的,即物质实体是唯物主义,场景图是唯心主义.</P>
<P>场景图是个宽松的,随意的管理层,其任务是为各种各样的SceneNode保持最基本的层次关系,这个层次关系可以用来实现从上到下的空间变换,渲染状态的最小化切换. </P>
<P>从ISceneNode派生出各方面的SceneNode,表达对自己管理的场景的理解,即一个ISceneNode从概念上就是个小场景图,但其算法是单一的,如4叉,8叉,BSP等,从而实现一个大场景图中包含应用各种算法的小场景图.<BR>而最上层的场景图是一种由人力控制,排序,维护的场景图,它的节点是泛用容器节点类型,基本概念是可以在编辑器中显式地创建一个容器式的节点,并为节点加载内容场景.<BR>万事万物都可以纳入场景图,因为它的上层是宽松的逻辑概念.<BR><BR>10.4 完成基本场景图程序设计.<BR>11.4 笑傲江湖马戏团 :)<BR>11.08,终于一个雏形诞生了,真正基于场景图,渲染API层完全隔离,采用统一的Material+Mesh渲染抽象,渲染状态切换最小化,骨骼动画框架,仿WoW游戏镜头控制.<BR>12.12&nbsp;&nbsp;地形算法整合清理,整合原先写成的UI,脚本模块,整合wmo加载和渲染模块,完善重新思考引擎的Mesh概念,加入基本的Shader以支持复杂光照模型.基本地平线剔除代码.多次代码重构.<BR><BR><BR><IMG src="http://linghuye.nease.net/Pic/Show2.jpg" Bordor="0"></IMG> </P><img src ="http://www.cnitblog.com/linghuye/aggbug/2974.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2005-09-29 11:12 <a href="http://www.cnitblog.com/linghuye/archive/2005/09/29/2974.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MyWarCraftStudio's DBCViewer</title><link>http://www.cnitblog.com/linghuye/archive/2005/09/23/2851.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Fri, 23 Sep 2005 08:01:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2005/09/23/2851.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/2851.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2005/09/23/2851.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/2851.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/2851.html</trackback:ping><description><![CDATA[<P>DBCTool的数据打开速度太慢,排序也很慢,受不了,于是改良了一下我原有的DBCReader.dll,打开和排序速度都很快,当然跟DBCTool的功能不能比.</P>
<P>MyWarCraftStudio's DBCCraft, support:</P>
<P>1.DBC data browse<BR>2.Data field sort by clicking column title.<BR>3.Data search by text<BR>4.Data export to csv<BR>5.Data field define by change the Cnfg\DBCRecordDef.xml<BR><BR><A href="http://www.linghuye.nease.net/Tools/MyWarCraftStudio_DBCViewer.rar"><FONT color=#ffff00>http://www.linghuye.nease.net/Tools/MyWarCraftStudio_DBCViewer.rar</FONT></A><FONT color=#0080ff><BR><BR></FONT><FONT color=#9acd32><FONT color=#006400>linghuye software</FONT><BR></FONT></P><img src ="http://www.cnitblog.com/linghuye/aggbug/2851.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2005-09-23 16:01 <a href="http://www.cnitblog.com/linghuye/archive/2005/09/23/2851.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>阴影技术的理解和使用</title><link>http://www.cnitblog.com/linghuye/archive/2005/09/20/2785.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Tue, 20 Sep 2005 02:12:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2005/09/20/2785.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/2785.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2005/09/20/2785.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/2785.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/2785.html</trackback:ping><description><![CDATA[<p>当基础知识都已完备,所谓的高级技术不过是巧妙的应用而已.犹如高中的物理题,无论多么复杂都逃不脱几个基本的物理定理.<br><br>一.平面投影<br>&nbsp;&nbsp;&nbsp; Planar shadows are created by building a special matrix transform which flattens an object's geometry into a plane when rendered and is definitely one of the simplest ways of creating real-time shadows. Unfortunately, planar shadows are only useful when projected onto planar surface like a wall or floor so their use in modern applications or games is quickly falling out of favor.<br><br>二.Shadow map<br><br>基本实现原理: Two pass algorithm<br>1.首先,以光源为视点,按正常镜头参数(Project Matrix和Frustum),渲染整个场景,以得到场景相对于光源的深度图,又称Shadow map.<br>2.然后,以正常镜头视点,渲染整个场景.对每个Fragment计算其相对于光源的XYZ位置,并与深度图中XY位置处的Z值比较,若小等于深度图的Z,表明照射该处的光线不受其他物体遮挡,反之,则收到其他物体遮挡,呈现阴影.</p>
<p>OpenGL实现原理:<br>We render the scene from the light's view and store the depth values in a&nbsp;texture.&nbsp; We then render the world normally from the camera's view.&nbsp; Texture&nbsp;generation is used to calculate and project our texture coordinates for the&nbsp;shadow mapping.&nbsp; We test the depth values of the light's view and the camera's&nbsp;view in the light's clip space to see if there is a shadow.&nbsp; Basically, if&nbsp;the camera can see something that the light can't, that means that that part&nbsp;should be shadowed.<br><br>1.使用PixelBuffer或FrameBuffer作为渲染环境,进行1的渲染,得到Depth Buffer,并将其绑定到某纹理,称该纹理为Shadow map texture.</p>
<p>2.建立纹理投影矩阵为光源视点下的模型矩阵,并设定纹理坐标生成方式为镜头空间的平面自动生成.<br>&nbsp;&nbsp;// 设置纹理矩阵<br>&nbsp;&nbsp;&nbsp; glMatrixMode(GL_TEXTURE);<br>&nbsp;&nbsp;&nbsp; glLoadIdentity();<br>&nbsp;&nbsp;&nbsp; gluPerspective(...); // light frustum<br>&nbsp;&nbsp;&nbsp; glMultMatrixf(...);&nbsp; // Light matrix<br>&nbsp;&nbsp;&nbsp; glMatrixMode(GL_MODELVIEW);<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; // 激活4元纹理坐标的生成<br>&nbsp;&nbsp;&nbsp; glEnable(GL_TEXTURE_GEN_S);<br>&nbsp;&nbsp;&nbsp; glEnable(GL_TEXTURE_GEN_T);<br>&nbsp;&nbsp;&nbsp; glEnable(GL_TEXTURE_GEN_R);<br>&nbsp;&nbsp;&nbsp; glEnable(GL_TEXTURE_GEN_Q);</p>
<p>&nbsp;&nbsp;// 设置纹理坐标生成方式为平面公式线性插值的镜头空间坐标&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);<br>&nbsp;&nbsp;&nbsp; glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);<br>&nbsp;&nbsp;&nbsp; glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);<br>&nbsp;&nbsp;&nbsp; glTexGeni(GL_Q, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; // 设置GL_EYE_LINEAR下纹理坐标生成的平面公式的系数<br>&nbsp;&nbsp;&nbsp; float x[] = { 1.0f, 0.0f, 0.0f, 0.0f };<br>&nbsp;&nbsp;&nbsp; float y[] = { 0.0f, 1.0f, 0.0f, 0.0f };<br>&nbsp;&nbsp;&nbsp; float z[] = { 0.0f, 0.0f, 1.0f, 0.0f };<br>&nbsp;&nbsp;&nbsp; float w[] = { 0.0f, 0.0f, 0.0f, 1.0f };<br>&nbsp;&nbsp;&nbsp; glTexGenfv(GL_S, GL_EYE_PLANE, x);<br>&nbsp;&nbsp;&nbsp; glTexGenfv(GL_T, GL_EYE_PLANE, y);<br>&nbsp;&nbsp;&nbsp; glTexGenfv(GL_R, GL_EYE_PLANE, z);<br>&nbsp;&nbsp;&nbsp; glTexGenfv(GL_Q, GL_EYE_PLANE, w);</p>
<p>该步骤的目的是为了使用纹理坐标生成这一图形硬件技巧计算得到每个Fragment处相对于光源的XYZ位置.<br>按纹理投影和变换矩阵将当前的镜头空间下的XYZ,转换为纹理空间/光源视点空间下的XYZ,<br>按GL_EYE_LINEAR纹理坐标生成公式Ax + By + Cz + D,且依如上参数设置的纹理坐标生成方式,计算纹理投影矩阵(即光源视点矩阵)下的(x,y,z,w),得到的纹理坐标(s,t,r,q)即:<br>s = 1.0f * x + 0.0f * y + 0.0f * z + 0.0f = x; <br>t = 0.0f * x + 1.0f * y + 0.0f * z + 0.0f = y; <br>r = 0.0f * x + 0.0f * y + 1.0f * z + 0.0f = z; <br>q = 0.0f * x + 0.0f * y + 0.0f * z + 1.0f = 1.0;<br>=&gt; 顶点坐标和纹理坐标在数值上相等对应 =&gt; 生成的纹理坐标的r即为z =&gt; 即在纹理投影矩阵/光源视点矩阵下的深度值.<br>&nbsp;&nbsp;&nbsp; <br>3.设置阴影纹理(GL_ARB_shadow)比较模式为:<br>&nbsp;&nbsp;&nbsp; glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE_ARB, GL_COMPARE_R_TO_TEXTURE_ARB);<br>&nbsp;&nbsp;&nbsp; glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC_ARB, GL_LEQUAL);<br>该步骤的目的是进行Z值比较,并将得到的结果送入Fragment处理.<br>取2中计算得到的当前纹理坐标的r值(即当前Fragment的深度值)与当前深度纹理图寻址(s,t)处的值Dt进行对比,若r &lt;= Dt,返回值1.0,反之,返回值0.0.<br>将返回的1.0或0.0作为Texel的LUMINANCE对当前Fragment混合,这样1.0的不变,0.0的成阴影.<br>&nbsp;&nbsp; <br>4.最终渲染,Shadow map在管线作为纹理中发挥作用,影响最终的输出画面,产生阴影效果.<br><br>三.Shadow volume<br>&nbsp;Refer to <a href="http://blog.donews.com/yyh/archive/2005/05/19/387143.aspx">http://blog.donews.com/yyh/archive/2005/05/19/387143.aspx</a>&nbsp; 文章写的很好<br>ZFail表达了: 有阴影体face在显示的物点之后.<br>ZPass和ZFail的逻辑区别在于,ZPass考察显示的物点之前的阴影体face,ZFail考察显示的物点之后的阴影体face,镜头是在显示的物点之前的(所谓之前之后就是以离镜头的远近为准的),所以镜头的位置会影响ZPass的逻辑,但不会影响ZFail的逻辑. 两者的基本判断逻辑是多边形穿越算法.</p>
<p>无论是ZPass还是ZFail都有与镜头剪裁面发生剪切的情况,这个剪切是指某个阴影体face被镜头裁剪掉了,即在几何处理阶段就被抛弃了,从而被裁剪的部分阴影体face根本没有进入设计的ZPass/ZFail stencil阶段,考察的阴影体face不完整,算法基础崩溃了.</p>
<p>所以产生需要Capping的问题, ZPass需要考察物点前的阴影体face,所以会被Near Plane裁剪,而ZFail则需要Capping Far Plane.<br><br><br>References:<br><a href="http://www.pcgames.com.cn/netgames/zhuanti/wow/pince/0503/574679.html"><font color="#ffff00">http://www.pcgames.com.cn/netgames/zhuanti/wow/pince/0503/574679.html</font></a><br><a href="http://www.codesampler.com/oglsrc/oglsrc_7.htm#ogl_planar_shadow"><font color="#ffff00">http://www.codesampler.com/oglsrc/oglsrc_7.htm#ogl_planar_shadow</font></a><br><a href="http://www.gametutorials.com/gtstore/c-1-test-cat.aspx"><font color="#ffff00">http://www.gametutorials.com/gtstore/c-1-test-cat.aspx</font></a><br>游戏编程精粹1<br><a href="http://developer.nvidia.com/object/ogl_rtt_shadow.html"><font color="#ffff00">http://developer.nvidia.com/object/ogl_rtt_shadow.html</font></a><br><a href="http://resumbrae.com/ub/dms424_s04/15/03.html"><font color="#ffff00">http://resumbrae.com/ub/dms424_s04/15/03.html</font></a><br><a href="http://oss.sgi.com/projects/ogl-sample/registry/ARB/shadow.txt"><font color="#ffff00">http://oss.sgi.com/projects/ogl-sample/registry/ARB/shadow.txt</font></a><br><a href="http://oss.sgi.com/projects/ogl-sample/registry/ARB/depth_texture.txt"><font color="#ffff00">http://oss.sgi.com/projects/ogl-sample/registry/ARB/depth_texture.txt</font></a><br><a style="color: #ffff00;" href="http://www.paulsprojects.net/opengl/shadvol/shadvol.html">http://www.paulsprojects.net/opengl/shadvol/shadvol.html</a></p><img src ="http://www.cnitblog.com/linghuye/aggbug/2785.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2005-09-20 10:12 <a href="http://www.cnitblog.com/linghuye/archive/2005/09/20/2785.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>多层AlphaMap纹理下的ROAM地形渲染</title><link>http://www.cnitblog.com/linghuye/archive/2005/08/13/1858.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Sat, 13 Aug 2005 09:37:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2005/08/13/1858.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/1858.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2005/08/13/1858.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/1858.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/1858.html</trackback:ping><description><![CDATA[ROAM is&nbsp;so cool!<BR><IMG src="http://blog.blogchina.com/upload/2005-04-10/20050410094947742804.JPG" border=0><img src ="http://www.cnitblog.com/linghuye/aggbug/1858.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2005-08-13 17:37 <a href="http://www.cnitblog.com/linghuye/archive/2005/08/13/1858.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>