锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品一区在线观看,国产亚洲一区二区三区,亚洲第一主播视频http://www.shnenglu.com/bloodbao/category/3956.htmlc++zh-cnSun, 09 Nov 2008 15:16:14 GMTSun, 09 Nov 2008 15:16:14 GMT60clip plane妯℃嫙錛堟妱鑷狣XSDK錛?/title><link>http://www.shnenglu.com/bloodbao/archive/2008/11/09/66448.html</link><dc:creator>bloodbao</dc:creator><author>bloodbao</author><pubDate>Sun, 09 Nov 2008 12:47:00 GMT</pubDate><guid>http://www.shnenglu.com/bloodbao/archive/2008/11/09/66448.html</guid><wfw:comment>http://www.shnenglu.com/bloodbao/comments/66448.html</wfw:comment><comments>http://www.shnenglu.com/bloodbao/archive/2008/11/09/66448.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/bloodbao/comments/commentRss/66448.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/bloodbao/services/trackbacks/66448.html</trackback:ping><description><![CDATA[<p>DX9涓嬩嬌鐢?br>D3DXPLANE plane; <br> D3DXPlaneFromPointNormal( &plane, &vPoint, &vNormal ); //鐢熸垚榪欎釜騫抽潰 <br>D3DXMatrixReflect( &matReflect, &plane ); //鍙栧緱璇ュ鉤闈㈢殑鍙嶅皠鐭╅樀<br>//璁劇疆鍓垏騫抽潰錛屼嬌鍙嶅皠闈笂鐨勫唴瀹硅娓叉煋錛岄潰涓嬬殑琚涪寮?<br> m_pd3dDevice->SetClipPlane( 0, plane ); <br> m_pd3dDevice->SetRenderState( D3DRS_CLIPPLANEENABLE, 0x01 );<br>DX10涓嬫ā鎷燂細<br>User Clip PlanesUser Clip Planes are emulated by specifying a clip distance output from the Vertex Shader with the SV_ClipDistance[n] flag, where n is either 0 or 1. Each component can hold up to 4 clip distances in x, y, z, and w giving a total of 8 clip distances.</p> <p>    鐢ㄦ埛瑁佸噺騫抽潰閫氳繃鍦╒S閲岃瀹氫竴涓猄V_ClipDistance[n]鏍囪錛屽畾涔変竴涓鍑忚窛紱昏緭鍑哄緱鍒?n涓?鎴?銆傝繖閲屼竴鍏辮兘瀛樻斁8涓狢lip Plane璺濈錛屽垎鍒嬌鐢ㄦ暟緇勪袱涓厓绱犵殑x,y,z,w閫氶亾銆?/p> <p>In this scenario, each clip planes is defined by a plane equation of the form:</p> <p>鍦ㄨ繖涓満鏅噷錛屾瘡涓猚lip plane琚竴涓鉤闈㈡柟紼嬪畾涔夛細</p> <p>Ax + By + Cz + D =0;</p> <p>Where <A,B,C> is the normal of the plane, and D is the distance of the plane from the origin. Plugging in any point <x,y,z> into this equation gives its distance from the plane. Therefore, all points <x,y,z> that satisfy the equation Ax + By + Cz + D = 0 are on the plane. All points that satisfy Ax + By + Cz + D < 0 are below the plane. All points that satisfy Ax + By + Cz + D > 0 are above the plane.</p> <p><A,B,C>鏄鉤闈㈡硶鍚戯紝D鏄鉤闈㈠埌鍘熺偣鐨勮窛紱匯傛妸浠繪剰鐐?lt;x,y,z>浠e叆鏂圭▼鑳藉緱鍒板畠鍒板鉤闈㈢殑璺濈銆傛墍鏈夋弧瓚蟲柟紼嬶紳0鐨勭偣鍦ㄥ鉤闈笂錛?lt;0鐨勭偣鍦ㄥ鉤闈笅鑰?>0鐨勭偣鍦ㄥ鉤闈笂銆?/p> <p>In the Vertex Shader, each vertex is tested against each plane equation to produce a distance to the clip plane. Each of the three clip distances are stored in the first three components of the output component with the semantic SV_ClipDistance0. These clip distances get interpolated over the triangle during rasterization and clipped if the value every goes below 0.</p> <p>    鍦╒S涓紝姣忎釜欏剁偣浼氬甫鍏ュ鉤闈㈡柟紼嬪仛嫻嬭瘯銆傛瘡涓笁瑙掑艦鐨凜lip璺濈瀛樺湪SV_ClipDistance0璇箟杈撳嚭鐨勫墠涓変釜閫氶亾涓傝繖涓窛紱誨湪鍏夋爡鍖栦腑琚嚎鎬ф彃鍊鹼紝鎵鏈夊皬浜?鐨勫儚绱犺鍓旈櫎銆?/p> <img src ="http://www.shnenglu.com/bloodbao/aggbug/66448.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/bloodbao/" target="_blank">bloodbao</a> 2008-11-09 20:47 <a href="http://www.shnenglu.com/bloodbao/archive/2008/11/09/66448.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>rendering璋冭瘯http://www.shnenglu.com/bloodbao/archive/2008/10/23/64881.htmlbloodbaobloodbaoThu, 23 Oct 2008 13:55:00 GMThttp://www.shnenglu.com/bloodbao/archive/2008/10/23/64881.htmlhttp://www.shnenglu.com/bloodbao/comments/64881.htmlhttp://www.shnenglu.com/bloodbao/archive/2008/10/23/64881.html#Feedback0http://www.shnenglu.com/bloodbao/comments/commentRss/64881.htmlhttp://www.shnenglu.com/bloodbao/services/trackbacks/64881.html

bloodbao 2008-10-23 21:55 鍙戣〃璇勮
]]>
Main Features in my blood enginehttp://www.shnenglu.com/bloodbao/archive/2008/08/11/58530.htmlbloodbaobloodbaoMon, 11 Aug 2008 07:05:00 GMThttp://www.shnenglu.com/bloodbao/archive/2008/08/11/58530.htmlhttp://www.shnenglu.com/bloodbao/comments/58530.htmlhttp://www.shnenglu.com/bloodbao/archive/2008/08/11/58530.html#Feedback0http://www.shnenglu.com/bloodbao/comments/commentRss/58530.htmlhttp://www.shnenglu.com/bloodbao/services/trackbacks/58530.htmlDirect3D 9 is used to render the scene
User input is gathered though DirectInput
Single pass multi-texturing using the fixed-function pipeline (FFP)
Light-mapping
Frustum culling
Simple skybox
Keyframe Animation with GPU-based frame interpolation through a custom vertex and pixel shader written in HLSL. This technique is also known as Vertex Tweening or even Morph Target
Support for Quake2 models (.md2)
Support for DirectX models (.x)
Support for PCX texture loading in addition to the other image formats already supported by Direct3D
Support for Quake3:Arena levels
Lightmaps
Curved surfaces using Bezier patches
Partial support of Quake3 materials and effects (.shader)
Uses the BSP/PVS to quickly discard non visible geometry
Collision detection using the BSP tree (supports ray, sphere and box sweeps)
A flexible scene graph system where entities can be attached to each other in order to perform hierarchical transformations and geometry culling
Quake-like player movement physics
A powerful in-game console system:
Outputs vital information
Can take command inputs from the user
Console variables can be dynamically edited at runtime
Commands and console variable settings can be loaded from a user-specified text file (cfg)
Garbage collection of unused resources through reference counting
Control keys can be dynamically changed in-game through the console, using the bind command
User input is abstracted through an Action Manager which maps inputs to actions
A smart chase-camera controller that will detect collisions with the world to prevent the view from being occluded by other pieces of world geometry.
Error handling through exceptions
The in-game HUD can display vital performance statistics about the game, such as frames per second, total number of triangles on the screen, number of textures loaded, etc…

bloodbao 2008-08-11 15:05 鍙戣〃璇勮
]]>
鍙堝け璐ヤ簡http://www.shnenglu.com/bloodbao/archive/2008/08/06/58118.htmlbloodbaobloodbaoWed, 06 Aug 2008 02:36:00 GMThttp://www.shnenglu.com/bloodbao/archive/2008/08/06/58118.htmlhttp://www.shnenglu.com/bloodbao/comments/58118.htmlhttp://www.shnenglu.com/bloodbao/archive/2008/08/06/58118.html#Feedback9http://www.shnenglu.com/bloodbao/comments/commentRss/58118.htmlhttp://www.shnenglu.com/bloodbao/services/trackbacks/58118.html       涓轟簡榪欐闈㈣瘯錛屾垜浼戞伅浜嗗緢澶氬ぉ錛岄兘娌″伐浣溿傜粨鏋滐紝寰楀埌鐨勫張鏄竴涓け璐ョ殑緇撳眬銆傚垎鏋愬師鍥狅紝閮借涓烘垜鐨凜++鍩虹寰堣杽寮卞惂錛岃涓嶅氨鏄洜涓烘垜浠ュ墠浠庝簨鐨勫伐浣滃拰鐜板湪鐨勫伐浣滃樊鍒お澶т簡銆?br>      浣滀負涓鍚嶆柊鎵嬶紝鎴戝緢榪瘋尗錛屽湪瀛︿範鐨勯亾璺垜娌℃湁琚墦璐ワ紝鍗村湪涓ゆ闈㈣瘯涓紝娣卞彈鎵撳嚮銆傛垜涓嶄粎鍦ㄦ兂錛岃繖鏄惁鏄垜瑕侀夋嫨鐨勮礬銆備粎鍓╁崐涓鏈堢殑鏃墮棿錛屾殤鏈熷氨緇撴潫浜嗭紝鎴戝啀涓嶅嚭鍘伙紝灝辨病鏈轟細浜嗐備簨瀹炰笂錛屽仛涓嶅仛娓告垙錛屾垜鏃犳墍璋擄紝浣嗙幇鍦ㄧ殑鐢熸椿涓鐩翠笉鏄垜鎯寵鐨勩傛垜涓嶆柇鍦板湪鍚﹀畾鑷凡鐨勮礬涓婏紝瓚婅蛋瓚婅繙錛屾壘涓嶅埌鐪熷疄鐨勬垜銆?br>      涓や釜鏈堝緢蹇氨榪囧幓浜嗭紝鎴戝彧鑳介潤涓嬪績鏉ュ幓鍋氫簨鎯咃紝鎶婅繖浜涚儲浜虹殑浜嬶紝閮芥姏浜庤剳鍚庛傝礬榪樻槸瑕佽蛋錛屼漢鎬繪槸瑕佹垚闀跨殑錛屽笇鏈涜兘浠庡け璐ヤ腑璧板嚭鏉ャ?br>      璁頒笅浠婂ぉ鐨勫け璐ワ紝浠ヤ綔鑷媺銆?/p>

bloodbao 2008-08-06 10:36 鍙戣〃璇勮
]]>
DX10sample鐨勯槾褰?/title><link>http://www.shnenglu.com/bloodbao/archive/2008/07/20/56669.html</link><dc:creator>bloodbao</dc:creator><author>bloodbao</author><pubDate>Sun, 20 Jul 2008 02:48:00 GMT</pubDate><guid>http://www.shnenglu.com/bloodbao/archive/2008/07/20/56669.html</guid><wfw:comment>http://www.shnenglu.com/bloodbao/comments/56669.html</wfw:comment><comments>http://www.shnenglu.com/bloodbao/archive/2008/07/20/56669.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/bloodbao/comments/commentRss/56669.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/bloodbao/services/trackbacks/56669.html</trackback:ping><description><![CDATA[<img src="http://www.shnenglu.com/images/cppblog_com/bloodbao/self-shadow.jpg" border=0><br>涓昏鏄敤妯℃澘緙撳啿鍖烘潵瀹炵幇銆?br>DepthStencilState StencilShadow<br>{<br>    DepthEnable = true;<br>    DepthWriteMask = ZERO;<br>    DepthFunc = LESS;<br>    <br>    StencilEnable = true;<br>    StencilReadMask = 0xFFFFFFFF;<br>    StencilWriteMask = 0xFFFFFFFF;<br>    <br>    FrontFaceStencilFunc = ALWAYS;<br>    FrontFaceStencilPass = INCR;<br>    FrontFaceStencilFail = Keep;<br>    <br>    BackFaceStencilFunc = ALWAYS;<br>    BackFaceStencilPass = DECR;<br> 銆BackFaceStencilFail = Keep;<br>};<br>BlendState AdditiveBlending<br>{<br>    AlphaToCoverageEnable = FALSE;<br>    BlendEnable[0] = TRUE;<br>    SrcBlend = SRC_ALPHA ;<br>    DestBlend = INV_SRC_ALPHA ;<br>    BlendOp = ADD;<br>    SrcBlendAlpha = ZERO;<br>    DestBlendAlpha = ZERO;<br>    BlendOpAlpha = ADD;<br>    RenderTargetWriteMask[0] = 0x0F;<br>};<br> <h2><a name=Rendering_Shadows></a>Rendering Shadows</h2> <p>At the top level, the rendering steps look like the following:</p> <ul> <li>If ambient lighting is enabled, render the entire scene with ambient only. <li>For each light in the scene, do the following: <ul> <li>Disable depth-buffer and frame-buffer writing. <li>Prepare the stencil buffer render states for rendering the shadow volume. <li>Render the shadow volume mesh with a vertex extruding shader. This sets up the stencil buffer according to whether or not the pixels are in the shadow volume. <li>Prepare the stencil buffer render states for lighting. <li>Prepare the additive blending mode. <li>Render the scene for lighting with only the light being processed. </li> </ul> </li> </ul> <br>Shadow Volume騫朵笉鏄竴涓病鏈夌己闄風殑鎶鏈傞櫎浜嗛珮鍍忕礌濉厖鐜囧拰闃村獎杈圭晫媯嫻嬪錛屽湪緇樺埗榪囩▼涓繕鍙兘鍑虹幇閿欒銆傞敊璇殑涓昏鍘熷洜鏄綋涓涓嚑浣曟ā鍨嬪湪璁$畻鑷槾褰辨椂錛屽畠鐨勯潰閫氬父琚畬鍏ㄧ収浜垨鑰呭畬鍏ㄥ彉鏆楋紝榪欏彇鍐充簬榪欎釜闈㈡槸鍚︽湞鍚戝厜婧愩傚厜鐓ц綆楀繀欏諱嬌鐢ㄩ《鐐規硶鍚戣岄潪琛ㄩ潰娉曞悜銆傚浜庢帴榪戝鉤琛屽厜婧愮殑闈紝瀹冧細琚畬鍏ㄧ収浜垨鑰呭畬鍏ㄥ彉鏆楋紝鑰屽疄闄呬笂搴旇閮ㄥ垎澶勪簬鍏夋簮涓傝繖鏄粠stencil shadow volume涓戶鎵挎潵鐨勯棶棰橈紝鍦ㄨ綆楅槾褰辨椂蹇呴』琚冭檻銆傝繖涓棶棰樺彲浠ラ氳繃澧炲姞mesh瀵嗗害鏉ヨВ鍐籌紝榪欎篃澧炲姞浜嗗鐞唌esh鐨勬椂闂淬傞《鐐規硶鍚戝拰闈㈡硶鍚戣秺鎺ヨ繎錛岃〃闈㈢殑闂灝辮秺灝戙傚鏋滅▼搴忎笉鑳芥妸闂闄愬埗鍦ㄥ彲鎺ュ彈鐨勮寖鍥村唴錛屽氨蹇呴』鑰冭檻浣跨敤鍏朵粬鐨勭畻娉曪紝姣斿PRT鎴栬匰hadow Map銆? <img src ="http://www.shnenglu.com/bloodbao/aggbug/56669.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/bloodbao/" target="_blank">bloodbao</a> 2008-07-20 10:48 <a href="http://www.shnenglu.com/bloodbao/archive/2008/07/20/56669.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>dx10涔嬫ā鎷烡X9http://www.shnenglu.com/bloodbao/archive/2008/07/20/56663.htmlbloodbaobloodbaoSun, 20 Jul 2008 02:31:00 GMThttp://www.shnenglu.com/bloodbao/archive/2008/07/20/56663.htmlhttp://www.shnenglu.com/bloodbao/comments/56663.htmlhttp://www.shnenglu.com/bloodbao/archive/2008/07/20/56663.html#Feedback0http://www.shnenglu.com/bloodbao/comments/commentRss/56663.htmlhttp://www.shnenglu.com/bloodbao/services/trackbacks/56663.htmlFixed-function Lighting Pipeline
ColorsOutput CalcLighting( float3 worldNormal, float3 worldPos, float3 cameraPos )
{
    ColorsOutput output = (ColorsOutput)0.0;
   
    for(int i=0; i<8; i++)
{
     //鍏夌嚎鏂瑰悜
        float3 toLight = g_lights[i].Position.xyz - worldPos;
         //紱誨厜婧愯窛紱?br>        float lightDist = length( toLight );
         //atten錛濓紙1/(a[2]*d*d+a[1]*d+a[1])
        float fAtten = 1.0/dot( g_lights[i].Atten, float4(1,lightDist,lightDist*lightDist,0) );
        float3 lightDir = normalize( toLight );
         //H
        float3 halfAngle = normalize( normalize(-cameraPos) + lightDir );
       
         //Phong鏂圭▼錛岄愰《鐐瑰厜鐓?br>        output.Diffuse += max(0,dot( lightDir, worldNormal ) * g_lights[i].Diffuse * fAtten) + g_lights[i].Ambient;
        output.Specular += max(0,pow( dot( halfAngle, worldNormal ), 64 ) * g_lights[i].Specular * fAtten );
    }
   
    return output;
}
綆鍗旳LPHA嫻嬭瘯
//
// PS for rendering with alpha test
//
float4 PSAlphaTestmain(PSSceneIn input) : COLOR0
{       
         float4 color =  tex2D( g_samLinear, g_txDiffuse, input.tex ) * input.colorD;
         if( color.a < 0.5 )
                 discard;
         return color;
}
闆懼寲錛?/p>

//
// Calculates fog factor based upon distance
//
// E is defined as the base of the natural logarithm (2.71828)
float CalcFogFactor( float d )
{
         float fogCoeff = 1.0;
        
         if( FOGMODE_LINEAR == g_fogMode )
         {
                 fogCoeff = (g_fogEnd - d)/(g_fogEnd - g_fogStart);
         }
         else if( FOGMODE_EXP == g_fogMode )
         {
                 fogCoeff = 1.0 / pow( E, d*g_fogDensity );
         }
         else if( FOGMODE_EXP2 == g_fogMode )
         {
                 fogCoeff = 1.0 / pow( E, d*d*g_fogDensity*g_fogDensity );
         }
        
         return clamp( fogCoeff, 0, 1 );
}

Finally, the pixel shader uses the fog factor to determine how much of the original color and how much of the fog color to output to the pixel.

鏈鍚庯紝PS浣跨敤闆懼寲鍙傛暟紜畾闆鵑鑹插拰綰圭悊棰滆壊鐨勬販鍚堢▼搴︺?br>return fog * normalColor + (1.0 - fog)*g_fogColor;



bloodbao 2008-07-20 10:31 鍙戣〃璇勮
]]>
鐢憋幾鏂囦歡瀵煎叆寮曞彂鐨勩傘?/title><link>http://www.shnenglu.com/bloodbao/archive/2008/07/17/56387.html</link><dc:creator>bloodbao</dc:creator><author>bloodbao</author><pubDate>Thu, 17 Jul 2008 02:26:00 GMT</pubDate><guid>http://www.shnenglu.com/bloodbao/archive/2008/07/17/56387.html</guid><wfw:comment>http://www.shnenglu.com/bloodbao/comments/56387.html</wfw:comment><comments>http://www.shnenglu.com/bloodbao/archive/2008/07/17/56387.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.shnenglu.com/bloodbao/comments/commentRss/56387.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/bloodbao/services/trackbacks/56387.html</trackback:ping><description><![CDATA[<p>鍒氬紑濮嬪涔燚X10錛屽彂瑙夋ā鍨嬫枃浠跺凡緇忎粠鍘熸潵鐨刋鏍煎紡鍙樹負SDKMESH鏍煎紡錛屼篃灝辨槸璇碊X10涓嶇洿鎺ユ敮鎸乆鏂囦歡浜嗭紝<br>閭g幇鍦ㄨ鎬庝箞鍔烇紝鎴戝湪NVSDK涓嬫壘鍒頒簡浠栫殑瑙e喅鏂規錛屽厛鐢―X9鐨勬帴鍙f墦寮X鏂囦歡錛屽啀鐢―X10鎺ュ彛鏉ユ覆鏌撴枃浠躲?br>         鍦―X10涓嬶紝緙哄皯浜嗗緢澶氫互鍓嶅湪DX9涓嬬殑鍏冪礌銆傛瘮濡傦紝鍏夌収錛屾潗璐ㄧ瓑銆?br>         瑕佸疄鐜拌繖浜涘厓绱狅紝灝卞繀欏誨湪SHADER涓嬫墜鍔ㄥ幓瀹炵幇錛岄偅灝辨剰鍛崇潃浣犲繀欏葷啛鎮夊浘褰㈠鐨勫唴瀹癸紝鐗瑰埆鏄叾涓殑鍏夌収妯″瀷絳夊唴瀹廣?br>姣斿錛屾柟鍚戝厜鐨勫疄鐜幫細<br>    //directional light-----------------------------------------------------------------<br>    float3 lightDir = g_lightPos - In.worldPos;<br>    float3 lightDirNorm = normalize(lightDir);<br>    float3 SDir = normalize( g_lightPos - g_eyePos);<br>    float cosGammaDir = dot(SDir, V);<br>    float dirLighting = g_Kd*dirLightIntensity*saturate( dot( N,lightDirNorm ) );<br>    //diffuse<br>    float3 diffuseDirLight = dirLighting*exDir;        <br>    //airlight<br>    float3 dirAirLight = phaseFunctionSchlick(cosGammaDir)* dirLightIntensity*float3(1-exDir.x,1-exDir.y,1-exDir.z);<br>    //specular<br>    float3 specularDirLight = saturate( pow(  dot(lightDirNorm,reflVect),g_specPower)) * dirLightIntensity * g_KsDir * exDir;<br>鐐瑰厜婧愮殑瀹炵幇錛?br>  //point light 1---------------------------------------------------------------------<br>    //diffuse surface radiance and airlight due to point light<br>    float3 pointLightDir = g_PointLightPos - In.worldPos;<br>    //diffuse<br>    float3 diffusePointLight1 = calculateDiffusePointLight(0.1,Dvp,g_DSVPointLight,pointLightDir,N,V);<br>    //airlight<br>    float3 airlight1 = calculateAirLightPointLight(Dvp,g_DSVPointLight,g_VecPointLightEye,V);<br>    //specular<br>    float3 specularPointLight = Specular(g_PointLightIntensity, g_KsPoint, length(pointLightDir), Dvp, g_specPower, normalize(pointLightDir), reflVect);<br>璁$畻鐐瑰厜婧愮殑婕皠鍏夛細<br>float3 calculateDiffusePointLight(float Kd,float Dvp,float Dsv,float3 pointLightDir,float3 N,float3 V)<br>{</p> <p>    float Dsp = length(pointLightDir);<br>    float3 L = pointLightDir/Dsp;<br>    float thetas = acos(dot(N, L));<br>    float lightIntensity = g_PointLightIntensity * 100;<br>    <br>    //spotlight<br>    float angleToSpotLight = dot(-L, g_SpotLightDir);<br>    if(g_useSpotLight)<br>    {    if(angleToSpotLight > g_cosSpotlightAngle)<br>             lightIntensity *= abs((angleToSpotLight - g_cosSpotlightAngle)/(1-g_cosSpotlightAngle));<br>         else<br>             lightIntensity = 0;         <br>    }   <br>    <br>    //diffuse contribution<br>    float t1 = exp(-g_beta.x*Dsp)*max(cos(thetas),0)/Dsp;<br>    float4 t2 = g_beta.x*Gtable.SampleLevel(samLinearClamp, float2((g_beta.x*Dsp-g_diffXOffset)*g_diffXScale, (thetas-g_diffYOffset)*g_diffYScale),0)/(2*PI);<br>    float rCol = (t1+t2.x)*exp(-g_beta.x*Dvp)*Kd*lightIntensity/Dsp;<br>    float diffusePointLight = float3(rCol,rCol,rCol);  <br>    return diffusePointLight.xxx;<br>}<br>璁$畻楂樺厜錛?br>float3 Specular(float lightIntensity, float Ks, float Dsp, float Dvp, float specPow, float3 L, float3 VReflect)<br>{<br>    lightIntensity = lightIntensity * 100;<br>    float LDotVReflect = dot(L,VReflect);<br>    float thetas = acos(LDotVReflect);</p> <p>    float t1 = exp(-g_beta*Dsp)*pow(max(LDotVReflect,0),specPow)/Dsp;<br>    float4 t2 = g_beta.x*G_20table.SampleLevel(samLinearClamp, float2((g_beta.x*Dsp-g_20XOffset)*g_20XScale, (thetas-g_20YOffset)*g_20YScale),0)/(2*PI);<br>    float specular = (t1+t2.x)*exp(-g_beta.x*Dvp)*Ks*lightIntensity/Dsp;<br>    return specular.xxx;<br>}<br>涓嬩竴姝ワ紝鑰冭檻濡備綍涓嶉氳繃DX9鎺ュ彛錛岀洿鎺ュ鍏鏂囦歡銆?/p> <img src ="http://www.shnenglu.com/bloodbao/aggbug/56387.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/bloodbao/" target="_blank">bloodbao</a> 2008-07-17 10:26 <a href="http://www.shnenglu.com/bloodbao/archive/2008/07/17/56387.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>瀛︿範鍏夌嚎榪借釜http://www.shnenglu.com/bloodbao/archive/2008/07/06/55457.htmlbloodbaobloodbaoSun, 06 Jul 2008 02:53:00 GMThttp://www.shnenglu.com/bloodbao/archive/2008/07/06/55457.htmlhttp://www.shnenglu.com/bloodbao/comments/55457.htmlhttp://www.shnenglu.com/bloodbao/archive/2008/07/06/55457.html#Feedback0http://www.shnenglu.com/bloodbao/comments/commentRss/55457.htmlhttp://www.shnenglu.com/bloodbao/services/trackbacks/55457.html                           瀛︿範鍏夌嚎榪借釜錛堟牸寮忛兘涔變簡錛岄儊闂鳳級
灝勭嚎綾葷殑瀹氫箟錛?br>class Ray
{
   public:
 Ray() : m_Origin( vector3( 0, 0, 0 ) ), m_Direction( vector3( 0, 0, 0 ) ) {};
 Ray( vector3& a_Origin, vector3& a_Dir );
   private:
 vector3 m_Origin;
 vector3 m_Direction;
};
鍏夌嚎榪借釜綆楁硶錛?br>For each pixel
{
 Construct ray from camera through pixel
 Find first primitive hit by ray
 Determine color at intersection point
 Draw color

姹傛渶榪戜氦鐐?br> // find the nearest intersection
for ( int s = 0; s < m_Scene->GetNrPrimitives(); s++ )
{
 Primitive* pr = m_Scene->GetPrimitive( s );
 int res;
 if (res = pr->Intersect( a_Ray, a_Dist ))
 {
  prim = pr;
  result = res; // 0 = miss, 1 = hit, -1 = hit from inside primitive
 }
}
浜ょ偣鐨勯鑹詫細
// determine color at point of intersection
pi = a_Ray.GetOrigin() + a_Ray.GetDirection() * a_Dist;
// trace lights
for ( int l = 0; l < m_Scene->GetNrPrimitives(); l++ )
{
 Primitive* p = m_Scene->GetPrimitive( l );
 if (p->IsLight())
 {
  Primitive* light = p;
  // calculate diffuse shading
  vector3 L = ((Sphere*)light)->GetCentre() - pi;
  NORMALIZE( L );
  vector3 N = prim->GetNormal( pi );
  if (prim->GetMaterial()->GetDiffuse() > 0)
  {
   float dot = DOT( N, L );
   if (dot > 0)
   {
    float diff = dot * prim->GetMaterial()->GetDiffuse();
    // add diffuse component to ray color
    a_Acc += diff * prim->GetMaterial()->GetColor() * light->GetMaterial()->GetColor();
   }
  }
 }
}
璁$畻鍙嶅皠錛?br>// calculate reflection
float refl = prim->GetMaterial()->GetReflection();
if (refl > 0.0f)
{
 vector3 N = prim->GetNormal( pi );
 vector3 R = a_Ray.GetDirection() - 2.0f * DOT( a_Ray.GetDirection(), N ) * N;
 if (a_Depth < TRACEDEPTH)
 {
  Color rcol( 0, 0, 0 );
  float dist;
  Raytrace( Ray( pi + R * EPSILON, R ), rcol, a_Depth + 1, a_RIndex, dist );
  a_Acc += refl * rcol * prim->GetMaterial()->GetColor();
 }
}
Phong鍏夌収鍏紡錛歩ntensity = diffuse * (L.N) + specular * (V.R)n

vector3 V = a_Ray.GetDirection();
vector3 R = L - 2.0f * DOT( L, N ) * N;
float dot = DOT( V, R );
if (dot > 0)
{
 float spec = powf( dot, 20 ) * prim->GetMaterial()->GetSpecular() * shade;
// add specular component to ray color
a_Acc += spec * light->GetMaterial()->GetColor();
}
璁$畻闃村獎
// handle point light source
float shade = 1.0f;
if (light->GetType() == Primitive::SPHERE)
{
 vector3 L = ((Sphere*)light)->GetCentre() - pi;
 float tdist = LENGTH( L );
 L *= (1.0f / tdist);
 Ray r = Ray( pi + L * EPSILON, L );
 for ( int s = 0; s < m_Scene->GetNrPrimitives(); s++ )
 {
  Primitive* pr = m_Scene->GetPrimitive( s );
  if ((pr != light) && (pr->Intersect( r, tdist )))
  {
   shade = 0;
   break;
  }
 }
}



bloodbao 2008-07-06 10:53 鍙戣〃璇勮
]]>
鎴戝悕瀛楃殑鐢辨潵http://www.shnenglu.com/bloodbao/archive/2008/06/29/54909.htmlbloodbaobloodbaoSun, 29 Jun 2008 09:42:00 GMThttp://www.shnenglu.com/bloodbao/archive/2008/06/29/54909.htmlhttp://www.shnenglu.com/bloodbao/comments/54909.htmlhttp://www.shnenglu.com/bloodbao/archive/2008/06/29/54909.html#Feedback3http://www.shnenglu.com/bloodbao/comments/commentRss/54909.htmlhttp://www.shnenglu.com/bloodbao/services/trackbacks/54909.htmlBlizzard=鏆撮洩
Bloodbao=琛璞?闆憊-----------------鍒氬ソ鍜屾毚闆殑闊崇浉鍙嶏紒
娌夎糠浜庢父鎴忥紝娌夎糠浜庢父鎴忕紪紼嬶紝Bloodbao姝e湪閫愭笎鎴愰暱銆?br>鐗硅褰曪紝浠ヤ綔鎬蹇碉紒


bloodbao 2008-06-29 17:42 鍙戣〃璇勮
]]>
3DEditorhttp://www.shnenglu.com/bloodbao/archive/2008/06/17/53706.htmlbloodbaobloodbaoTue, 17 Jun 2008 07:27:00 GMThttp://www.shnenglu.com/bloodbao/archive/2008/06/17/53706.htmlhttp://www.shnenglu.com/bloodbao/comments/53706.htmlhttp://www.shnenglu.com/bloodbao/archive/2008/06/17/53706.html#Feedback0http://www.shnenglu.com/bloodbao/comments/commentRss/53706.htmlhttp://www.shnenglu.com/bloodbao/services/trackbacks/53706.html鎴戝仛鐨勭浜屼釜緙栬緫鍣紝鏄熀浜嶰PENGL+WXWIDGETS鐨勶紝鏈潵鎯蟲斁鍥劇墖鐨勩?br>浣嗘槰澶╃湅浜嗙兢閲孉Z鐨勮璁$晫闈紝娣辨劅浣滃搧鐨勪笉鎴愮啛錛屾墍浠ュ鐣岄潰寮濮嬮噸鏂扮紪鍐欍?/p> 榪欎釜緙栬緫鍣紝鐢ㄦ潵鍋氬湴褰㈢殑錛屽弬鑰冧簡寰堝浜虹殑浣滃搧錛屽笇鏈涙渶緇堜笉瑕佹垚涓哄洓涓嶈薄錛?br>緇х畫鍔姏涓傘傘傘?br>MARK!

bloodbao 2008-06-17 15:27 鍙戣〃璇勮
]]>
IRR鐨勬晥鏋滃浘http://www.shnenglu.com/bloodbao/archive/2008/06/05/52224.htmlbloodbaobloodbaoThu, 05 Jun 2008 02:33:00 GMThttp://www.shnenglu.com/bloodbao/archive/2008/06/05/52224.htmlhttp://www.shnenglu.com/bloodbao/comments/52224.htmlhttp://www.shnenglu.com/bloodbao/archive/2008/06/05/52224.html#Feedback3http://www.shnenglu.com/bloodbao/comments/commentRss/52224.htmlhttp://www.shnenglu.com/bloodbao/services/trackbacks/52224.html緇х畫瀛︿範涓?

 



bloodbao 2008-06-05 10:33 鍙戣〃璇勮
]]>
杞殢椋庡BSP鐨勫垎鏋愶紙鍘熸枃鏈夊浘錛?/title><link>http://www.shnenglu.com/bloodbao/archive/2008/05/30/51631.html</link><dc:creator>bloodbao</dc:creator><author>bloodbao</author><pubDate>Fri, 30 May 2008 12:11:00 GMT</pubDate><guid>http://www.shnenglu.com/bloodbao/archive/2008/05/30/51631.html</guid><wfw:comment>http://www.shnenglu.com/bloodbao/comments/51631.html</wfw:comment><comments>http://www.shnenglu.com/bloodbao/archive/2008/05/30/51631.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/bloodbao/comments/commentRss/51631.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/bloodbao/services/trackbacks/51631.html</trackback:ping><description><![CDATA[<p>BSP鎶鏈瑙?</p> <p>eXtreme3D</p> <p>緲昏瘧鑷竴綃囪佸鐨勬枃绔?lt;Binary Space Partioning Trees and Polygon Removal in Real Time 3D Rendering>,鏈鍚庝竴鐐規病鏈夌炕璇戝畬,鍛靛懙,涓嶅お濂芥剰鎬?!!!!<br>BSP鎶鏈綔涓哄鍐呭紩鎿庢覆鏌撶殑涓繪祦鎶鏈櫧鐒跺凡緇忓瓨鍦ㄥ騫?浣嗘槸鐢熷懡鍔涗粛鐒墮潪甯擱〗寮?鏈鏂扮殑DOOM3,HL2浠嶇劧灝嗗畠浣滀負娓叉煋鐨勪富嫻佹妧鏈?浣嗘槸鍦ㄧ綉涓婂瀹冧粙緇嶆枃绔犺櫧鐒跺鍗撮潪甯告祬鏄?澶у鏄嬌鐢≦3鐨凚SP鏂囦歡榪涜娓叉煋,鑰孊SP鏂囦歡濡備綍浜х敓鍒欎粙緇嶉潪甯稿皯,鐩栧洜涓鴻繖涓閮ㄥ垎鏄満鏅紪杈戝櫒鐨勫伐浣?鑰屽畬鎴愪竴涓繖鏍風殑BSP緙栬緫鍣ㄦ槸闈炲父鍥伴毦鐨?闇瑕佹帉鎻$殑鐭ヨ瘑闈炲父澶?涓嬮潰鎴戝皢瀵笲SP緙栬緫鍣ㄨ繖涓閮ㄥ垎闇瑕佺敤鍒扮殑BSP鐭ヨ瘑榪涜涓涓嬩粙緇?榪欏彧鏄竴浜涘緢鍒濇鐨勭煡璇?濡傚笇鏈涗簡瑙f洿澶氱殑鍐呭,Q2寮婧愪唬鐮佷腑鏈変竴涓狟SP緙栬緫鍣ㄧ殑浠g爜鏄綘鐮旂┒鐨勯噸鐐?榪樻湁灝辨槸HL2娉勯湶浠g爜涓殑緙栬緫鍣ㄤ唬鐮?(涓涓棝鑻︾殑鐮旂┒榪囩▼,鍙兘瑕佽姳璐逛綘鍑犱釜鏈堢敋鑷充竴騫寸殑鏃墮棿,涓嶈繃榪欐槸鍊煎緱鐨?濡傛灉浣犳兂瀹屾垚涓涓富嫻佺殑灝勫嚮娓告垙寮曟搸鐨勮瘽,娌℃湁BSP緙栬緫鍣ㄦ槸涓嶅彲鎯寵薄鐨?.</p> <p><br>絎竴鑺?BSP Trees<br>BSP Trees鑻辨枃鍏ㄧО涓築inary Space Partioning trees錛屼簩緇寸┖闂村垎鍓叉爲錛岀畝縐頒負浜屽弶鏍戙傚畠浜?969騫磋Shumacker鍦ㄦ枃绔犮奡tudy for Applying Computer-Generated Images to Visual Simulation銆嬮嬈℃彁鍑猴紝騫惰ID鍏徃絎竴嬈′嬌鐢ㄥ埌FPS娓告垙Doom涓紝Doom鐨勬帹鍑鴻幏寰椾簡絀哄墠鐨勬垚鍔燂紝涓嶄粎濂犲畾浜咺D鍏徃鍦‵PS娓告垙寮鍙戠殑瀹楀笀鍦頒綅錛屼篃浣緽SP鎶鏈垚涓哄鍐呮覆鏌撶殑宸ヤ笟鏍囧噯錛屼粠BSP浜х敓鍒扮幇鍦ㄥ凡緇忔湁30澶氬勾浜嗭紝鍏墮棿铏界劧浜х敓浜嗗ぇ閲忕殑瀹ゅ唴娓叉煋鐨勭畻娉曪紝浣嗗嵈鏃犱漢鑳芥捈鍔ㄥ畠鐨勫湴浣嶏紝瀵逛簬浠ユ懇灝斿畾寰嬪彂灞曠殑璁$畻鏈轟笟鏉ヨ榪欎笉鑳戒笉鏄竴涓榪廣?br>涓轟粈涔堜嬌鐢˙SP Trees<br>涓涓狟SP Trees濡傚悓瀹冪殑鍚嶅瓧涓鏍鋒槸涓涓眰嬈℃爲鐨勭粨鏋勶紝榪欎釜鏍戠殑鍙惰妭鐐逛繚瀛樹簡鍒嗗壊瀹ゅ唴絀洪棿鎵寰楀埌鐨勫浘鍏冮泦鍚堛傜幇鍦ㄩ殢鐫紜歡鍔犻焃緙撳啿鐨勫嚭鐜幫紝鎴戜滑鍙渶瑕佺敤寰堝皬鐨勪唬浠峰氨鍙互瀵圭┖闂翠腑鐨勫浘鍏冭繘琛屾帓搴忥紝浣嗘槸鍦?0騫翠唬鍒濈敱浜庣‖浠剁殑闄愬埗錛屼嬌鐢˙SP鐨勪富瑕佸師鍥犳槸鍥犱負瀹冨彲浠ュ絀洪棿涓殑鍥懼厓榪涜鎺掑簭鏉ヤ繚璇佹覆鏌撳浘鍏冪殑欏哄簭鏄寜鐓х敱鍚庤嚦鍓嶈繘琛岀殑錛屾崲鍙ヨ瘽璇達紝Z鍊兼渶灝忕殑鐗╀綋鎬繪槸鏈鍚庤娓叉煋銆傚綋鐒惰繕鏈夊叾浠栫殑綆楁硶鍙互瀹屾垚榪欎釜鍔熻兘錛屼緥濡傝憲鍚嶇殑鐢誨綆楁硶錛屼絾鏄畠涓嶣SP姣旇緝璧鋒潵閫熷害澶參浜嗭紝榪欐槸鍥犱負BSP閫氬父瀵瑰浘鍏冩帓搴忔槸棰勫厛璁$畻濂界殑鑰屼笉鏄湪榪愯鏃惰繘琛岃綆椼備粠鏌愮鎰忎箟涓婅BSP鎶鏈疄闄呬笂鏄敾瀹剁畻娉曠殑鎵╁睍錛屾濡傚悓BSP鎶鏈殑鍘熷璁捐涓鏍鳳紝鐢誨綆楁硶涔熸槸浣跨敤鐢卞悗鑷沖墠鐨勯『搴忓鍦烘櫙涓殑鐗╀綋榪涜娓叉煋銆備絾鏄敾瀹剁畻娉曟湁浠ヤ笅鐨勭己鐐癸細<br>l 濡傛灉涓涓墿浣撲粠鍙︿竴涓墿浣撲腑絀胯繃鏃跺畠涓嶈兘琚紜殑娓叉煋錛?br>l 鍦ㄦ瘡涓甯у琚覆鏌撶殑鐗╀綋榪涜鎺掑簭鏄潪甯稿洶闅劇殑錛屽悓鏃惰繍綆楃殑浠d環闈炲父澶э紱<br>l 瀹冩棤娉曠鐞嗗驚鐜鐩栫殑鎯呭喌錛屽鍥炬墍紺?</p> <p>          鍥?.1<br>BSP鍘熺悊<br>寤虹珛BSP Trees鐨勬渶鍒濇兂娉曟槸鑾峰緱涓涓浘鍏冪殑闆嗗悎錛岃繖涓泦鍚堟槸鍦烘櫙鐨勪竴閮ㄥ垎錛岀劧鍚庡垎鍓茶繖涓浘鍏冮泦鍚堜負鏇村皬鐨勫瓙闆嗗悎錛岃繖閲屽繀欏繪敞鎰忓瓙闆嗗悎蹇呴』涓?#8220;鍑稿杈瑰艦”銆傝繖鎰忓懗鐫瀛愰泦鍚堜腑浠諱竴涓杈瑰艦閮戒綅浜庣浉鍚岄泦鍚堜腑鍏跺畠澶氳竟褰㈢殑“鍓嶉潰”銆傛槸涓嶆槸鏈夌偣闅句互鐞嗚В鍛紝涓句竴涓緥瀛愶紝濡傛灉澶氳竟褰鐨勬瘡涓涓《鐐歸兘浣嶄簬鐢卞杈瑰艦B鎵緇勬垚鐨勪竴涓潰鐨勬闈紝閭d箞鍙互璇村杈瑰艦A浣嶄簬澶氳竟褰鐨?#8220;鍓嶉潰”錛屽弬鑰冨乏鍥俱傛垜浠彲浠ユ兂璞′竴涓嬶紝涓涓洅瀛愭槸鐢?涓潰緇勬垚鐨勶紝濡傛灉鎵鏈夌殑闈㈤兘鏈濆悜鐩掑瓙鐨勫唴閮紝閭d箞鎴戜滑鍙互璇寸洅瀛愭槸涓涓?#8220;鍑稿杈瑰艦”錛屽鏋滀笉鏄兘鏈濆悜鐩掑瓙鐨勫唴閮紝閭d箞鐩掑瓙灝變笉鏄?#8220;鍑稿杈瑰艦”銆?nbsp;                                               </p> <p>鍥?.2<br>涓嬮潰璁╂垜浠湅涓涓嬪浣曠‘瀹氫竴涓浘鍏冮泦鍚堟槸鍚︽槸涓涓?#8220;鍑稿杈瑰艦”錛屼吉綆楁硶濡備笅錛?br>l 鍑芥暟CLASSIFY-POINT<br>l 鍙傛暟:<br>l Polygon – 紜畾涓涓?D絀洪棿涓偣鐩稿浣嶇疆鐨勫弬鑰冨杈瑰艦銆?br>l Point – 寰呯‘瀹氱殑3D絀洪棿涓殑鐐廣?br>l 榪斿洖鍊?<br>l 鐐逛綅浜庡杈瑰艦鐨勫摢涓杈廣?br>l 鍔熻兘:<br>l 紜畾涓涓偣浣嶄簬琚杈瑰艦瀹氫箟鐨勯潰鐨勫摢涓杈廣?br>CLASSIFY-POINT (Polygon, Point)<br>1 Sidevalue = Polygon.Normal * Point<br>2 if (Sidevalue == Polygon.Distance)<br>3 then return COINCIDING<br>4 else if (Sidevalue < Polygon.Distance)<br>5 then return BEHIND<br>6 else return INFRONT<br>l 鍑芥暟 POLYGON-INFRONT<br>l 鍙傛暟:<br>l Polygon1 – 鐢ㄦ潵紜畾鍏跺畠澶氳竟褰㈡槸鍚﹀湪鍏?#8220;鍓嶉潰”鐨勫杈瑰艦銆?br>l Polygon2 – 媯嫻嬫槸鍚﹀湪絎竴涓杈瑰艦“鍓嶉潰”鐨勫杈瑰艦銆?br>l 榪斿洖鍊?<br>l 絎簩涓杈瑰艦鏄惁鍦ㄧ涓涓杈瑰艦鐨?#8220;鍓嶉潰”銆?br>l 鍔熻兘:<br>l 媯嫻嬬浜屼釜澶氳竟褰㈢殑姣忎竴涓《鐐規槸鍚﹀湪絎竴涓杈瑰艦鐨?#8220;鍓嶉潰”銆?br>POLYGON-INFRONT (Polygon1, Polygon2)<br>1 for each point p in Polygon2<br>2 if (CLASSIFY-POINT (Polygon1, p) <> INFRONT)<br>3 then return false<br>4 return true<br>l 鍑芥暟 IS-CONVEX-SET<br>l 鍙傛暟:<br>l PolygonSet – 鐢ㄦ潵媯嫻嬫槸鍚︿負“鍑稿杈瑰艦”鐨勫浘鍏冮泦鍚堛?br>l 榪斿洖鍊?<br>l 闆嗗悎鏄惁涓?#8220;鍑稿杈瑰艦”銆?br>l 鍔熻兘:<br>l 鐩稿浜庨泦鍚堜腑鐨勫叾瀹冨杈瑰艦媯鏌ユ瘡涓涓杈瑰艦錛岀湅鏄惁浣嶄簬鍏跺畠澶氳竟褰㈢殑“鍓嶉潰”錛屽鏋滄湁浠繪剰涓や釜澶氳竟褰笉婊¤凍榪欎釜瑙勫垯錛岄偅涔堣繖涓泦鍚堜笉涓?#8220;鍑稿杈瑰艦”銆?br>IS-CONVEX-SET (PolygonSet)<br>1 for i = 0 to PolygonSet.Length ()<br>2 for j = 0 to PolygonSet.Length ()<br>3 if(i != j && not POLYGON-INFRONT(PolygonSet, PolygonSet[j]))<br>4 then return false<br>5 return true</p> <p>鍦ㄥ嚱鏁癙OLYGON-INFRONT涓茍娌℃湁榪涜瀵圭О鐨勬瘮杈冿紝榪欐剰鍛崇潃濡傛灉澶氳竟褰浣嶄簬澶氳竟褰鐨?#8220;鍓嶉潰”浣犲茍涓嶈兘鎯沖綋鐒剁殑璁や負澶氳竟褰涓瀹氫綅浜庡杈瑰艦B鐨?#8220;鍓嶉潰”銆備笅闈㈢殑渚嬪瓙綆鍗曠殑鏄劇ず浜嗚繖涓鐐廣?br>      <br>                鍥?.3<br>鍦ㄥ浘1.3涓垜浠彲浠ョ湅鍒板杈瑰艦1浣嶄簬澶氳竟褰?鐨?#8220;鍓嶉潰”錛岃繖鏄洜涓洪《鐐筽3銆乸4浣嶄簬澶氳竟褰?鐨?#8220;鍓嶉潰”錛岃屽杈瑰艦2鍗存病鏈変綅浜庡杈瑰艦1鐨?#8220;鍓嶉潰”錛屽洜涓洪《鐐筽2浣嶄簬澶氳竟褰?鐨?#8220;鍚庨潰”銆?br>瀵逛簬涓涓狟SP灞傛鏍戞潵璇村彲浠ョ敤涓嬮潰緇撴瀯鏉ュ畾涔夛細<br>class BSPTree<br>{<br>BSPTreeNode RootNode // 鏍戠殑鏍硅妭鐐?br>}<br>class BSPTreeNode<br>{<br>BSPTree Tree // 鎺ョ偣鎵灞炵殑灞傛鏍?br>BSPTreePolygon Divider // 浣嶄簬涓や釜瀛愭爲涔嬮棿鐨勫杈瑰艦<br>BSPTreeNode *RightChild // 鑺傜偣鐨勫彸瀛愭爲<br>BSPTreeNode *LeftChild // 鑺傜偣鐨勫乏瀛愭爲<br>BSPTreePolygon PolygonSet[] // 鑺傜偣涓殑澶氳竟褰㈤泦鍚?br>}<br>class BSPTreePolygon<br>{<br>3DVector Point1 // 澶氳竟褰㈢殑欏剁偣1<br>3DVector Point3 // 澶氳竟褰㈢殑欏剁偣2<br>3DVector Point3 // 澶氳竟褰㈢殑欏剁偣3<br>}<br>鐜板湪浣犲彲浠ョ湅瑙佹瘡涓涓杈瑰艦鐢?涓《鐐規潵瀹氫箟錛岃繖鏄洜涓虹‖浠跺姞閫熷崱浣跨敤涓夎褰㈡潵瀵瑰杈瑰艦榪涜娓叉煋銆傚皢澶氳竟褰㈤泦鍚堝垎鍓蹭負鏇村皬鐨勫瓙闆嗗悎鏈夊緢澶氭柟娉曪紝渚嬪浣犲彲浠ヤ換鎰忛夋嫨絀洪棿涓殑涓涓潰鐒跺悗鐢ㄥ畠鏉ュ絀洪棿涓殑澶氳竟褰㈣繘琛屽垎鍓詫紝鎶婁綅浜庡垎鍓查潰姝i潰鐨勫杈瑰艦淇濆瓨鍒板彸瀛愭爲涓屼綅浜庡弽闈㈢殑澶氳竟褰繚瀛樺埌宸﹀瓙鏍戜腑銆備嬌鐢ㄨ繖涓柟娉曠殑緙虹偣闈炲父鏄庢樉錛岄偅灝辨槸濡傛灉鎯抽夋嫨涓涓皢絀洪棿涓殑澶氳竟褰㈠垎鍓蹭負涓や釜鐩哥瓑鐨勫瓙闆嗗悎鐨勯潰闈炲父鍥伴毦錛岃繖鏄洜涓哄湪鍦烘櫙涓湁鏃犳暟涓彲閫夋嫨鐨勯潰銆傚浣曞湪闆嗗悎涓夋嫨涓涓渶浣崇殑鍒嗗壊闈㈠憿錛熶笅闈㈡垜灝嗗榪欎釜闂緇欏嚭涓涓瘮杈冮傚綋鐨勮В鍐蟲柟妗堛?br>鎴戜滑鐜板湪宸茬粡鏈変簡涓涓嚱鏁癙OLYGON-INFRONT錛屽畠鐨勫姛鑳芥槸紜畾涓涓杈瑰艦鏄惁浣嶄簬鍏跺畠澶氳竟褰㈢殑姝i潰銆傜幇鍦ㄦ垜浠鍋氱殑鏄慨鏀硅繖涓嚱鏁幫紝浣垮畠涔熻兘澶熺‘瀹氫竴涓杈瑰艦鏄惁妯法榪囧叾瀹冨杈瑰艦瀹氫箟鐨勫垎鍓查潰銆傜畻娉曞涓嬶細<br>l 鍑芥暟 CALCULATE-SIDE<br>l 鍙傛暟 :<br>l Polygon1 – 紜畾鍏跺畠澶氳竟褰㈢浉瀵逛綅緗殑澶氳竟褰€?br>l Polygon2 – 紜畾鐩稿浣嶇疆鐨勫杈瑰艦銆?br>l 榪斿洖鍊?<br>l 澶氳竟褰?浣嶄簬澶氳竟褰?鐨勫摢涓杈?br>l 鍔熻兘:<br>l 閫氳繃絎竴涓杈瑰艦瀵圭浜屼釜澶氳竟褰笂鐨勬瘡涓涓《鐐硅繘琛屾嫻嬨傚鏋滄墍鏈夌殑欏剁偣浣嶄簬絎簩涓杈瑰艦鐨勬闈紝閭d箞澶氳竟褰?琚涓轟綅浜庡杈瑰艦1鐨?#8220;鍓嶉潰”銆傚鏋滅浜屼釜澶氳竟褰㈢殑鎵鏈夐《鐐歸兘浣嶄簬絎竴涓杈瑰艦鐨勫弽闈紝閭d箞澶氳竟褰?琚涓轟綅浜庡杈瑰艦1鐨?#8220;鍚庨潰”銆傚鏋滅浜屼釜澶氳竟褰㈢殑鎵鏈夐《鐐逛綅浜庣涓涓杈瑰艦涔嬩笂錛岄偅涔堝杈瑰艦2琚涓轟綅浜庡杈瑰艦1鐨勫唴閮ㄣ傛渶鍚庝竴縐嶅彲鑳芥槸鎵鏈夌殑欏剁偣鍗充綅浜庢闈㈡湁浣嶄簬鍙嶉潰錛岄偅涔堝杈瑰艦2琚涓烘í璺ㄨ繃澶氳竟褰?銆?br>CALCULATE-SIDE (Polygon1, Polygon2)<br>1 NumPositive = 0, NumNegative = 0<br>2 for each point p in Polygon2<br>3 if (CLASSIFY-POINT (Polygon1, p) = INFRONT)<br>4 then NumPositive = NumPositive + 1<br>5 if (CLASSIFY-POINT (Polygon1, p) = BEHIND)<br>6 then NumNegative = NumNegative + 1<br>7 if (NumPositive > 0 && NumNegative = 0)<br>8 then return INFRONT<br>9 else if(NumPositive = 0 && NumNegative > 0)<br>10 then return BEHIND<br>11 else if(NumPositive = 0 && NumNegative = 0)<br>12 then return COINCIDING<br>13 else return SPANNING<br>涓婇潰鐨勭畻娉曚篃緇欐垜浠В絳斾簡涓涓棶棰橈紝褰撲竴涓杈瑰艦妯法榪囧垎鍓查潰鏃跺浣曡繘琛屽鐞嗭紝涓婇潰鐨勭畻娉曚腑灝嗗杈瑰艦鍒嗗壊涓轟袱涓杈瑰艦錛岃繖鏍峰氨瑙e喅浜嗙敾瀹剁畻娉曚腑鐨勪袱涓棶棰橈細寰幆瑕嗙洊鍜屽杈瑰艦鐩鎬氦銆備笅闈㈢殑鍥懼艦鏄劇ず浜嗗杈瑰艦濡備綍榪涜鍒嗗壊鐨勩?br>            </p> <p>鍥?.4<br>濡傚浘1.4鎵紺猴紝澶氳竟褰?涓哄垎鍓查潰錛岃屽杈瑰艦2妯法榪囧杈瑰艦1錛屽鍥懼彸杈規墍紺猴紝澶氳竟褰㈣鍒嗗壊涓?銆?涓ら儴鍒嗭紝澶氳竟褰?浣嶄簬鍒嗗壊闈㈢殑“鍓嶉潰”鑰屽杈瑰艦3浣嶄簬鍒嗗壊闈㈢殑“鍚庨潰”銆?br>褰撳緩绔嬩竴涓狟SP鏍戞椂錛岄鍏堥渶瑕佺‘瀹氱殑闂鏄浣曚繚璇佷簩鍙夋爲鐨勫鉤琛★紝榪欐剰鍛崇潃瀵逛簬姣忎竴涓彾鑺傜偣鐨勫垎鍓叉繁搴﹁岃█涓嶈兘鏈夊お澶х殑宸紓錛屽悓鏃舵瘡涓涓妭鐐圭殑宸︺佸彸瀛愭爲闇瑕侀檺鍒跺垎鍓茬殑嬈℃暟銆傝繖鏄洜涓烘瘡涓嬈$殑鍒嗗壊閮戒細浜х敓鏂扮殑澶氳竟褰紝濡傛灉鍦ㄥ緩绔婤SP鏍戞椂浜х敓澶鐨勫杈瑰艦鐨勮瘽錛屽湪鍥懼艦鍔犻熷崱瀵瑰満鏅覆鏌撴椂浼氬姞閲嶆覆鏌撳櫒鐨勮礋鎷咃紝浠庤岄檷浣庡撫閫熴傚悓鏃朵竴涓笉騫寵 鐨勪簩鍙夋爲鍦ㄨ繘琛岄亶鍘嗘椂浼氳楄垂璁稿鏃犺皳鐨勬椂闂淬傚洜姝ゆ垜浠渶瑕佺‘瀹氫竴涓悎鐞嗙殑鍒嗗壊嬈℃暟浠ヤ究浜庤幏寰椾竴涓緝涓哄鉤琛$殑浜屽弶鏍戯紝鍚屾椂鍙互鍑忓皯鏂板杈瑰艦鐨勪駭鐢熴備笅闈㈢殑浠g爜鏄劇ず浜嗗浣曢氳繃寰幆澶氳竟褰㈤泦鍚堟潵鑾峰緱鏈浣崇殑鍒嗗壊澶氳竟褰€?br>l 鍑芥暟 CHOOSE-DIVIDING-POLYGON<br>l 鍙傛暟:<br>l PolygonSet – 鐢ㄤ簬鏌ユ壘鏈浣沖垎鍓查潰鐨勫杈瑰艦闆嗗悎銆?br>l 榪斿洖鍊?<br>l 鏈浣崇殑鍒嗗壊澶氳竟褰€?br>l 鍔熻兘:<br>l 瀵規寚瀹氱殑澶氳竟褰㈤泦鍚堣繘琛屾悳绱紝榪斿洖灝嗗叾鍒嗗壊涓烘渶浣沖瓙闆嗗悎鐨勫杈瑰艦銆傚鏋滄寚瀹氱殑闆嗗悎鏄竴涓?#8220;鍑稿杈瑰艦”鍒欒繑鍥炪?br>CHOOSE-DIVIDING-POLYGON (PolygonSet)<br>1 if (IS-CONVEX-SET (PolygonSet))<br>2 then return NOPOLYGON<br>3 MinRelation = MINIMUMRELATION<br>4 BestPolygon = NOPOLYGON<br>5 LeastSplits = INFINITY<br>6 BestRelation = 0<br>l 寰幆鏌ユ壘闆嗗悎鐨勬渶浣沖垎鍓查潰銆?br>7 while(BestPolygon = NOPOLYGON)<br>8 for each 澶氳竟褰1 in PolygonSet<br>9 if (澶氳竟褰1鍦ㄤ簩鍙夋爲寤虹珛榪囩▼涓病鏈変綔涓哄垎鍓查潰)<br>l 璁$畻琚綋鍓嶅杈瑰艦瀹氫箟鐨勫垎鍓查潰鐨勬闈€佸弽闈㈠拰妯法榪囧垎鍓查潰鐨勫杈瑰艦鐨勬暟閲忋?br>10 NumPositive = 0, NumNegative = 0, NumSpanning = 0<br>11 for each 澶氳竟褰2 in PolygonSet except P1<br>12 value = CALCULATE-SIDE(P1, P2)<br>13 if(value = INFRONT)<br>14 NumPositive = NumPositive + 1<br>15 else if(value = BEHIND)<br>16 NumNegative = NumNegative + 1<br>17 else if(value = SPANNING)<br>18 NumSpanning = NumSpanning + 1<br>l 璁$畻琚綋鍓嶅杈瑰艦鍒嗗壊鐨勪袱涓瓙闆嗗悎鐨勫杈瑰艦鏁伴噺鐨勬瘮鍊箋?br>19 if (NumPositive < NumNegative)<br>20 Relation = NumPositive / NumNegative<br>21 else<br>22 Relation = NumNegative / NumPositive<br>l 姣旇緝鐢卞綋鍓嶅杈瑰艦鑾峰緱鐨勭粨鏋溿傚鏋滃綋鍓嶅杈瑰艦鍒嗗壊浜嗚緝灝戠殑澶氳竟褰㈠悓鏃跺垎鍓插悗鐨勫瓙闆嗗悎姣斿煎彲浠ユ帴鍙楃殑璇濓紝閭d箞淇濆瓨褰撳墠鐨勫杈瑰艦涓烘柊鐨勫欓夊垎鍓查潰銆?br>l 濡傛灉褰撳墠澶氳竟褰㈠拰鏈浣沖垎鍓查潰涓鏍峰垎鍓蹭簡鐩稿悓鏁伴噺鐨勫杈瑰艦鑰屽垎鍓插悗鐨勫瓙闆嗗悎姣斿兼洿澶х殑璇濓紝灝嗗綋鍓嶅杈瑰艦浣滀負鏂扮殑鍊欓夊垎鍓查潰銆?br>23 if (Relation > MinRelation &&<br>(NumSpanning < LeastSplits ||<br>(NumSpanning = LeastSplits &&<br>Relation > BestRelation))<br>24 BestPolygon = P1<br>25 LeastSplits = NumSpanning<br>26 BestRelation = Relation<br>l 閫氳繃闄や互涓涓鍏堝畾涔夌殑甯擱噺鏉ュ噺灝戝彲鎺ュ彈鐨勬渶灝忔瘮鍊箋?br>27 MinRelation = MinRelation / MINRELATIONSCALE<br>28 return BestPolygon<br>綆楁硶鍒嗘瀽<br>瀵逛簬涓婇潰鐨勫嚱鏁版潵璇達紝鏍規嵁鍦烘櫙鏁版嵁澶у皬鐨勪笉鍚屽畠鍙兘鑺辮垂寰堥暱涓孌墊椂闂淬傚父閲廙INRELATIONSCALE鐢ㄦ潵紜畾鍦ㄦ瘡嬈″驚鐜椂鎵鍒嗗壊鐨勫瓙闆嗗悎澶氳竟褰㈡暟閲忕殑姣斿兼瘡嬈″噺灝戝灝戯紝涓轟粈涔堣浣跨敤榪欎釜甯擱噺鍛紝鑰冭檻涓涓嬶紝瀵逛簬緇欏畾鐨凪inRelation濡傛灉鎴戜滑鎵句笉鍒版渶浣崇殑鍒嗗壊闈紝閫氳繃闄や互榪欎釜甯擱噺灝嗘瘮鍊煎噺灝戞潵閲嶆柊榪涜寰幆鏌ユ壘錛岃繖鏍峰彲浠ラ槻姝㈡寰幆鐨勫嚭鐜幫紝鍥犳褰撹繖涓瘮鍊艱凍澶熷皬鏃舵垜浠繀瀹氬彲浠ヨ幏寰楀彲鎺ュ彈鐨勬渶浣崇粨鏋溿傛渶鍧忕殑浜嬫儏鏄垜浠湁涓涓寘鍚玁涓杈瑰艦鐨勯潪“鍑?#8221;闆嗗悎錛屽垎鍓插杈瑰艦灝嗛泦鍚堝垎鍓蹭負涓涓寘鍚玁-1涓杈瑰艦鐨勯儴鍒嗗拰涓涓寘鍚?涓杈瑰艦鐨勯儴鍒嗐傝繖涓粨鏋滃彧鏈夊湪鏈灝忔瘮鍊煎皬浜?/(n-1)鎵嶆槸鍙互鎺ュ彈鐨勶紙鍙傝冪畻娉曠殑19-23琛岋級銆傝繖鎰忓懗鐫MinRelation /MINRELATIONSCALEi < 1/(n-1)錛岃繖閲宨鏄驚鐜噸澶嶇殑嬈℃暟銆傝鎴戜滑鍋囪MinRelation鐨勫垵濮嬪寲鍊間負1錛岀敱浜庢瘮鍊兼案榪滀負0-1涔嬮棿鐨勫煎洜姝よ繖鏄渶鍙兘鐨勫鹼紙鍙傝冪畻娉曠殑19-22琛岋級銆傛垜浠湁<br>1 / MINRELATIONSCALEi < 1/(n-1)<br>1 < MINRELATIONSCALEi/(n-1)<br>(n-1) < MINRELATIONSCALEi<br>logMINRELATIONSCALE (n-1) < i<br>榪欓噷鐨刬娌℃湁涓婅竟鐣岋紝浣嗘槸鍥犱負i闈炲父鎺ヨ繎浜巐ogMINRELATIONSCALE (n-1)錛屾垜浠彲浠ョ畝鍗曠殑鍋囪涓よ呮槸鐩哥瓑鐨勩傚彟澶栨垜浠篃鍋囪MINRELATIONSCALE姘歌繙澶т簬鎴栫瓑浜?錛屽洜姝ゆ垜浠彲浠ユ湁<br>logMINRELATIONSCALE (n-1) = i <br>MINRELATIONSCALE >= 2<br>i = logMINRELATIONSCALE (n-1) < lg(n-1) = O(lg n)<br>鍦ㄥ驚鐜殑鍐呴儴錛屽澶氳竟褰㈢殑闆嗗悎闇瑕侀噸澶嶈繘琛屼袱嬈″驚鐜紝鍥犳瀵規垜浠潵璇存渶鍧忕殑鎯呭喌涓嬭繖涓畻娉曠殑澶嶆潅搴︿負O(n2lg n)錛岃岄氬父鎯呭喌涓嬭繖涓畻娉曠殑澶嶆潅搴︽帴榪戜簬O(n2)銆?br>鍦ㄥ嚱鏁癈HOOSE-DIVIDING-POLYGON鐨勫驚鐜腑鐪嬭搗鏉ュ鏋滀笉鍙戠敓浠涔堜簨鎯呯殑璇濆ソ璞℃案榪滀笉浼氬仠姝紝浣嗘槸榪欎笉浼氬彂鐢燂紝榪欐槸鍥犱負濡傛灉澶氳竟褰㈤泦鍚堜負闈?#8220;鍑?#8221;闆嗗悎鐨勮瘽鎬昏兘鎵懼埌涓涓杈瑰艦鏉ユ妸闆嗗悎鍒嗗壊涓轟袱涓瓙闆嗗悎銆侰HOOSE-DIVIDING-POLYGON鍑芥暟鎬繪槸閫夋嫨鍒嗗壊闆嗗悎鐨勫杈瑰艦鏁伴噺鏈灝戠殑澶氳竟褰紝涓轟簡闃叉閫夋嫨騫朵笉鍒嗗壊闆嗗悎鐨勫杈瑰艦錛屽垎鍓插悗鐨勫瓙闆嗗悎鐨勫杈瑰艦鏁伴噺涔嬫瘮蹇呴』澶т簬棰勫厛瀹氫箟鐨勫箋備負浜嗘洿濂界殑鐞嗚В鎴戜笂闈㈡墍璁茶В鐨勫唴瀹癸紝涓嬮潰鎴戝皢涓句竴涓緥瀛愭潵璇存槑濡備綍閫夋嫨涓涓杈瑰艦瀵逛竴涓緢灝戞暟閲忓杈瑰艦鐨勯泦鍚堣繘琛屽垎鍓層?/p> <p>      鍥?.5<br>鍦ㄤ笂闈㈢殑渚嬪瓙涓棤璁轟綘閫夋嫨澶氳竟褰?銆?銆?榪樻槸澶氳竟褰?榪涜娓叉煋鏃墮兘涓嶄細鍒嗗壊浠諱綍鍏跺畠鐨勫杈瑰艦錛屾崲鍙ヨ瘽璇翠篃灝辨槸鎵鏈夌殑鍏跺畠澶氳竟褰㈤兘浣嶄簬榪欎簺澶氳竟褰㈢殑“姝i潰”銆?br>鍏充簬鍒嗗壊鏃墮夋嫨浜х敓澶氳竟褰㈡渶灝戠殑鍒嗗壊闈㈠彟澶栦竴涓笉澶ソ鐨勫師鍥犳槸澶у鏁版椂鍊欏畠鎵浜х敓鐨勫眰嬈℃爲閫氬父鏄笉騫寵 鐨勶紝鑰屼竴涓鉤琛$殑灞傛鏍戝湪榪愯鐨勬椂鍊欓氬父姣斾笉騫寵 鐨勫眰嬈℃爲鎬ц兘鏇村ソ銆?br>褰撹幏寰楁渶浣崇殑鍒嗗壊闈㈠悗浼撮殢鐫蹇呯劧浜х敓涓浜涜鍒嗗壊鐨勫杈瑰艦錛屽浣曞琚垎鍓茬殑澶氳竟褰㈣繘琛屽鐞嗗憿錛岃繖閲屾湁涓や釜鏂規硶錛?br>1. 寤虹珛涓涓甫鍙惰妭鐐圭殑浜屽弶鏍戯紝榪欐剰鍛崇潃姣忎竴涓杈瑰艦灝嗚鏀懼湪鍙惰妭鐐逛腑錛屽洜姝ゆ瘡涓涓鍒嗗壊鐨勫杈瑰艦涔熷皢琚垎寮鏀懼湪浜屽弶鏍戠殑涓杈廣?br>2. 鍙﹀涓涓柟娉曟槸灝嗚鍒嗗壊鐨勫杈瑰艦淇濆瓨鍒板叕鍏辮妭鐐逛腑錛屽姣忎竴涓瓙鏍戦噸澶嶈繖涓繃紼嬬洿鍒版瘡涓涓彾鑺傜偣閮藉寘鍚簡涓涓?#8220;鍑?#8221;澶氳竟褰㈤泦鍚堜負姝€?br>浜х敓甯﹀彾鑺傜偣鐨凚SP鏍戠殑綆楁硶濡備笅錛?br>l 鍑芥暟GENERATE-BSP-TREE<br>l 鍙傛暟:<br>l Node – 嬈插緩绔嬬殑綾誨瀷涓築SPTreeNode鐨勫瓙鏍戙?br>l PolygonSet – 寤虹珛BSP-tree鐨勫杈瑰艦闆嗗悎銆?br>l 榪斿洖鍊?<br>l 淇濆瓨鍒拌緭鍏ョ殑鐖惰妭鐐逛腑鐨凚SP-tree銆?br>l 鍔熻兘:<br>l 瀵逛竴涓杈瑰艦闆嗗悎浜х敓涓涓狟SP-tree銆?br>GENERATE-BSP-TREE (Node, PolygonSet)<br>1 if (IS-CONVEX-SET (PolygonSet))<br>2 Tree = BSPTreeNode (PolygonSet)<br>3 Divider = CHOOSE-DIVIDING-POLYGON (PolygonSet)<br>4 PositiveSet = {}<br>5 NegativeSet = {}<br>6 for each polygon P1 in PolygonSet<br>7 value = CALCULATE-SIDE (Divider, P1)<br>8 if(value = INFRONT)<br>9 PositiveSet = PositiveSet U P1<br>10 else if (value = BEHIND)<br>11 NegativeSet = NegativeSet U P1<br>12 else if (value = SPANNING)<br>13 Split_Polygon10 (P1, Divider, Front, Back)<br>14 PositiveSet = PositiveSet U Front<br>15 NegativeSet = NegativeSet U Back<br>16 GENERATE-BSP-TREE (Tree.RightChild, PositiveSet)<br>17 GENERATE-BSP-TREE (Tree.LeftChild, NegativeSet)<br>綆楁硶鍒嗘瀽<br>鍑芥暟CHOOSE-DIVIDING-POLYGON鐨勬椂闂村鏉傚害涓篛(n2 lg n)錛岄櫎闈炲嚭鐜伴掑綊璋冪敤鍚﹀垯瀹冨皢鎺у埗鍏跺畠鐨勫嚱鏁幫紝濡傛灉鎴戜滑鍋囪瀵瑰杈瑰艦闆嗗悎鐨勫垎鍓叉槸姣旇緝鍏鉤鐨勮瘽錛岄偅涔堟垜浠彲浠ラ氳繃鍏紡鏉ュ鍑芥暟GENERATE-BSP-TREE鐨勫鏉傚害榪涜琛ㄨ揪錛?br>T(n) = 2T(n/2) + O(n2 lg n)<br>閫氳繃鍏紡鎴戜滑鍙互鐭ラ亾榪欎釜鍑芥暟鐨勫鏉傚害涓篞 (n2 lg n)銆傝繖閲宯涓鴻緭鍏ョ殑澶氳竟褰㈤泦鍚堢殑澶氳竟褰㈡暟閲忋?br>涓嬮潰鎴戣鐢ㄤ竴涓緥瀛愭潵婕旂ず濡備綍浜х敓涓涓狟SP-tree銆備笅闈㈢殑緇撴瀯鏄竴涓杈瑰艦鐨勫師濮嬮泦鍚堬紝涓轟簡琛ㄧず鏂逛究瀵規瘡涓涓杈瑰艦閮借繘琛屼簡緙栧彿錛岃繖涓杈瑰艦闆嗗悎灝嗚鍒嗗壊涓轟竴涓狟SP-tree銆?/p> <p><br>            鍥?.6<br>涓轟簡鑳藉榪愯榪欎釜綆楁硶鎴戜滑蹇呴』瀵瑰父閲廙INIMUMRELATION鍜孧INRELATIONSCALE榪涜璧嬪鹼紝鍦ㄥ疄闄呰繍琛屼腑鎴戜滑鍙戠幇褰揗INIMUMRELATION=0.8鑰孧INRELATIONSCALE=2鏃跺彲浠ヨ幏寰楁瘮杈冨ソ鐨勭粨鏋溿備絾鏄綘涔熷彲浠ュ榪欎簺鏁板艱繘琛岃瘯楠屾潵姣旇緝涓涓嬶紝閫氬父褰撳父鏁癕INIMUMRELATION姣旇緝澶ф椂鑾峰緱鐨勫眰嬈℃爲浼氭瘮杈冨鉤琛′絾鍚屾椂鍒嗗壊浜х敓鐨勫杈瑰艦涔熶細澶ч噺澧炲姞銆傚湪涓婂浘鏄劇ず鐨勫杈瑰艦闆嗗悎騫朵笉鏄竴涓?#8220;鍑?#8221;鐨勶紝鍥犳棣栧厛鎴戜滑闇瑕侀夋嫨涓涓悎閫傜殑鍒嗗壊闈€傚湪蹇熺殑瀵逛笂闈㈢殑緇撴瀯榪涜涓涓嬫祻瑙堝悗鎴戜滑鍙互鐭ラ亾澶氳竟褰紙1銆?銆?銆?2銆?8錛変笉鑳借鐢ㄦ潵浣滀負鍒嗗壊闈紝榪欐槸鍥犱負瀹冧滑瀹氫箟浜嗗寘鍚墍鏈夊杈瑰艦闆嗗悎鐨勫褰€備絾鏄叾瀹冪殑澶氳竟褰㈤兘鍙互浣滀負鍊欓夌殑鍒嗗壊闈€傚垎鍓蹭駭鐢熺殑澶氳竟褰㈡渶灝戝悓鏃跺垎鍓蹭負涓や釜瀛愰泦鍚堢殑澶氳竟褰㈡暟鐩箣姣斾負鏈浣崇殑澶氳竟褰㈡槸16涓?7錛屽畠浠綅浜庡悓涓鏉$洿綰夸笂鍚屾椂騫朵笉浼氬垎鍓蹭換浣曠殑澶氳竟褰€傝屽垎鍓插悗鐨勫瓙闆嗗悎鐨勫杈瑰艦鏁扮洰涔熸槸涓鏍風殑錛岄兘鏄?#8220;姝i潰”涓?3鑰?#8220;鍙嶉潰”涓?5銆傝鎴戜滑閫夋嫨澶氳竟褰?6浣滀負鍒嗗壊闈紝閭d箞鍒嗗壊鍚庣殑鐨勭粨鏋勫涓嬶細<br>                        </p> <p>鍥?.7<br>鐜板湪浠庡浘1.7鎴戜滑鍙互鐪嬪埌鏃犺鏄乏瀛愭爲榪樻槸鍙沖瓙鏍戦兘娌℃湁鍖呭惈“鍑?#8221;澶氳竟褰㈤泦鍚堬紝鍥犳闇瑕佸涓や釜瀛愭爲緇х畫榪涜鍒嗗壊銆?br>鍦ㄥ乏瀛愭爲涓杈瑰艦1銆?銆?銆?浣滀負澶氳竟褰㈤泦鍚堢殑“鍑歌竟”涓嶈兘鐢ㄥ仛鍒嗗壊闈紝鑰屽杈瑰艦4銆?0鍦ㄥ悓涓鏉$洿綰夸笂鍚屾椂娌℃湁鍒嗗壊浠諱綍澶氳竟褰紝鑰屽垎鍓插悗鐨勫杈瑰艦瀛愰泦鍚堬細“姝i潰”涓?鑰?#8220;鍙嶉潰”涓?闈炲父鐨勫鉤琛★紝鎴戜滑閫夋嫨澶氳竟褰?涓哄垎鍓查潰銆?br>鍦ㄥ彸瀛愭爲涓杈瑰艦16銆?7銆?2銆?3銆?8涓嶈兘浣滀負鍒嗗壊闈紝鑰屽杈瑰艦18銆?9銆?6銆?7铏界劧娌℃湁鍒嗗壊浠諱綍澶氳竟褰絾鏄垎鍓插悗鐨勫杈瑰艦瀛愰泦鍚堬細“姝i潰”涓?1鑰?#8220;鍙嶉潰”涓?錛?/11榪欎釜姣斿煎皬浜庢渶灝忔瘮鍊?.5鍥犳鎴戜滑闇瑕佸鎵懼叾瀹冩洿閫傚悎鐨勫杈瑰艦銆傚杈瑰艦20銆?1銆?4銆?5閮藉彧鍒嗗壊浜嗕竴涓杈瑰艦錛屼絾鏄杈瑰艦21鐪嬭搗鏉ュ垎鍓插悗鐨勭粨鏋滄洿鍚堢悊錛屽湪鍒嗗壊榪囧杈瑰艦22鍚庡杈瑰艦瀛愰泦鍚堢殑緇撴灉涓猴細“姝i潰”涓?鑰?#8220;鍙嶉潰”涓?銆?br>涓嬪浘鏄劇ず浜嗘搷浣滃悗鐨勭粨鏋滐細</p> <p><br>                鍥?.8<br>鍦ㄥ浘涓瘡涓涓瓙闆嗗悎榪樹笉鏄竴涓?#8220;鍑?#8221;闆嗗悎錛屽洜姝ら渶瑕佺戶緇繘琛屽垎鍓詫紝鎸夌収涓婇潰鐨勬硶鍒欏鍥?.8鎵紺虹殑緇撴瀯榪涜鍒嗗壊鍚庯紝緇撴灉濡備笅錛?br>                      </p> <p>鍥?.9<br>涓婂浘鏄劇ず浜嗘渶鍚庣殑緇撴灉錛岃繖鍙兘涓嶆槸鏈浼樼殑緇撴灉浣嗘槸鎴戜滑瀵瑰畠榪涜澶勭悊鎵鑺辮垂鐨勬椂闂村茍涓嶅お闀褲?br>娓叉煋BSP<br>鐜板湪鎴戜滑宸茬粡寤虹珛濂戒竴涓狟SP鏍戜簡錛屽彲浠ュ緢瀹規槗瀵規爲涓殑澶氳竟褰㈣繘琛屾紜殑娓叉煋錛岃屼笉浼氫駭鐢熶換浣曢敊璇備笅闈㈢殑綆楁硶鎻忚堪浜嗗浣曞瀹冭繘琛屾覆鏌擄紝榪欓噷鎴戜滑鍋囪鍑芥暟IS-LEAF鐨勫姛鑳戒負緇欏畾涓涓狟SP鑺傜偣濡傛灉涓哄彾鑺傜偣榪斿洖鐪熷惁鍒欒繑鍥炲亣銆?br>鍑芥暟DRAW-BSP-TREE<br>鍙傛暟:<br>l Node – 琚覆鏌撶殑鑺傜偣銆?br>l Position – 鎽勮薄鏈虹殑浣嶇疆銆?br>l 榪斿洖鍊?<br>l None<br>l 鍔熻兘:<br>l 娓叉煋鍖呭惈鍦ㄨ妭鐐瑰強鍏跺瓙鏍戜腑鐨勫杈瑰艦銆?br>DRAW-BSP-TREE (Node, Position)<br>1 if (IS-LEAF(Node))<br>2 DRAW-POLYGONS (Node.PolygonSet)<br>3 return</p> <p>l 璁$畻鎽勮薄鏈哄寘鍚湪鍝竴涓瓙鏍戜腑銆?br>4 Side = CLASSIFY-POINT (Node.Divider, Position)<br>l 濡傛灉鎽勮薄鏈哄寘鍚湪鍙沖瓙鏍戜腑鍏堟覆鏌撳彸瀛愭爲鍐嶆覆鏌撳乏瀛愭爲銆?br>5 if (Side = INFRONT || Side = COINCIDING)<br>6 DRAW-BSP-TREE (Node.RightChild, Position)<br>7 DRAW-BSP-TREE (Node.LeftChild, Position)</p> <p>l 鍚﹀垯鍏堟覆鏌撳乏瀛愭爲銆?br>8 else if(value = BEHIND)<br>9 DRAW-BSP-TREE (Node.LeftChild, Position)<br>10 DRAW-BSP-TREE (Node.RightChild, Position)<br>鐢ㄨ繖涓柟娉曡繘琛屾覆鏌撳茍娌℃湁鍑忓皯娓叉煋鍒板睆騫曚笂鐨勫杈瑰艦鏁伴噺錛岀敱浜庝竴涓満鏅彲鑳藉寘鍚垚鐧句笂鍗冧釜澶氳竟褰㈠洜姝よ繖涓柟娉曞茍涓嶆槸寰堝ソ鐨勮В鍐蟲柟妗堛傞氬父鎯呭喌涓嬫湁澶ч噺鐨勮妭鐐瑰拰澶氳竟褰㈠茍娌℃湁澶勪簬鎽勮薄鏈虹殑瑙嗛噹鑼冨洿涔嬪唴錛屽畠浠茍涓嶉渶瑕佽娓叉煋鍒板睆騫曚笂錛屽浣曟煡鎵捐繖浜涗笉鍙鐨勮妭鐐瑰拰澶氳竟褰㈤槻姝㈠畠浠覆鏌撳埌灞忓箷涓婂憿錛岄殣钘忛潰鍓旈櫎灝辨槸涓轟簡瑙e喅榪欎釜闂鑰屾彁鍑轟竴欏規妧鏈紝鍦ㄤ笅涓鑺備腑鎴戜滑灝嗗榪欓」鎶鏈繘琛岃緇嗙殑闃愯堪銆?br>BSP鎶鏈瑙?</p> <p>eXtreme3D</p> <p><br>絎簩鑺?闅愯棌闈㈠墧闄?br>    瀵逛笉鍙鐗╀綋榪涜鍓旈櫎鏄父鎴忚涓氫負浜嗘弧瓚蟲彁楂樼敾闈㈡覆鏌撻熷害鐨勮姹傝屼駭鐢熺殑涓欏規妧鏈紝灝辨槸鍦ㄧ‖浠跺姞閫熸妧鏈璺冨彂灞曠殑浠婂ぉ錛岃櫧鐒剁幇鍦ㄥ凡緇忓彲浠ュ畬鎴愯澶氬湪榪囧幓琚涓烘槸涓嶅彲鑳藉疄鐜扮殑宸ヤ綔錛屼絾鏄浜庨殣钘忛潰榪涜鍓旈櫎浠嶆槸鍔犻熷浘褰㈡覆鏌撶殑涓欏歸噸瑕佹妧鏈傞氬父褰撲竴涓父鎴忚繍琛岀殑鏃跺欙紝瀹冩渶灝戦渶瑕佷互姣忕30甯х殑閫熷害榪愯銆傚湪鍑犲勾鍓嶈繖鎰忓懗鐫濡傛灉姣忎竴甯т綘娓叉煋鐨勫甫綰圭悊鐨勫杈瑰艦鏁伴噺瓚呰繃5000涓氨琚涓烘槸涓嶅彲鎺ュ彈鐨勶紝鑰岀幇鍦ㄥ嚑涔庢墍鏈夌殑鍟嗕笟鏄懼崱姣忎竴縐掗兘鍙互娓叉煋鍑犲崈涓囦釜澶氳竟褰€傚彲鏄幇鍦ㄤ粛鐒墮渶瑕佷嬌鐢ㄩ殣钘忛潰鍓旈櫎榪欓」鎶鏈紝榪欐槸涓轟粈涔堝憿錛熸樉鑰屾槗瑙侊紝瀵逛笉鍙鐗╀綋娓叉煋浠ュ悗灝嗕細琚彲瑙佺墿浣撻伄鎸′綇錛岃繖鏍峰仛鏃犺皳鐨勬氮璐逛簡鏄懼崱鐨勫甫瀹斤紝浣嗘槸鍚屾椂瀹冧篃澧炲姞浜嗗満鏅殑緇嗚妭錛屼嬌娓告垙鐢婚潰鐪嬭搗鏉ユ洿鍔犲惛寮曚漢銆傜幇鍦ㄧ殑闂鏄澶х▼搴︿笂鏉ュ墧闄ら殣钘忕殑澶氳竟褰紝璞iew frustum culling鍜宲ortal娓叉煋榪欐牱鐨勬妧鏈潵鍓旈櫎涓涓笉鍙澶氳竟褰㈡槸闈炲父鑰楄垂鏃墮棿鐨勶紝鐢ㄦ潵鍘誨仛榪欎簺璁$畻鐨凜PU鏃墮棿鍙互鐢ㄦ潵瀹屾垚鍏跺畠璇稿AI鎴栫鎾炴嫻嬭繖鏍風殑宸ヤ綔錛屽洜姝ゅ紑鍙戜竴涓殣钘忛潰鍓旈櫎綆楁硶蹇呴』娉ㄦ剰鍒拌繖涓鐐廣傚浜庣幇鍦ㄧ殑娓告垙鏉ヨ鍑犱箮娌℃湁涓涓槸灝嗘瘡涓涓殣钘忕殑澶氳竟褰㈤兘榪涜鍓旈櫎錛岃屾槸鍓旈櫎涓涓杈瑰艦鐨勯泦鍚堝涓涓妭鐐規垨涓涓墿浣撶瓑絳夈傚浜庝竴涓崟鐙殑澶氳竟褰㈠畠騫朵笉榪涜鍓旈櫎錛屽洜姝や竴涓紜殑闅愯棌闈㈠墧闄ゆ柟妗堟槸鍏佽涓瀹氱殑閲嶅娓叉煋鏉ラ傚綋鐨勫噺灝戣綆楅噺銆?br>    褰撳緩绔嬩竴涓狥PS娓告垙鏃惰繘琛岄殣钘忛潰鍓旈櫎鏈閫氬父鐨勬柟娉曟槸浣跨敤portal娓叉煋銆傝繖欏規妧鏈彲浠ラ潪甯稿厖鍒嗙殑鍒╃敤BSP鐨勪紭鐐癸紝浣嗘槸璇鋒敞鎰弍ortal鎶鏈茍涓嶄粎浠呭彧鑳界敤浜嶣SP涓侾ortal鎶鏈繕鍙互鐢ㄦ潵浜х敓涓浜涚壒鏁堝闀滃瓙鍜岀洃瑙嗗櫒絳夌瓑銆?br>Portal娓叉煋<br>鍦ㄨ繖閲屾垜灝嗕粙緇嶄竴涓媝ortal鎶鏈殑鍘熺悊錛岄氬父瀵逛簬涓涓鍐呭満鏅潵璇村畠鍙互琚弿榪頒負鐢變竴涓釜“媧炲彛”鐩鎬簰榪炴帴鐨?#8220;鎴塊棿”緇勬垚錛岃繖閲?#8220;媧炲彛”琚О涓簆ortal鑰?#8220;鎴塊棿”琚О涓簊ector錛岄氬父sector琚畾涔変負涓涓?#8220;鍑?#8221;鐨?#8220;闂悎”鐨勫杈瑰艦闆嗗悎錛屽畾涔変腑鐨?#8220;鍑?#8221;闃呰榪囧墠闈㈢殑鍐呭浣犲簲褰撳凡緇忚兘寰堝ソ鐨勭悊瑙d簡錛岃?#8220;闂悎”鏄粈涔堟剰鎬濆憿錛熷畠鎰忓懗鐫鍦╯ector鍐呴儴浠繪剰榪炴帴涓や釜欏剁偣鍋氫竴鏉$嚎孌碉紝榪欐潯綰挎涓嶄細鍜屽叾瀹冪殑澶氳竟褰㈢浉浜ゃ傛崲鍙ヨ瘽璇村鏋滀綘鎯沖湪sector鍐呴儴浠繪剰鐢諱竴鏉$嚎孌甸氬埌sector鐨勫閮ㄥ繀瀹氫笌緇勬垚sector鐨勫杈瑰艦鐩鎬氦銆傝繖涔熸剰鍛崇潃榪炴帴姣忎竴涓猻ector鐨?#8220;媧炲彛”蹇呴』琚竴涓粍鎴恜ortal鐨勫杈瑰艦鎵濉厖錛岃屽浜庢斁緗畃ortal澶氳竟褰㈡潵璇翠綘鏃㈠彲浠ユ墜宸ユ斁緗篃鍙互鐢辯▼搴忚嚜鍔ㄤ駭鐢燂紝鍦ㄦ垜璁茶В榪欓」鎶鏈箣鍓嶆垜蹇呴』鎻愰啋涓涓嬶紝鐢變簬紜歡鍔犻焃緙撳啿鐨勫嚭鐜板sector蹇呴』涓?#8220;鍑?#8221;鐨勯檺鍒跺凡緇忔秷闄わ紝鍥犳鏈夎澶氭父鎴忓紩鎿庡凡緇忎笉鍐嶉伒瀹堣繖涓爣鍑嗭紝浣嗘槸鍦ㄨ繖閲屾垜榪樻槸瑕佸榪囧幓鐨勬柟娉曡繘琛屼竴涓嬩粙緇嶃?br>涓涓猵ortal寮曟搸鐨勫熀鏈柟娉曟槸褰撲綘閫氳繃涓涓寚瀹氳瀵熶綅緗殑鍙騫蟲埅浣擄紙view frustum錛夎繘琛屾覆鏌撴椂錛屽鏋滀竴涓猵ortal鍑虹幇鍦ㄥ彲瑙嗚寖鍥村唴錛岄偅涔坧ortal灝嗗鍙騫蟲埅浣撹繘琛屽壀鍒囷紝榪欐牱涓庡叾鐩歌繛鐨剆ector灝嗕細閫氳繃涓涓瀵熶綅緗浉鍚屼絾宸茬粡鏀瑰彉榪囩殑鍙騫蟲埅浣撹繘琛屾覆鏌撱傝繖鏄竴涓潪甯哥畝鍗曡屼笖闈炲父閫傚悎榪涜閫掑綊璋冪敤鐨勬柟娉曪紝鐢變簬鍙騫蟲埅浣撹portal榪涜浜嗙簿紜殑闄愬埗錛屽洜姝よ闅愯棌鐨勭墿浣撳彲浠ュ緢綆鍗曡繘琛屽墧闄ゃ備笅闈㈢殑渚嬪浘鏄劇ず浜嗕竴涓猵ortal寮曟搸涓殑鍙騫蟲埅浣撴槸濡備綍琚壀鍒囩殑銆?br>                <br>鍥?.10<br>鍦ㄥ浘6.10涓瀵熻呯殑浣嶇疆浣嶄簬V錛岃屽垵濮嬬殑鍙騫蟲埅浣撲負F1錛屽綋瀹冮氳繃涓涓猵ortal澶氳竟褰1鍚庤P1鍓垏浜х敓鏂扮殑鍙騫蟲埅浣揊2錛屾帴鐫褰撳畠閫氳繃portal澶氳竟褰2銆丳3鍚嶧2琚壀鍒囦負F3銆丗4錛岃孎3閫氳繃P4鍚庤鍓垏涓篎5鑰孎4琚壀鍒囦負F6銆傝瀵熻繖涓繃紼嬫垜浠彲浠ュ彂鐜皃ortal鎶鏈潪甯擱傚悎榪涜閫掑綊璋冪敤銆?br>鎺ョ潃闇瑕佽冭檻鐨勬槸濡備綍瀵圭墿浣撹繘琛屾嫞閫夊墧闄わ紝閫氬父瀵逛簬鎵鏈夌殑3D寮曟搸鏉ヨ閮介渶瑕侀氳繃涓緋誨垪姝ラ鏉ュ姞閫熻繖涓鐞嗚繃紼嬶紝鍥炲繂涓涓嬪墠闈㈣瑙g殑鍐呭錛岃繖涓繃紼嬮鍏堣璁$畻鍑虹墿浣撶殑“鏈澶у寘鍥寸悆”鎴栨槸“鏈澶у寘鍥寸洅”錛屽畠鏄寘鍚簡鐗╀綋鎵鏈夐《鐐圭殑鏈灝忓寘鍥翠綋錛屾帴鐫鐢ㄥ寘鍥翠綋鏉ュ拰“鍙騫蟲埅浣?#8221;姣忎竴涓壀鍒囬潰榪涜紕版挒媯嫻嬶紝濡傛灉鍖呭洿浣撲綅浜庢瘡涓涓壀鍒囬潰鐨?#8220;鍙嶉潰”閭d箞鐗╀綋灝嗕笉浼氳繘琛屾覆鏌擄紝涓嬪浘鏄劇ず浜嗚繖涓繃紼嬶細<br>        <br>鍥?.11<br>鍥句腑鐗╀綋1浣嶄簬鍙沖壀鍒囬潰鐨?#8220;姝i潰”浣嗕綅浜庡乏鍓垏闈㈢殑“鍙嶉潰”鍥犳瀹冨皢涓嶄細琚覆鏌擄紝鑰岀墿浣?涓嶄粎浣嶄簬宸﹀壀鍒囬潰鐨?#8220;姝i潰”鑰屼笖鏈変竴閮ㄥ垎浣嶄簬鍙沖壀鍒囬潰鐨?#8220;姝i潰”鍥犳灝嗕細琚覆鏌撳嚭鏉ャ?br>Portal鎶鏈渶鍒濈殑鎯蟲硶鏄氳繃鍓垏澶氳竟褰㈡潵淇濊瘉鍙湁鐗╀綋鍙鐨勯儴鍒嗚娓叉煋鍑烘潵錛屼篃灝辨槸鏃犳晥娓叉煋鐨勫杈瑰艦鏁伴噺涓?銆備絾鏄幇鍦ㄨ繖縐嶆兂娉曡璁や負涓嶆槸寰堢悊鎯籌紝鍥犱負瀹冩棤璋撶殑嫻垂浜嗗鐞嗘椂闂淬備絾鏄敱浜庝竴涓杈瑰艦鍦ㄩ掑綊寰幆榪囩▼涓皢琚亶鍘嗗嬈″洜姝ゆ垜浠渶瑕佺煡閬撳湪娓叉煋鍦烘櫙鏃跺畠鏄惁宸茬粡琚覆鏌撹繃錛屼竴涓緝濂界殑鏂規硶鏄嬌鐢ㄤ竴涓撫鏁版潵鏍囪瘑榪欎釜澶氳竟褰紝榪欐牱鍙互寰堝鏄撶殑鏉ユ弿榪拌繖涓杈瑰艦鍦ㄤ笂涓甯ф槸鍚﹁娓叉煋榪囥傚啀鐪嬩竴涓嬪浘6.10涓渶鍙寵竟鐨勫錛屽畠鍚屾椂閫氳繃F5鍜孎6鏉ヨ繘琛屾覆鏌擄紝閫氳繃瀵瑰畠榪涜鏍囪瘑鎴戜滑鍙互鐭ラ亾瀹冩槸鍚﹁娓叉煋榪囷紝鍚﹀垯灝變細浜х敓Z緙撳啿閿欒銆?br>涓轟簡渚夸簬鍦╬ortal寮曟搸涓繘琛屾覆鏌撴垜浠渶瑕佸“鍙騫蟲埅浣?#8221;榪涜涓涓嬪畾涔夛紝涓涓?#8220;鍙騫蟲埅浣?#8221;鏄竴涓繚瀛樹簡澶氫釜鍓垏闈㈢殑緇撴瀯錛屾瘡涓涓壀鍒囬潰鐨勬硶綰塊兘灝嗘寚鍚?#8220;鍙騫蟲埅浣?#8221;鐨勫唴閮紝鍥犳鍦ㄥ畠鍐呴儴灝嗕駭鐢熶竴涓棴鍚堢殑閿ヤ綋銆備笅闈㈢殑綆楁硶鏄劇ず浜嗗浣曡綆椾竴涓杈瑰艦鏄惁鍖呭惈鍦?#8220;鍙騫蟲埅浣?#8221;鐨勫唴閮ㄣ傚湪榪欎釜綆楁硶涓垜浠嬌鐢ㄤ簡涓涓嚱鏁癈LASSIFY-POINT錛屽畠浣跨敤涓涓壀鍒囬潰鍜屼竴涓偣浣滀負杈撳叆鍙傛暟銆?br>l 鍑芥暟INSIDE-FRUSTUM<br>l 鍙傛暟:<br>l Frustum – 鐢ㄤ簬媯嫻嬪杈瑰艦鏄惁浣嶄簬鍏朵腑鐨?#8220;鍙騫蟲埅浣?#8221;銆?br>l Polygon – 鐢ㄤ簬媯嫻嬬殑澶氳竟褰€?br>l 榪斿洖鍊?<br>l 澶氳竟褰㈡槸鍚︿綅浜?#8220;鍙騫蟲埅浣?#8221;鐨勫唴閮ㄣ?br>l 鍔熻兘:<br>l 浣跨敤“鍙騫蟲埅浣?#8221;鐨勬瘡涓涓壀鍒囬潰鏉ュ澶氳竟褰㈢殑姣忎竴涓《鐐硅繘琛屾嫻嬶紝濡傛灉鎵鏈夌殑欏剁偣閮戒綅浜庢墍鏈夊壀鍒囬潰鐨?#8220;姝i潰”錛岄偅涔堝杈瑰艦澶勪簬“鍙騫蟲埅浣?#8221;鐨勫唴閮ㄣ?</p> <p>INSIDE-FRUSTUM (Frustum, Polygon)<br>1 for each point Pt in Polygon<br>2 Inside = true<br>3 for each plane Pl in Frustum<br>4 if (CLASSIFY-POINT (Pl, Pt) <> INFRONT)<br>5 Inside f false<br>6 if (Inside)<br>7 return true<br>8 return false<br>鍦ㄤ竴涓猵ortal寮曟搸涓畠鐨勪富娓叉煋鍑芥暟鍙互綆鍗曠殑鐢ㄤ笅闈㈢殑鏂規硶鏉ュ疄鐜般?br>鍑芥暟RENDER-PORTAL-ENGINE<br>鍙傛暟:<br>Sector – 瑙傚療鑰呮墍澶勭殑sector銆?br>ViewFrustum – 褰撳墠鐨?#8220;鍙騫蟲埅浣?#8221;銆?br>榪斿洖鍊?<br>None<br>鍔熻兘:<br>娓叉煋portal寮曟搸涓殑澶氳竟褰紝鍦烘櫙琚弿榪頒負鐢卞涓猵ortal榪炴帴鐨剆ectors鎵緇勬垚銆?br>RENDER-PORTAL-ENGINE (Sector, ViewFrustum)<br>1 for each polygon P1 in Sector<br>2 if (P1鏄竴涓猵ortal and INSIDE-FRUSTUM (ViewFrustum, P1))<br>3 NewFrustum = CLIP-FRUSTUM (ViewFrustum, P1)<br>4 NewSector = 鑾峰緱鐢卞綋鍓峴ector閫氳繃portal P1鐩歌繛鎺ョ殑sector<br>5 RENDER-PORTAL-ENGINE (NewSector, NewFrustum)<br>6 else if (P1浠葷劧娌℃湁琚覆鏌?<br>7 draw P1<br>8 return<br>濡備綍鏀劇疆portal<br>姝e鎴戝墠闈㈡彁鍒扮殑鍦ㄤ竴涓猵ortal寮曟搸涓渶澶х殑闂灝辨槸濡備綍鏀劇疆portal錛屽鏋滄墜宸ユ潵鏀劇疆瀹冪殑璇濋潪甯歌姳璐規椂闂達紝鍚屾椂瑕佹眰鍦板浘鐨勮璁¤呮湁鐔熺粌鐨勬妧宸с傚洜姝や竴涓壇濂界殑鑷姩鏀劇疆portal鐨勭畻娉曢潪甯告湁蹇呰錛屽湪榪欓噷鎴戝皢瑕佷粙緇嶄竴涓嬪叧浜庤繖鏂歸潰鐨勫嚑涓В鍐蟲柟妗堬紝榪欎簺鏂規閮戒嬌鐢ㄤ簡BSP銆?br>鎴戜粙緇嶇殑絎竴涓В鍐蟲柟妗堟槸鐢辯憺鍏窪ICE鍏徃鐨凙ndreas Brinck鎻愬嚭鐨勶紝瀹冪殑鍘熺悊闈炲父綆鍗曪紝瑙傚療涓涓嬩竴涓畬鏁寸殑BSP灞傛鏍戯紝鍙互鍙戠幇榪欐牱涓涓幇璞★紝瀵逛簬姣忎竴涓猵ortal鏉ヨ瀹冨繀瀹氫笌BSP灞傛鏍戜腑鐢卞垎鍓插杈瑰艦瀹氫箟鐨勫垎鍓查潰浣嶇疆鐩稿悓錛屽洜姝ゅ湪鐩稿悓鐨勪綅緗笂鎴戜滑鍙互鍦ㄥ垎鍓查潰涔嬪寤虹珛涓涓猵ortal澶氳竟褰紝portal澶氳竟褰㈣鍒濆鍖栦負涓涓煩褰紝榪欎釜鐭╁艦鐨勫ぇ灝忓皢瓚呰繃portal鎵澶勭殑BSP鑺傜偣鐨?#8220;鏈澶у寘鍥寸洅”鐨勫ぇ灝忥紝鎺ョ潃灝唒ortal澶氳竟褰㈡斁鍏ュ寘鍚畠鐨勮妭鐐規墍浣嶄簬鐨勫瓙鏍戜腑錛屽綋鑺傜偣涓嶆槸鍙惰妭鐐規椂錛岄偅涔坧ortal灝嗙戶緇浼犻佸埌鑺傜偣鐨勫瓙鏍戜腑錛岃繖鏍峰瓙鑺傜偣涓殑鍒嗗壊闈㈠皢瀵瑰畠榪涜鍒嗗壊錛岃屽綋鍖呭惈瀹冪殑鑺傜偣涓哄彾鑺傜偣鏃訛紝瀹冧篃浼氳鑺傜偣涓殑澶氳竟褰㈣繘琛屽壀鍒囷紝鍥犱負portal鍒濆鍖栫殑澶у皬瓚呰繃浜嗚妭鐐圭殑鑼冨洿銆傚綋portal琚垎鍓插悗錛岃鍒嗗壊鐨勪袱涓儴鍒嗕細緇х畫浼犻佸埌鏈欏跺眰鐨勮妭鐐歸噸澶嶈繖涓繃紼嬶紝鑰屽綋portal涓嶉渶瑕佽繘琛屽垎鍓叉椂錛屾牴鎹畠鎵澶勪簬鍒嗗壊闈㈢殑浣嶇疆鏉ユ斁緗埌鐩稿簲鐨勫瓙鑺傜偣涓紝濡傛灉浣嶄簬鍒嗗壊闈㈢殑“姝i潰”瀹冨皢琚斁緗湪鍙沖瓙鏍戜腑錛岃屽綋瀹冧綅浜庡垎鍓查潰鐨?#8220;鍙嶉潰”灝嗚鏀劇疆浜庡乏瀛愭爲涓傚鏋減ortal姝eソ浣嶄簬鍒嗗壊闈箣涓婂畠灝嗗悓鏃舵斁鍦ㄥ乏鍙沖瓙鏍戜腑銆?br>涓轟簡鏂逛究鏂逛究灝嗘墍鏈夌殑portal鏀劇疆鍒癇SP涓垜浠渶瑕佸畾涔夊浣曞涓涓杈瑰艦榪涜鍒嗗壊錛屼負浜嗘柟渚夸嬌鐢ㄦ垜浠亣璁懼畬鎴愯繖涓姛鑳界殑鍑芥暟涓篒NTERSECTION-POINT錛屽畠灝嗚繑鍥炰竴涓潰涓庝竴涓嚎孌電殑浜ょ偣銆?br>l 鍑芥暟CLIP-POLYGON<br>l 鍙傛暟:<br>l Clipper – 鍘誨垎鍓插叾瀹冨杈瑰艦鐨勫杈瑰艦鎴栭潰銆?br>l Polygon – 琚垎鍓茬殑澶氳竟褰€?br>l 榪斿洖鍊?<br>l 琚垎鍓插悗鐨勪袱涓儴鍒嗐?br>l 鍔熻兘:<br>l 鐢辨寚瀹氱殑鍒嗗壊闈㈡潵鍒嗗壊澶氳竟褰€傚鏋滃杈瑰艦娌℃湁琚垎鍓插皢浼氳繑鍥炰竴涓┖鐨勫杈瑰艦銆?br>CLIP-POLYGON (Clipper, Polygon)<br>1 RightPart = {}<br>2 LeftPart = {}<br>3 for each point edge E in Polygon<br>4 Side1 = CLASSIFY-POINT (Clipper, E.Point1)<br>5 Side2 = CLASSIFY-POINT (Clipper, E.Point2)<br>6 if (Side1 <> Side2 and<br>Side1 <> COINCIDING and<br>Side2 <> COINCIDING)<br>7 Ip = INTERSECTION-POINT (Clipper, E)<br>8 if (Side1 = INFRONT)<br>9 RightPart = RightPart U E.Point1<br>10 RightPart = RightPart U Ip<br>11 LeftPart = LeftPart U Ip<br>12 LeftPart = LeftPart U E.Point2<br>13 if (Side1 = BEHIND)<br>14 LeftPart = LeftPart U E.Point1<br>15 LeftPart = LeftPart U Ip<br>16 RightPart = RightPart U Ip<br>17 RightPart = RightPart U E.Point2<br>18 else<br>19 if (Side1 = INFRONT or Side2 = INFRONT or<br>Side1 = COINCIDING and Side2 = COINCIDING)<br>20 RightPart = RightPart U E.Point1<br>21 RightPart = RightPart U E.Point2<br>22 if (Side1 = BEHIND or Side2 = BEHIND)<br>23 LeftPart = LeftPart U E.Point1<br>24 LeftPart = LeftPart U E.Point2<br>25 return (RightPart, LeftPart)<br>鐜板湪鎴戜滑鍙互瀹氫箟濡備綍鍦ㄤ竴涓狟SP灞傛鏍戜腑瀵筽ortal榪涜鍒嗛厤浜嗭紝鍦ㄧ畻娉曚腑portal琚垵濮嬪寲涓轟竴涓ぇ浜嶣SP鏍硅妭鐐?#8220;鏈澶у寘鍥寸洅”鐨勫杈瑰艦銆?br>l 鍑芥暟PLACE-PORTALS<br>l 鍙傛暟:<br>l PortalPolygon – 鏀劇疆鍒癇SP涓殑澶氳竟褰€?br>l Node – 鎴戜滑褰撳墠閬嶅巻鐨勮妭鐐廣?br>l 榪斿洖鍊?<br>l None<br>l 鍔熻兘:<br>l 鏀劇疆涓涓猵ortal澶氳竟褰㈠埌BSP灞傛鏍戜腑錛屽鏋滈渶瑕佺殑璇濆瀹冭繘琛屽壀鍒囥傝繖涓嚱鏁板皢浼氫駭鐢熶竴涓妭鐐瑰皢鐢眕ortal榪炴帴鑰屾瘡涓涓妭鐐瑰皢鍖呭惈涓涓猵ortal澶氳竟褰㈠垪琛ㄧ殑BSP灞傛鏍戙?br>PLACE-PORTALS (PortalPolygon, Node)<br>1 if (IS-LEAF (Node))</p> <p>l 灝唒ortal鍜岃妭鐐逛腑鐨勬瘡涓涓杈瑰艦榪涜媯嫻嬨傚綋portal鎵鍖呭惈鐨勫杈瑰艦鍜岀敱涓涓杈瑰艦瀹氫箟鐨勯潰鐩鎬氦鏃跺畠灝嗚榪欎釜闈㈣繘琛屽垎鍓詫紝鍒嗗壊鍚庣殑涓や釜閮ㄥ垎灝嗚閲嶆柊浼犻佸埌鏈欏跺眰鐨勮妭鐐逛腑緇х畫榪涜媯嫻嬨?br>2 for (each polygon P2 in Node)<br>3 IsClipped = false<br>4 if (CALCULATE-SIDE (P2, PortalPolygon) = SPANNING)<br>5 IsClipped = true<br>6 (RightPart, LeftPart) = CLIP-POLYGON (P2, PortalPolygon)<br>7 PLACE-PORTALS (RightPart, RootNode)<br>8 PLACE-PORTALS (LeftPart, RootNode)<br>9 if (not IsClipped)<br>10 浠庡綋鍓嶈妭鐐逛腑灝唒ortal鐨勫杈瑰艦鍓旈櫎錛屽洜涓哄畠鐨勪綅緗拰鑺傜偣涓竴涓杈瑰艦鐨勪綅緗浉鍚屻?br>l 鍙傝冧笅闈㈢殑鎻忚堪銆?br>11 娣誨姞褰撳墠鑺傜偣鍒皃ortal澶氳竟褰㈡墍榪炴帴鐨勮妭鐐歸泦鍚堜腑銆?br>12 else<br>13 if (褰撳墠鑺傜偣鐨勫垎鍓插杈瑰艦娌℃湁鏀劇疆鍦ㄦ爲涓?<br>14 寤虹珛涓涓杈瑰艦P錛屽畠鐨勫ぇ灝忓皢瓚呰繃鍖呭惈褰撳墠鑺傜偣鎵鏈夊杈瑰艦鐨勬渶澶у寘鍥寸洅鐨勮寖鍥達紝騫朵笖鍜屽垎鍓插杈瑰艦鐨勪綅緗浉鍚屻?br>15 PLACE-PORTALS (P, Node.LeftChild)<br>16 PLACE-PORTALS (P, Node.RightChild)<br>17 Side = CALCULATE-SIDE (Node.Divider, PortalPolygon)<br>18 if (Side = POSITIVE)<br>19 (RightPart, LeftPart) = CLIP-POLYGON(P2, PortalPolygon)<br>20 PLACE-PORTALS (RightPart, RootNode)<br>21 PLACE-PORTALS (LeftPart, RootNode)<br>22 if (Side = POSITIVE or COINCIDING)<br>23 PLACE-PORTALS (PortalPolygon, Node.RightChild)<br>24 if (Side = NEGATIVE or COINCIDING)<br>25 PLACE-PORTALS (PortalPolygon, Node.LeftChild)<br>涓嬮潰鎴戝皢瀵圭畻娉曚腑鐨勭10琛岃繘琛屼竴涓嬭В閲婏紝褰撳墧闄ゅ拰褰撳墠鑺傜偣涓竴涓杈瑰艦浣嶇疆鐩稿悓鐨刾ortal澶氳竟褰㈤儴鍒嗗皢浼氫駭鐢熶粈涔堟牱鐨勭粨鏋溿傚弬鑰冧竴涓嬪浘6.12銆?/p> <p>鍥?.12<br>鍦ㄥ浘6.12涓竴涓猵ortal宸茬粡鍒拌揪浜嗕竴涓彾鑺傜偣錛屽浘涓伆鑹茬殑鍖哄煙鏄槸portal澶氳竟褰㈠湪閬嶅巻BSP鏍戣繃紼嬩腑琚墧闄ょ殑鍖哄煙縐板畠涓?銆傝屽浘涓爣娉ㄤ負2銆?銆?鐨勪寒鐏拌壊閮ㄥ垎鏄拰portal澶氳竟褰綅緗浉閲嶅彔鐨勫杈瑰艦錛屽洜姝よ繖涓閮ㄥ垎鐨刾ortal澶氳竟褰篃灝嗕細琚墧闄わ紝鑰屽墿涓嬬殑閮ㄥ垎5灝嗚鐢ㄦ潵鍋氫負涓涓猵ortal銆?br>鍦ㄤ笂闈㈢殑綆楁硶絎竴嬈$湅鐨勮瘽浼氳鐨勯潪甯稿鏉傦紝浣嗗疄闄呬笂瀹冮潪甯哥畝鍗曞拰瀹規槗鐞嗚В錛屾渶緇堢殑緇撴灉灝辨槸姣忎竴涓猵ortal灝嗕細鍦ㄤ袱涓妭鐐逛笂緇撴潫鑰屽浜庝換涓涓猵ortal鏉ヨ瀹冨繀瀹氬彲浠ュ拰涓涓猵ortal涔嬮棿鐩鎬簰鍙銆傚湪涓嬮潰鎴戝皢鐢ㄤ竴涓疄闄呯殑渚嬪瓙鏉ヨВ閲婁竴涓嬭繖涓畻娉曘?/p> <p>鍥?.13<br>瀵逛簬鍥?.13涓殑緇撴瀯錛岄渶瑕佽繘琛屼笅闈㈢殑鍑犳錛?br>絎竴姝ワ紝portal澶氳竟褰1榪涘叆鑺傜偣n1涓?/p> <p>    鍦ㄨ妭鐐筺1涓璸ortal澶氳竟褰1灝嗕細琚垎鍓詫紝鍥犱負瀹冪殑涓閮ㄥ垎鍜岃妭鐐逛腑闂寸殑涓涓杈瑰艦浣嶇疆鐩稿悓錛屽洜姝ortal澶氳竟褰1灝嗕細琚垎鍓蹭負涓ら儴鍒嗗垎鍒負p1銆乸2錛岄噸鍙犵殑閮ㄥ垎琚墧闄ゃ?br>絎簩姝ワ紝p1銆乸2榪涘叆鑺傜偣s2涓?br>鍦ㄨ妭鐐箂2涓敱浜巔1浣嶄簬鍒嗗壊闈2鐨?#8220;姝i潰”錛屽洜姝ゅ皢鍜屽垎鍓查潰s2涓璧瘋閫佸叆鍒拌妭鐐筺2涓紝鑰宲2鐢變簬浣嶄簬鍒嗗壊闈2鐨?#8220;鍙嶉潰”錛屽洜姝ゅ皢鍜屽垎鍓查潰s2涓璧瘋閫佸叆鍒拌妭鐐箂3涓傜敱浜巔1銆乸2娌℃湁鍜屽垎鍓查潰鐩鎬氦鍥犳榪欎竴姝ユ病鏈夊嚭鐜板垎鍓叉搷浣溿?br>絎笁姝ワ紝p1銆乻2榪涘叆鑺傜偣n2涓?/p> <p>鍦ㄨ妭鐐筺2涓璶2琚鍙綔涓轟竴涓猵ortal錛屽洜姝ゅ湪鑺傜偣n1鍜宯2涓畠涓嶄細鍐嶅彂鐢熶換浣曞彉鍖栥傝屽杈瑰艦p3鐨勪竴閮ㄥ垎灝嗕細琚墧闄わ紝鍥犱負瀹冪殑涓閮ㄥ垎鍜岃妭鐐逛腑闂寸殑涓涓杈瑰艦浣嶇疆鐩稿悓錛屽湪涓婁竴姝ヤ腑澶氳竟褰2涔熻閫佸叆鍒拌妭鐐箂3涓紝鑰屽湪榪欓噷瀹冨張琚О涓簆3銆?/p> <p>絎洓姝ワ紝p3鍜宻3榪涘叆鑺傜偣n3涓?/p> <p>鍦ㄨ妭鐐筺3涓杈瑰艦p3琚鍙負涓涓猵ortal錛岃屽杈瑰艦s3鐨勪竴閮ㄥ垎鍥犱負鍜屼笂闈㈢殑鍘熷洜涓鏍瘋鍓旈櫎錛屽悓鏃跺湪榪欓噷瀹冨張琚О涓簆4銆?/p> <p><br>絎簲姝ワ紝p2鍜宲4榪涘叆鑺傜偣s4涓?br>娌℃湁浠諱綍澶氳竟褰㈣榪涜鍒嗗壊錛屽洜姝ゅ杈瑰艦p2鍜宲4灝嗕笌s4涓璧瘋閫佸叆鑺傜偣n4涓紝鑰宻4灝嗚鍗曠嫭閫佸叆鑺傜偣n5涓?br>絎叚姝ワ紝p2銆乸4鍜宻4涓璧瘋繘鍏ヨ妭鐐筺4涓?/p> <p>鏃犺鏄痯2榪樻槸p4閮戒笉闇瑕佸垎鍓詫紝浣嗘槸鐢變簬s4鍜屼腑闂寸殑涓涓杈瑰艦瀹屽叏閲嶅彔鍥犳灝嗕細琚墧闄ゃ?/p> <p><br>絎竷姝ワ紝緇撴潫錛屾病鏈変換浣曞杈瑰艦榪涘叆鑺傜偣n5涓?br>榪欎釜鑺傜偣灝嗘病鏈塸ortal錛屽洜涓哄浜庝換浣曡妭鐐規潵璇村畠閮芥槸涓嶅彲瑙佺殑錛岃屼粠榪欎釜鑺傜偣浣嶇疆涓婂皢涓嶄細鐪嬭浠諱綍涓涓妭鐐廣?br>緇撴灉錛?br>portal p1鍚屾椂浣嶄簬鑺傜偣n1鍜宯2涓紱<br>portal p2鍚屾椂浣嶄簬鑺傜偣n1鍜宯4涓紱<br>portal p1鍚屾椂浣嶄簬鑺傜偣n2鍜宯3涓紱<br>portal p1鍚屾椂浣嶄簬鑺傜偣n3鍜宯4涓?/p> <p>涓婇潰鎴戞墍璁茶В鐨勫唴瀹規槸寤虹珛涓涓畝鍗曠殑portal寮曟搸鎵蹇呭鐨勫姛鑳斤紝瀹冭兘緇欐垜浠彁渚涗竴涓緝楂樼殑榪愯甯ч熴?br>PVS<br>    涓涓猵ortal寮曟搸铏界劧鑳藉鎻愪緵璁稿闈炲父濂界殑鐗規э紝浣嗘槸瀹冪殑緇撴瀯澶鏉傘傚綋浣犱嬌鐢╬ortal鎶鏈潵鏋勫緩涓涓父鎴忓紩鎿庢椂浣犱細鍙戠幇瀹冨瓨鍦ㄨ澶氶棶棰橈紝鏈澶х殑涓涓棶棰樻槸鍦ㄦ覆鏌撳満鏅殑姣忎竴甯ч兘闇瑕佽繘琛屽彲瑙嗘ф嫻嬶紝榪欎細浜х敓澶ч噺鐨勫杈瑰艦鍓垏鎿嶄綔錛屽湪鍦烘櫙闈炲父澶嶆潅鐨勬儏鍐典笅錛岃繍綆楃殑璐圭敤浼氶潪甯哥殑楂橈紝鍥犳闇瑕佸鎵句竴縐嶆妧鏈潵瀵瑰満鏅腑鍙鎬ф嫻嬭繘琛岄璁$畻鑰屼笉鏄湪榪愯鏈熼棿榪涜璁$畻銆侾VS錛圥otentially Visible Set錛夊彲瑙嗘ч泦鍚堬紝灝辨槸涓轟簡瑙e喅榪欎釜闂鑰屽嚭鐜扮殑涓欏規妧鏈紝鍙互閫氳繃瀵笲SP涓瘡涓涓彾鑺傜偣璁劇疆涓涓狿VS錛岃繖涓狿VS淇濆瓨浜嗕粠絎竴涓彾鑺傜偣寮濮嬬湅鍒扮殑鍙惰妭鐐歸泦鍚堬紝瀹冧笉浠呭彲浠ョ敤鏉ュ府鍔╁姞閫熷満鏅覆鏌擄紝榪樺彲浠ョ敤鏉ュ姞閫熷満鏅腑鍏夌収榪愮畻鍜岃繘琛岀綉緇滀紭鍖栥?br>PVS鏄湪鍦烘櫙榪涜棰勬覆鏌撴椂璁$畻鍑烘潵鐨勶紝姣忎竴涓狟SP鐨勫彾鑺傜偣閮戒繚瀛樹竴涓彲瑙嗚妭鐐圭殑闆嗗悎錛屽綋瀵瑰満鏅繘琛屾覆鏌撴椂錛屾憚璞℃満鎵鍦ㄧ殑鍙惰妭鐐瑰皢琚覆鏌擄紝鍚屾椂淇濇寔鍦≒VS涓殑鍙惰妭鐐逛篃灝嗕細琚覆鏌撳嚭鏉ワ紝榪欓噷闇瑕佷竴浜涚畻娉曟潵閬垮厤鍦烘櫙閲嶅娓叉煋錛岀敱浜庝粖澶╃‖浠跺姞閫熷崱鐨勫彂灞曪紝瀹冩墍鎻愪緵鐨勭‖浠禯緙撳啿鐨勫ぇ灝忓凡緇忓彲浠ユ柟渚跨殑瑙e喅榪欎釜闂銆?br>璁$畻PVS<br>濡傛灉瑕佹眰PVS蹇呴』鍦˙SP鐨勫彾鑺傜偣涔嬮棿榪涜鏍囧噯鐨勫厜綰胯窡韙綆楋紝鏉ユ煡鎵句竴涓嬪湪涓涓彾鑺傜偣涓換涓涓偣鏄惁鍦ㄥ叾瀹冨彾鑺傜偣涓彲瑙併備負浜嗗姞閫熷厜綰胯窡韙殑璁$畻錛屽湪姣忎竴涓彾鑺傜偣涓繀欏繪寚鍑轟竴浜涘吀鍨嬬殑浣嶇疆鐐規潵閬垮厤鏃犺皳鐨勮綆楋紝鐜板湪鐨勯棶棰樺氨鏄浣曟斁緗繖浜涘吀鍨嬬殑鐐廣?br>瀵逛簬涓涓猵ortal寮曟搸鐨刾ortal鏉ヨ錛屽吀鍨嬬偣鍙互娌跨潃鏍戠殑鍒嗗壊闈㈡斁緗紝榪欐槸鍥犱負鍙湁鍦ㄤ袱涓猵ortal鏄浉浜掑紑鏀劇殑鎯呭喌涓嬫墠鍙互榪涜鍙鍖栨嫻嬨傚鏋滀綅浜庝竴涓彾鑺傜偣涓棿鐨勪竴涓偣琚粠鍙︿竴涓彾鑺傜偣鍙戝皠鍑烘潵鐨勫厜綰胯涓烘槸鍙鐨勮瘽錛岄偅涔堣繖鏉″厜綰垮繀鐒墮氳繃榪炴帴涓や釜鑺傜偣鐨刾ortal錛屽弬鑰冧笅鍥撅細</p> <p>鍥?.14<br>鍦ㄥ浘6.14涓垜浠彲浠ョ湅瑙佸鏋滃湪涓涓妭鐐逛腑鐨勪竴涓偣鍙互浠庡叾瀹冭妭鐐圭湅瑙侊紝閭d箞瑙嗙嚎蹇呯劧閫氳繃涓や釜鑺傜偣鐩鎬簰榪為氱殑鍖哄煙銆傝繖鏄潪甯告槑鏄劇殑錛屽鏋滆綰胯鐗╀綋闃繪柇鐨勮瘽閭d箞涓ょ偣涔嬮棿蹇呭畾涓嶅彲瑙併傚洜姝ゅ皢鍏稿瀷鐐規斁緗湪涓や釜鑺傜偣涔嬮棿鎵寮鏀劇殑鍖哄煙鏄潪甯稿悎閫傜殑錛屼笅闈㈡弿榪扮殑綆楁硶灝嗗湪涓涓狟SP鏍戜笂鏀劇疆鍏稿瀷鐐廣傚浜庤繖涓嚱鏁伴渶瑕佷竴緇勫府鍔╁嚱鏁版潵鎶婄偣鏀劇疆鍦ㄤ竴涓妭鐐逛笂錛屽畠浠槸<br>l DISTRIBUTE-POINTS (Node) 榪欎釜鍑芥暟灝嗘寜鐓т竴瀹氱殑闂撮殧娌跨潃緇欏畾鑺傜偣鐨勫垎鍓查潰鏉ユ斁緗偣錛岀偣鐨勪綅緗細澶勪簬鑺傜偣鍖呭洿鐩掔殑鍐呴儴銆傚畠灝嗚繑鍥炰竴涓偣鐨勯泦鍚堬紝澶嶆潅搴︿負O(xy)錛岃繖閲寈涓鴻妭鐐瑰寘鍥寸洅鍐呭垎鍓查潰鐨勫搴︼紝鑰寉涓洪珮搴︺?br>l CLEANUP-POINTS (Node, PointSet) 浠庣偣鐨勯泦鍚堜腑鍓旈櫎涓嶅悎鏍肩殑鐐癸紝榪欎簺鐐瑰彲鑳藉拰鑺傜偣涓殑涓涓杈瑰艦浣嶇疆鐩稿悓錛屼篃鍙兘鏄綅浜庤妭鐐瑰寘鍥寸洅鐨勫閮ㄣ傚嚱鏁扮殑澶嶆潅搴︿負O(np)錛岃繖閲宯涓鴻妭鐐逛腑澶氳竟褰㈢殑鏁伴噺鑰宲涓洪泦鍚堜腑鐐圭殑鏁伴噺銆?br>l 鍑芥暟 DISTRIBUTE-SAMPLE-POINTS<br>l 鍙傛暟:<br>l Node – 褰撳墠鎴戜滑閬嶅巻鐨勮妭鐐廣?br>l PointSet – 鏀劇疆鍒扮粰瀹氳妭鐐瑰瓙鏍戜腑鐨勭偣鐨勯泦鍚堛?br>l 榪斿洖鍊?<br>l None<br>l 鍔熻兘錛?br>l 娌跨潃緇欏畾鑺傜偣鐨勫垎鍓查潰鏀劇疆鐐廣傚畠灝嗘寜鐓у垎鍓查潰鐨勪綅緗潵瀵硅緭鍏ョ殑鐐硅繘琛屾嫻嬶紝濡傛灉榪欎簺鐐瑰拰鑺傜偣涓殑涓涓杈瑰艦浣嶇疆鐩稿悓錛屾垨鑰呬綅浜庤妭鐐瑰寘鍥寸洅鐨勫閮ㄩ偅涔堝皢浼氳鍓旈櫎銆傛柊浜х敓鐨勭偣灝嗕細琚坊鍔犲埌宸︺佸彸涓や釜闆嗗悎涓紝褰撲竴涓偣鐨勯泦鍚堥亶鍘嗗埌涓涓彾鑺傜偣鏃墮偅涔堝畠灝辨槸榪欎釜鍙惰妭鐐圭殑鍏稿瀷鐐廣?br>DISTRIBUTE-SAMPLE-POINTS (Node, PointSet)<br>1 CLEANUP-POINTS (Node, PointSet)<br>2 if (IS-LEAF (Node))<br>3 璁劇疆鐐圭殑闆嗗悎涓哄綋鍓嶈妭鐐圭殑鍏稿瀷鐐廣?br>4 else<br>5 RightPart = NewPoints<br>6 NewPoints = DISTRIBUTE-POINTS (Node)<br>7 RightPart = NewPoints<br>8 LeftPart = NewPoints<br>9 for each point P in PointSet<br>10 Side = CLASSIFY-POINT (Node.Divider, P)<br>11 if (Side = COINCIDING)<br>12 RightPart = RightPart U P<br>13 LeftPart = LeftPart U P<br>14 if (Side = INFRONT)<br>15 RightPart = RightPart U P<br>16 if (Side = BEHIND)<br>17 LeftPart = LeftPart U P<br>18 DISTRIBUTE-SAMPLE-POINTS (Node.LeftChild, LeftPart)<br>19 DISTRIBUTE-SAMPLE-POINTS (Node.RightChild, RightPart)<br>綆楁硶鍒嗘瀽<br>    姣忎竴嬈¤皟鐢ㄨ繖涓嚱鏁扮殑澶嶆潅搴︿負O(np + xy)錛堝弬鑰冨嚱鏁癈LEANUP-POINTS鍜?br>DISTRIBUTE-POINTS錛夛紝涓轟簡璁$畻瀹屾暣鐨勫鏉傚害鎴戜滑鍙互鐢ㄤ笅闈㈢殑鍏紡鏉ヨ〃紺猴紙鎴戜滑鍋囪鍏稿瀷鐐圭殑闆嗗悎鍚屾椂鍒嗗竷鍦ㄤ袱涓泦鍚堜箣涓級錛?br>T(n) = 2T(n/2) + O(np + xy)<br>榪欎釜鍑芥暟絎竴嬈¤皟鐢ㄦ椂灝嗕細浠嶣SP鏍戠殑鏍硅妭鐐瑰紑濮嬪茍浼氫紶鍏ヤ竴涓┖鐨勯泦鍚堛傛崲鍙ヨ瘽璇村畠鏄寜鐓т笅闈㈢殑鏂規硶榪涜鐨勶紝瀹冩槸浠庤BSP鏍戞牴鑺傜偣鎵瀹氫箟鐨勫垎鍓查潰涓婄殑鐐瑰紑濮嬬殑錛岀敱浜庝竴涓潰鐨勫ぇ灝忔病鏈夐檺鍒跺洜姝や篃浼氭湁鏃犻檺涓吀鍨嬬偣錛屽洜姝ゅ氨闇瑕佸鍏稿瀷鐐硅繘琛岄檺鍒訛紝榪欎釜鐜板湪灝辨槸鏍硅妭鐐圭殑鍖呭洿鐩掋?br>鍦ㄦ牴鑺傜偣涓婅幏寰楀悎鏍肩殑鍏稿瀷鐐瑰悗闇瑕佹妸鎵鏈夌殑鐐瑰彂閫佸埌鏍硅妭鐐圭殑涓や釜瀛愭爲涓紝褰撲竴涓吀鍨嬬偣鐨勯泦鍚堣繘鍏ヤ竴涓妭鐐瑰悗浼氳鍒嗗壊涓轟袱涓儴鍒嗭紝涓涓儴鍒嗗寘鍚簡鎵鏈変綅浜庤妭鐐瑰垎鍓查潰鐨?#8220;姝i潰”鐨勭偣錛岃屽彟涓閮ㄥ垎鍖呭惈浜嗘墍鏈変綅浜庤妭鐐瑰垎鍓查潰鐨?#8220;鍙嶉潰”鐨勭偣銆傝屼綅浜庡垎鍓查潰涓婄殑鐐瑰皢浼氬悓鏃舵斁鍦ㄤ袱涓泦鍚堜腑銆傛帴鐫“姝i潰”闆嗗悎灝嗕細琚紶鍏ュ埌鍙沖瓙鏍戜腑鑰?#8220;鍙嶉潰”闆嗗悎灝嗕細琚紶鍏ュ埌宸﹀瓙鏍戜腑銆傞噸澶嶈繖涓繃紼嬬洿鍒拌繘琛屽埌鍙惰妭鐐規椂緇撴潫錛屽湪榪欎簺鎿嶄綔鍚庢瘡涓涓彾鑺傜偣灝嗗寘鍚竴涓吀鍨嬬偣鐨勯泦鍚堬紝榪欎簺鐐歸兘浣嶄簬鑺傜偣鎵榪為氱殑鍦版柟銆?br>濡傛灉鎴戜滑鐜板湪鍦ㄨ繖涓樁孌靛姣忎竴涓妭鐐硅繘琛屽厜綰胯窡韙偅涔堟槸闈炲父鑰楄垂鏃墮棿鐨勶紝浣嗘槸濡傛灉鎴戜滑鐭ラ亾鍙惰妭鐐規槸涓庡摢涓涓妭鐐圭浉榪炵殑錛岄偅涔堣繖涓繃紼嬪皢浼氬彉鐨勭畝鍗曪紝鍥犱負榪欐牱鍙互鍑忓皯涓浜涗笉蹇呰鐨勫厜綰胯窡韙繍綆椼傛煡鎵劇浉浜掕繛鎺ョ殑鍙惰妭鐐歸潪甯哥畝鍗曪紝鍙互閫氳繃媯嫻嬫瘡涓涓彾鑺傜偣鐨勫吀鍨嬬偣鏉ユ煡鎵撅紝濡傛灉鍚屾椂鏈変袱涓妭鐐瑰叡浜竴涓偣閭d箞榪欎袱涓妭鐐瑰繀鐒舵槸鐩鎬簰榪為氱殑錛屽洜涓哄湪閬嶅巻BSP鏍戞斁緗吀鍨嬬偣鐨勮繃紼嬩腑錛岀偣涓嶆槸娌℃湁鏀劇疆鍒拌妭鐐逛笂灝辨槸鍚屾椂鏀劇疆鍦ㄤ袱涓妭鐐逛笂銆傚綋鎴戜滑鐭ラ亾鍝簺鑺傜偣鏄浉浜掕繛閫氱殑錛屽氨鍙互瀹氫箟榪涜鍏夌嚎璺熻釜鐨勭畻娉曚簡錛屼笉榪囬鍏堟垜浠渶瑕佸畾涔変竴浜涘府鍔╁嚱鏁般?br>涓轟簡鏂逛究榪涜鍏夌嚎璺熻釜鎴戜滑闇瑕佷竴浜涘熀鏈殑鍏夌嚎璺熻釜鍑芥暟錛孊SP鏍戞槸闈炲父閫傚悎榪涜鍏夌嚎璺熻釜鐨勭粨鏋勶紝鍥犱負澶ч儴鍒嗕笉鍙鐨勫尯鍩熼氳繃BSP鏍戝彲浠ュ緢綆鍗曠殑鍓旈櫎鎺夛紝涓嶇敤榪涜閬嶅巻錛屽洜姝よ姳璐圭殑鏃墮棿涔熼潪甯稿皯銆傛垜浠渶瑕佺殑鍑芥暟濡備笅錛?br>POLYGON-IS-HIT (Polygon, Ray) 榪斿洖鍏夌嚎鏄惁鍜屽杈瑰艦鐩鎬氦銆?br>RAY-INTERSECTS-SOMETHING-IN-TREE (Node, Ray) 榪斿洖鍏夌嚎鏄惁鍜岃妭鐐逛腑鐨勫瓙鏍戠浉浜ゃ?br>INTERSECTS-SPHERE (Sphere, Ray) 榪斿洖鍏夌嚎鏄惁鍜岀悆浣撶浉浜ゃ?br>CREATE-RAY (Point1, Point2) 閫氳繃涓や釜鐐規潵寤虹珛涓鏉″厜綰褲?br>涓婇潰鐨勫嚱鏁癛AY-INTERSECTS-SOMETHING-IN-TREE鏄竴涓潪甯告湁瓚g殑鍑芥暟錛屽洜涓哄畠鏄劇ず浜嗕竴浜汢SP鏍戠殑浼樼偣錛屽悓鏃朵篃鏄劇ず浜嗗浣曚嬌鐢˙SP鏍戞潵鍔犻熷厜綰胯窡韙殑澶勭悊銆傚畠鏄竴涓掑綊鍑芥暟錛岄鍏堝湪鏍戠殑鏍硅妭鐐逛笂浣跨敤錛屼吉綆楁硶濡備笅錛?br>l 鍑芥暟RAY-INTERSECTS-SOMETHING-IN-TREE<br>l 鍙傛暟錛?br>l Node – 鐢ㄦ潵榪涜璺熻釜鐨勮妭鐐廣?br>l Ray – 鐢ㄦ潵榪涜姹備氦鐨勫厜綰褲?br>l 榪斿洖鍊鹼細<br>l 鍏夌嚎鏄惁鍜岃妭鐐逛腑鐨勭墿浣撶浉浜ゃ?br>l 鍔熻兘錛?br>l 媯嫻嬪厜綰挎槸鍚︿笌緇欏畾鑺傜偣鏋佸叾瀛愭爲涓殑鐗╀綋鐩鎬氦銆?br>RAY-INTERSECTS-SOMETHING-IN-TREE (Node, Ray)<br>1 for each polygon P in Node<br>2 POLYGON-IS-HIT (P, Ray)<br>3 startSide = CLASSIFY-POINT (Ray.StartPoint, Node.Divider)<br>4 endSide = CLASSIFY-POINT (Node.EndPoint, Node.Divider)<br>l 濡傛灉鍏夌嚎鍜岃妭鐐圭殑鍒嗗壊闈㈢浉浜ゆ垨鍜屽垎鍓查潰鐨勪綅緗噸鍙狅紝瀵硅妭鐐圭殑涓や釜瀛愯妭鐐硅繘琛屾嫻嬨?br>5 if ((startSide = COINCIDING and endSide = COINCIDING) or<br>startSide <> endSide and startSide <> COINCIDING and<br>endSide <> COINCIDING)<br>6 if (RAY-INTERSECTS-SOMETHING-IN-TREE (Node.LeftChild, Ray))<br>7 return true<br>8 if (RAY-INTERSECTS-SOMETHING-IN-TREE (Node.RightChild, Ray))<br>9 return true<br>l 濡傛灉鍏夌嚎鍙綅浜庡垎鍓查潰鐨?#8220;姝i潰”瀵硅妭鐐圭殑鍙沖瓙鏍戣繘琛屾嫻嬨傚湪if璇彞涓嬌鐢╫r鎿嶄綔絎︽槸鍥犱負鍏夌嚎鐨勪竴涓鐐瑰彲鑳戒笌鍒嗗壊闈㈢殑浣嶇疆閲嶅彔銆?br>10 if (startSide = INFRONT or endSide = INFRONT)<br>11 if(RAY-INTERSECTS-SOMETHING-IN-TREE (Node.RightChild, Ray))<br>12 return true<br>l 濡傛灉鍏夌嚎鍙綅浜庡垎鍓查潰鐨?#8220;鍙嶉潰”瀵硅妭鐐圭殑宸﹀瓙鏍戣繘琛屾嫻嬨傚湪if璇彞涓嬌鐢╫r鎿嶄綔絎︽槸鍥犱負鍏夌嚎鐨勪竴涓鐐瑰彲鑳戒笌鍒嗗壊闈㈢殑浣嶇疆閲嶅彔銆?br>13 if (startSide = BEHIND or endSide = BEHIND)<br>14 if (RAY-INTERSECTS-SOMETHING-IN-TREE (Node.LeftChild, Ray))<br>15 return true<br>l 鍏夌嚎娌℃湁鍜屼換浣曠墿浣撶浉浜わ紝榪斿洖鍒頒笂涓灞傘?br>16 return false<br>綆楁硶鍒嗘瀽<br>鏈鍧忕殑鎯呭喌鏄厜綰塊亶鍘嗕簡BSP鏍戜腑姣忎竴涓妭鐐癸紝榪欐牱鍏夌嚎灝嗕笌鑺傜偣涓瘡涓涓崟鐙殑澶氳竟褰㈣繘琛屾嫻嬶紝榪欐椂鍑芥暟鐨勫鏉傚害灝嗕負O(n)錛岃繖閲宯涓築SP鏍戜腑鎵鏈夊杈瑰艦鐨勬暟閲忋備竴鑸儏鍐典笅鍏夌嚎騫朵笉浼氭嫻嬫爲涓殑姣忎竴涓妭鐐癸紝榪欐牱灝嗕細澶уぇ鍑忓皯榪涜媯嫻嬬殑澶氳竟褰㈡暟閲忋傛渶浣崇殑鎯呭喌鏄厜綰胯闄愬埗鍦ㄤ竴涓妭鐐逛腑錛岃繖鏃跺嚱鏁扮殑澶嶆潅搴︽帴榪戜簬錛?lg n)錛庤繖鍙栧喅浜嶣SP鏍戠殑緇撴瀯澶у皬銆?br>l 鍑芥暟CHECK-VISIBILITY<br>l 鍙傛暟錛?br>l Node1 – 寮濮嬪鐨勮妭鐐廣?br>l Node2 – 緇撴潫澶勭殑鑺傜偣銆?br>l 榪斿洖鍊鹼細<br>l Node2鏄惁鍙互琚玭ode1鐪嬭銆?br>l 鍔熻兘錛?br>l 鍦ㄤ袱涓彾鑺傜偣鐨勫吀鍨嬬偣涔嬮棿榪涜璺熻釜錛屾嫻嬩袱涓妭鐐逛箣闂存槸鍚﹀彲瑙併?br>CHECK-VISIBILITY (Node1, Node2)<br>1 Visible = false<br>2 for each 鍏稿瀷鐐筆1 in Node1<br>3 for each 鍏稿瀷鐐筆2 in Node2<br>4 Ray = CREATE-RAY (P1, P2)<br>5 if(not RAY-INTERSECTS-SOMETHING-IN-TREE(Node1.Tree.RootNode,<br>Ray)<br>6 Visible = true<br>7 return Visible<br>綆楁硶鍒嗘瀽<br>鍑芥暟CHECK-VISIBILITY闈炲父鑰楄垂鏃墮棿錛屽綋鎴戜滑鍦ㄤ袱涓彾鑺傜偣涔嬮棿榪涜鍏夌嚎璺熻釜鏉ユ嫻嬩袱鑰呬箣闂存槸鍚﹀彲瑙佹椂錛屾垜浠笉寰椾笉浠嶯ode1鐨勬瘡涓涓吀鍨嬬偣寮濮嬪Node2鐨勬瘡涓涓吀鍨嬬偣榪涜璺熻釜錛屾渶鍧忕殑鎯呭喌鏄瘡涓嬈¤窡韙兘灝嗗鏍戜腑鎵鏈夌殑澶氳竟褰㈣繘琛屾嫻嬶紝榪欐椂鍑芥暟鐨勫鏉傚害O(s1 s2 p)錛岃繖閲宻1涓篘ode1涓吀鍨嬬偣鐨勬暟閲忥紝s2涓篘ode2涓吀鍨嬬偣鐨勬暟閲忥紝p涓烘爲涓杈瑰艦鐨勬暟閲忋傞氬父瀹冪殑鎬ц兘鏄瘮杈冨ソ鐨勶紝鎺ヨ繎浜嶰(s1 s2 lg p)銆?br>l 鍑芥暟TRACE-VISIBILITY<br>l 鍙傛暟錛?br>l Tree – 鍘昏繘琛屽厜綰胯窡韙殑BSP-tree銆?br>l 榪斿洖鍊鹼細<br>l None<br>l 鍔熻兘錛?br>l 瀵逛簬鏍戜腑姣忎竴涓彾鑺傜偣錛屽畠灝嗚繘琛屽厜綰胯窡韙繍綆楁潵媯嫻嬪拰瀹冪浉榪炵殑鑺傜偣鐨勫彲瑙佹с傛瘡涓涓鍙戠幇鏄彲瑙佺殑鑺傜偣灝嗕細琚坊鍔犲埌褰撳墠鑺傜偣鐨凱VS涓傚綋涓涓彾鑺傜偣鍙戠幇鏄彲瑙佺殑錛屾垜浠繕瑕佸鍜屽畠鐩歌繛鐨勮妭鐐硅繘琛屽厜綰胯窡韙繍綆楁潵媯嫻嬪彲瑙佹с?br>TRACE-VISIBILITY (Tree)<br>1 for (each 鏍戜腑鐨勫彾鑺傜偣L)<br>2 for (each 鍜屽彾鑺傜偣L鐩歌繛鐨勫彾鑺傜偣C)<br>3 娣誨姞鑺傜偣C鍒拌妭鐐筁鐨凱VS涓?br>4 for (each 鏍戜腑鐨勫彾鑺傜偣L1)<br>5 while (鍦ㄥ彾鑺傜偣L鐨凱VS涓瓨鍦ㄤ竴涓彾鑺傜偣L2錛屽畠鎵榪炴帴鐨勮妭鐐規病鏈夎繘琛屽彲瑙佹ф嫻?<br>5 for (each 榪炴帴鍒拌妭鐐筁2涓殑鍙惰妭鐐笴)<br>6 if (鑺傜偣C娌℃湁浣嶄簬鑺傜偣L1鐨凱VS涓?and<br>CHECK-VISIBILITY (L1, C))<br>7 娣誨姞鑺傜偣C鍒拌妭鐐筁1鐨凱VS涓?br>7 娣誨姞鑺傜偣L1鍒拌妭鐐笴鐨凱VS涓?br>綆楁硶鍒嗘瀽<br>濡傛灉鎴戜滑娌℃湁浣跨敤鏍規嵁鍙惰妭鐐圭殑鐩歌繛鎯呭喌鏉ヨ繘琛屽鐞嗙殑浼樺寲鎶鏈紝閭d箞蹇呴』瀵規爲涓殑姣忎竴涓彾鑺傜偣榪涜媯嫻嬶紝榪欐椂鍑芥暟鐨勫鏉傚害涓篛(n2)錛岃繖閲宯涓烘爲涓彾鑺傜偣鐨勬暟閲忋傝瀵逛笂闈㈢殑綆楁硶浼拌涓涓澶勭悊榪囩▼鎻愰珮浜嗗灝戞ц兘鐨勫叿浣撴暟鍊奸潪甯稿洶闅撅紝鍥犱負瀹冧緷璧栦簬鎵澶勭悊鐨勭粨鏋勭殑澶у皬銆傚浜庢瘡涓涓彾鑺傜偣涓庡叾瀹冭妭鐐歸兘鏄彲瑙佺殑緇撴瀯錛岃繖涓畻娉曚笉浼氬仛浠諱綍浼樺寲銆傚浜庢瘡涓涓彾鑺傜偣鍙湁涓鍒頒簩涓彲瑙佺殑鑺傜偣鐨勭粨鏋勶紝榪欎釜綆楁硶灝嗕細浜х敓闈炲父澶т紭鍖栵紝瀹冪殑澶嶆潅搴︽帴榪戜笌O(n)銆?br>鐜板湪鍦ㄤ竴涓璁¤壇濂界殑鍦板浘涓婃墍浜х敓鐨勭粨鏋勫湪姣忎竴甯т笂灝嗕細閬垮厤媯嫻嬪ぇ閲忕殑澶氳竟褰€備竴涓璁¤壇濂界殑鍦板浘鍦ㄥ緩绔嬫椂灝嗕細鑰冭檻鐗╀綋鐨勫彲瑙佹э紝榪欐剰鍛崇潃搴斿敖鍙兘鐨勫湪鍦板浘涓斁鍏ヤ竴浜涜兘闅滅瑙嗙嚎鐨勭墿浣擄紝濡傚澹佺瓑銆傚鏋滃湪鍦板浘涓寘鍚竴涓湁澶ч噺緇嗚妭鐨勫ぇ鎴塊棿錛岄偅涔堝湪涓婇潰鐨勭畻娉曚腑錛堟垨鍦ㄤ竴涓猵ortal寮曟搸涓級榪涜鐨勯殣钘忛潰鍓旈櫎宸ヤ綔瀵瑰畠涓嶄細浜х敓浠諱綍鏁堟灉銆傝繖鏃舵垜浠渶瑕佷嬌鐢ㄥ叾瀹冪被浼間簬LOD榪欐牱鐨勬妧鏈潵榪涜澶氳竟褰㈠墧闄ゃ?/p> <p>闈欐佺墿浣?br>鑰冭檻涓涓嬭繖鏍風殑鍦烘櫙錛屼竴涓悆浣撲綅浜庝竴涓珛鏂逛綋鐨勪腑蹇冿紝濡傛灉鐢˙SP瀵瑰畠榪涜娓叉煋閭d箞灝嗕細浜х敓澶ч噺鐨勮妭鐐癸紝騫朵細浜х敓澶ч噺鐨勫垎鍓插杈瑰艦錛岃繖鏄洜涓哄湪鐞冧綋涓婄殑姣忎竴涓杈瑰艦閮戒細閫佸叆鍒板彾鑺傜偣涓傚鏋滅悆浣撴湁200涓杈瑰艦褰撴覆鏌撴椂灝變細浜х敓200涓彾鑺傜偣鐨凚SP鏍戙傝繖鏍峰仛闈炲父褰卞搷榪愯鐨勯熷害錛屽洜姝ゅ繀欏誨鎵句竴涓柟娉曟潵閬垮厤榪欑鐜拌薄鐨勫彂鐢熴?br>涓轟簡瑙e喅榪欎釜闂鍦板浘鐨勮璁¤呭彲浠ラ夋嫨緇勬垚鍦板浘鐨勫嚑浣曚綋錛屽湪涓婇潰鐨勪緥瀛愪腑涔熷氨鏄珛鏂逛綋錛屾帴鐫灝嗗墿浣欑殑鐗╀綋鍋氫負闈欐佺墿浣擄紝瀹冧滑灝嗕笉浼氱敤鏉ュBSP鏍戣繘琛屾覆鏌撴垨榪涘彲瑙佹ф嫻嬶紝浣嗘槸瀹冧滑浼氬弬涓庡埌鍦板浘鐨勫厜鐓ц繍綆楀綋涓幓銆傚綋榪涜鍙鎬ц繍綆楁椂姣忎竴涓潤鎬佺墿浣撲細琚坊鍔犲埌BSP鏍戜腑錛屾瘡涓涓潤鎬佺墿浣撶殑澶氳竟褰㈠皢浼氳娣誨姞鍒癇SP鏍戜腑錛岃繖涓繃紼嬪涓嬶細<br>l 鍑芥暟PUSH-POLYGON<br>l 鍙傛暟錛?br>l Node – 澶氳竟褰㈠綋鍓嶆墍鍦ㄧ殑鑺傜偣銆?br>l Polygon – 灝嗚娣誨姞鐨勫杈瑰艦銆?br>l 榪斿洖鍊鹼細<br>l None<br>l 鍔熻兘錛?br>l 灝嗗杈瑰艦娣誨姞鍒版爲涓傚鏋滃杈瑰艦鐨勪竴浜涚偣涓庤妭鐐圭殑鍒嗗壊闈㈢浉浜ゅ皢浼氳鍒嗗壊銆傚垎鍓插悗鐨勯儴鍒嗗皢浼氳緇х畫鍚戜笅浼犻併傚綋涓涓杈瑰艦榪涘叆涓涓彾鑺傜偣鍚庡畠灝嗚娣誨姞鍒板彾鑺傜偣鐨勫杈瑰艦闆嗗悎涓?br>PUSH-POLYGON (Node, Polygon)<br>1 if (IS-LEAF (Node))<br>2 Node.PolygonSet = Node.PolygonSet U Polygon<br>3 else<br>4 value = CALCULATE-SIDE (Node.Divider, Polygon)<br>5 if (value = INFRONT or value = SPANNING)<br>6 PUSH-POLYGON (Node.RightChild, Polygon)<br>7 else if (value = BEHIND)<br>8 PUSH-POLYGON (Node.LeftChild, Polygon)<br>9 else if (value = SPANNING)<br>10 Split_Polygon28 (P1, Divider, Front, Back)<br>11 PUSH-POLYGON (Node.RightChild, Front)<br>12 PUSH-POLYGON (Node.LeftChild, Front)<br>PUSH-POLYGON鏄竴涓掑綊鍑芥暟錛屽畠灝嗕竴涓杈瑰艦娣誨姞鍒癇SP鏍戜腑錛岃繖涓嚱鏁板姣忎竴涓潤鎬佺墿浣撶殑姣忎竴涓杈瑰艦閮戒細璋冪敤涓嬈★紝<br>鍦ㄨ繖涓繃紼嬪鐞嗕箣鍚庡彾鑺傜偣鍙兘涓嶅啀鎴愪負涓涓?#8220;鍑?#8221;闆嗗悎錛岃繖鍦ㄨ繘琛岀鎾炴嫻嬫椂鍙兘浼氫駭鐢熶竴浜涢棶棰橈紝鍚庨潰鐨勫唴瀹瑰皢浼氬榪欎釜闂榪涜闃愯堪銆?br>BSP鎶鏈瑙?</p> <p>eXtreme3D</p> <p>絎笁鑺?瀹ゅ唴鍦烘櫙涓厜鐓ц繍綆?br>鍏充簬Radiosity鐨勭畻娉曟渶鏃╂槸鐢盙oral銆丆indy M銆乀orrance銆並enneth E銆丟reenberg銆丏onald P銆丅attaile鍜孊ennett鍦ㄨ鏂囥奙odelling the interaction of light between diffuse surfaces銆嬫彁鍑虹殑銆備粬浠嬌鐢≧adiosity鏉ユā鎷熻兘閲忓湪婕弽灝勮〃闈箣闂磋繘琛屼紶閫侊紝婕弽灝勮〃闈㈠鐓у埌琛ㄩ潰涓婄殑鍏夌嚎鍦ㄦ墍鏈夌殑鏂瑰悜涓婇兘榪涜鐩稿悓鐨勫弽灝勶紝鍜屽畠鐩稿弽鐨勬槸闀滈潰鍙嶅皠琛ㄩ潰錛屽畠鍙湪鍙嶅皠鏂瑰悜涓婁紶鎾弽灝勫厜銆傜敱浜庢極鍙嶅皠琛ㄩ潰鐨勮繖涓壒鎬э紝榪欏氨鎰忓懗鐫瀵逛簬鎵鏈夌殑瑙傚療瑙掑害鑰岃█鐪嬭搗鏉ヨ〃闈㈤兘鏄浉鍚岀殑錛岃繖鏍峰浜庡満鏅腑鐨勬瘡涓涓〃闈㈠彧闇瑕佽繘琛屼竴嬈″厜鐓ц繍綆楋紝鑰屼笖鍙互鍦ㄥ満鏅殑棰勬覆鏌撴椂榪涜錛屽洜姝よ繖欏規妧鏈澶ч噺鐨?D娓告垙鎵閲囩敤銆?br>涓嬮潰鎴戝啀綆鐭殑璁茶В涓涓婻adiosity鏄浣曞伐浣滅殑錛岃屽皢涓昏鐨勭簿鍔涙斁鍦ㄥ浣曚嬌鐢˙SP鏍戞潵鍔犻烺adiosity鐨勮綆楋紝瀵逛簬Radiosity鐨勮緇嗕粙緇嶈鍙傝冨墠闈㈢殑绔犺妭銆俁adiosity鎶鏈槸璁捐鐢ㄦ潵浣垮満鏅腑鍏夌収鐪嬭搗鏉ユ洿鍔犵湡瀹炲拰鍏夋粦錛屽鏋滄垜浠嬌鐢ㄤ竴涓竴鐩村悜鍓嶄紶鎾屼笉鑰冭檻鍙嶅皠鐨勫厜鐓фā鍨嬶紝閭d箞褰撳満鏅腑鐨勭伅鍏夌収浜満鏅腑鐨勭墿浣撴椂錛屽茍涓嶄細璁$畻榪滃緇忚繃鍙嶅皠榪囨潵鐨勫厜綰匡紝榪欐牱鍦烘櫙涓殑闃村獎鐪嬭搗鏉ラ潪甯稿皷閿愯岀墿浣撹〃闈篃鐪嬭搗鏉ラ潪甯鎬笉鐪熷疄銆備負浜嗕嬌鐢╮adiosity鎶鏈垜浠渶瑕佹妸鍦烘櫙鍒嗗壊鎴愪竴鍧椾竴鍧楀緢灝忕殑閮ㄥ垎錛屾瘡涓閮ㄥ垎鎴戜滑縐板畠涓簆atch錛屾瘡涓涓猵atch閮芥湁涓涓垵濮嬪寲鐨勮兘閲忕駭鍒紝濡傛灉瀹冧笉鏄竴涓伅鍏夎繖鏍風殑鍙戝厜浣撶殑璇濋氬父涓?錛屾湁璁稿鏂規硶鏉ュ垎閰嶅満鏅腑鐨勮兘閲忥紝榪欓噷鎴戜滑灝嗚浣跨敤鐨勬柟娉曠О涓轟氦浜掑紡radiosity銆傝繖涓柟娉曠殑榪囩▼鏄垜浠粠鍦烘櫙涓湭鍙戦佽兘閲忕殑綰у埆鏈楂樼殑patch寮濮嬪彂閫佽兘閲忥紝鑳介噺緇忚繃浼犻掑悗灝嗕笉鍐嶅彂閫佽兘閲忕殑patch鐨勭瓑綰ц涓?錛岄噸澶嶈繖涓繃紼嬬洿鍒板満鏅腑鐨勬瘡涓涓猵atch鐨勮兘閲忕瓑綰ч兘灝忎簬涓涓瀹氬間負姝€?br>褰撹兘閲忎粠涓涓猵atch錛坖錛夊紑濮嬪彂閫佸埌鍙︿竴涓猵atch錛坕錛夋椂鎴戜滑浣跨敤涓嬮潰鐨勫叕寮忥細<br>Bi = Bi + Bj * Fij * Ai / Aj<br>榪欓噷Bi = patch錛坕錛夌殑鑳介噺綰у埆    Bj = patch錛坖錛夌殑鑳介噺綰у埆 <br>    Ai= patch錛坕錛夌殑浣滅敤鍖哄煙    Aj = patch錛坖錛夌殑浣滅敤鍖哄煙<br>    Fij = patch錛坕錛変笌patch錛坖錛変箣闂寸殑緋繪暟<br>鍦ㄥ叕寮忎腑緋繪暟Fij鏄敱浠ヤ笅鍏紡鏉ョ‘瀹氱殑錛?br>Fij = (cos qi * cos qj) / d2 * Hij<br>榪欓噷Fij = patch錛坕錛変笌patch錛坖錛変箣闂寸殑緋繪暟<br>qi = patch錛坕錛変笌patch錛坖錛夋硶綰夸箣闂寸殑澶硅<br>qj = patch錛坕錛変笌patch錛坖錛夋硶綰夸箣闂寸殑澶硅<br>d = patch錛坕錛変笌patch錛坖錛変箣闂寸殑璺濈<br>Hij = patch錛坕錛変笌patch錛坖錛変箣闂寸殑鍙鎬х郴鏁般傚鏋滃湪涓や釜patch涔嬮棿鍙湁涓鏉″厜綰垮彲浠ヨ窡韙紝榪欎釜鍊間負1錛屽鏋滄病鏈夊厜綰垮彲浠ヨ窡韙負0銆備竴鑸儏鍐典笅鐢變簬姣忎竴涓猵atch閮戒笉鏄竴涓偣鑰屾槸涓涓尯鍩燂紝鍥犳鍏夌嚎鏈夊緢澶氭潯銆?br>浠庝笂闈㈢殑鍏紡涓垜浠彲浠ョ湅鍒板湪鍦烘櫙涓繘琛宺adiosity璁$畻鏄潪甯歌楄垂鏃墮棿鐨勩傝繖涓嚱鏁扮殑澶嶆潅搴︿負O(n3)錛岃繖閲岀殑n涓哄満鏅腑patch鐨勬暟閲忋傜敱浜庡浜庡満鏅腑姣忎竴涓猵atch浣犻渶瑕佸彂閫佹渶灝戜竴鏉″厜綰垮埌鍏跺畠patch涓婏紝鍥犳闇瑕佸鍦烘櫙涓殑鍑犱箮鎵鏈夌殑澶氳竟褰㈤兘榪涜鍏夌嚎璺熻釜璁$畻銆傚湪涓婇潰鐨勫叕寮忎腑緋繪暟H鐨勮綆楅潪甯歌楄垂鏃墮棿錛屼笅闈㈡垜浠皢鐪嬩竴涓嬪浣曞湪BSP鏍戜腑瀵瑰畠鐨勮綆楄繘琛屼紭鍖栥?</p> <p>    BSP鏍戜腑鐨剅adiosity璁$畻<br>鍦ㄨ繘琛屽満鏅腑鐨勫厜鐓ц綆椾箣鍓嶉渶瑕佹妸鍦烘櫙涓殑闈㈠垎鍓蹭負patch錛屼竴涓柟娉曟槸鍦ㄥ紑濮嬬殑鏃跺欒瀹氭瘡涓涓猵atch涓洪瀹氱殑澶у皬錛屽綋璁$畻姣忎竴涓猵atch鐨勮兘閲忔椂錛屽鏋滃湪patch涓婄殑鑳介噺瓚沖澶э紝瀵硅繖涓猵atch榪涜鍒嗗壊銆備笉榪囪繖涓柟娉曟槸闈炲父鑰楄垂鏃墮棿鐨勶紝鍥犳蹇呴』瀵繪壘涓涓洿濂界殑鏂規硶鏉ラ氳繃BSP鏍戝璁$畻榪涜浼樺寲銆?br>鍦╮adiosity鐨勪竴鑸畻娉曚腑鍦烘櫙涓殑姣忎竴涓厜婧愰兘琚湅浣滀負涓涓垨澶氫釜patch錛岃繖閲屾垜浠彲浠ユ敼榪涗竴涓嬶紝灝嗘瘡涓涓厜婧愭斁鍦ㄥ畠鎵浣嶄簬鐨勫彾鑺傜偣涓紝鎺ヤ笅鏉ユ瘡涓涓厜婧愰兘鍙戦佽嚜宸辯殑鑳介噺鍒板満鏅腑鎵鏈夌殑patch涓婏紝褰撹繖涓繃紼嬪畬鎴愬悗radiosity璁$畻涔熷氨緇撴潫浜嗐備負浜嗕嬌鏈鍚庣殑緇撴灉鐪嬭搗鏉ユ洿濂藉彲浠ヤ嬌鐢ㄤ竴縐嶇О涓?#8220;娓愯繘綺鵑?#8221;錛坧rogressive refinement錛夌殑鎶鏈潵瀵硅繖涓柟娉曡繘琛屽緢灝忕殑淇敼銆傚湪姣忎竴嬈¤繃紼嬩腑錛屽彾鑺傜偣涓叿鏈夐珮鑳介噺鐨刾atch灝嗗彂閫佽兘閲忓埌鍏跺畠浣庤兘閲忕殑patch涓婏紝榪欐牱鍋氱殑緇撴灉鏄珮浜害鐨刾atch灝嗗彂閫佽兘閲忓埌澶勪簬闃村獎涓璸atch涓娿傝繖鏄洜涓哄湪瀹為檯鐢熸椿涓茍娌℃湁鐪熸榛戞殫鐨勫湴鏂癸紝瀹冨澶氬皯灝戣鑾峰緱涓浜涘叾瀹冪墿浣撳弽灝勮繃鏉ョ殑鍏変寒銆?br>鐢變簬璁$畻闈炲父鑰楄垂鏃墮棿闇瑕佸仛涓涓嬩紭鍖栵紝浣跨敤娓叉煋BSP鏍戞椂鑾峰緱鐨凱VS淇℃伅鍙互鍦ㄩ夋嫨鍝簺patch灝嗘帴鍙楄兘閲忔椂鍓旈櫎涓浜涙棤鐢ㄧ殑璁$畻銆傚洜涓哄湪璁$畻PVS鏃朵嬌鐢ㄤ簡鐩稿悓鐨勬柟娉曟潵榪涜鍏夌嚎璺熻釜銆?br>閫氳繃鍦烘櫙鏉ュ垎閰嶈兘閲忕殑綆楁硶濡備笅錛?br>l 鍑芥暟RADIOSITY<br>l 鍙傛暟錛?br>l Tree – 榪涜radiosity璁$畻鐨凚SP鏍戙?br>l 榪斿洖鍊鹼細<br>l None<br>l 鍔熻兘錛?br>l 鍦ㄥ満鏅腑鐨刾atch涔嬮棿鍙戦佽兘閲忋?br>RADIOSITY (Tree)<br>1 for(each leaf L in Tree)<br>2 for(each light S in L)<br>3 for(each leaf V that is in L’s PVS)<br>4 Send S’s energy to the patches in V<br>l 涓嬮潰璇彞5鏄負浜嗚鍦板浘緙栬緫鑰呭湪浠諱綍鏃跺欓兘鍙互媯鏌ュ満鏅覆鏌撶殑鏁堟灉錛屽鏋滀粬鎰熷埌鐪嬭搗鏉ュ凡緇忚凍澶熷ソ浜嗗彲浠ヤ腑鏂兘閲忕殑浼犳挱銆?br>5 while(not looks good enough)<br>6 for(each leaf L in Tree)<br>7 for(each leaf V that is in L’s PVS)<br>8 Send energy from the patch with the most unsent energy in L<br>to all patches in V.<br>澶嶆潅搴﹀垎鏋?br>榪欎釜鍑芥暟鐨勮繍綆楄垂鐢ㄥ疄鍦ㄦ槸澶珮鏄備簡錛屽彲浠ョО涓烘椂闂存潃鎵嬶紝鍦ㄦ渶鍧忕殑鎯呭喌涓嬫瘡涓鏉″厜綰垮皢涓嶅緱涓嶆嫻嬪満鏅腑鐨勬瘡涓涓杈瑰艦錛屾鏃跺鏉傚害涓篛(n3)錛岃繖閲宯涓烘爲涓璸atch鐨勬暟閲忋備竴鑸儏鍐典笅鐢變簬榪涜浜嗕紭鍖栧彲浠ュ噺灝戝ぇ閲忕殑璁$畻錛屼絾鏄噺灝戝灝戝茍涓嶈兘璁$畻鍑烘潵錛屽洜涓鴻繖渚濊禆浜庢爲緇撴瀯鐨勫鏉傚害銆?br>涓婇潰鐨勫嚱鏁扮粰鍑轟簡涓涓厖鍒嗗埄鐢˙SP鏍戠殑浼樼偣鏉ュ姞閫熷満鏅厜鐓ц繍綆楃殑鏂規硶錛屽挨鍏舵槸鍙互鏄捐憲鐨勫噺灝戝厜綰胯窡韙殑璁$畻閲忥紝鑰屼笖鍦板浘璁捐鑰呭彲浠ユ潵鍐沖畾褰撳満鏅覆鏌撴椂濡傛灉娓叉煋鐨勬晥鏋滃彲浠ユ帴鍙椾腑鏂覆鏌撳驚鐜傝繖瀵瑰湴鍥劇殑棰勬覆鏌撳疄鍦ㄦ槸澶柟渚夸簡錛岃繍琛岀殑鏃墮棿鍙互鏍規嵁娓叉煋鐨勬晥鏋滄潵鍐沖畾銆?br>絎洓鑺?BSP鏍戠殑棰勬覆鏌?br>鐜板湪鎴戜滑闇瑕佸畬鎴愪竴涓畬鏁碆SP寮曟搸鐨勯澶勭悊榪囩▼錛屼笅闈㈢殑綆楁硶鏄劇ず濡備綍灝嗗満鏅覆鏌撳埌BSP鏍戜腑銆?br>l 鍑芥暟RENDER-SCENE<br>l 鍙傛暟錛?br>l Scene – 琚覆鏌撶殑鍦烘櫙<br>l 榪斿洖鍊鹼細<br>l 涓涓狟SP鏍戙?br>l 鍔熻兘<br>l 棰勬覆鏌撴潵鑾峰緱涓涓寘鍚満鏅俊鎭殑BSP鏍戙?br>RENDER-SCENE (Scene)<br>l 浣跨敤鎻忚堪鍦烘櫙涓浘鍏冪殑鐗╀綋鏉ユ覆鏌揃SP鏍戙?br>1 GeometryPolygons = {}<br>2 for (姣忎竴涓寘鍚満鏅浘鍏冪殑鐗╀綋object O)<br>3 GeometryPolygons = GeometryPolygons U O.PolygonSet<br>4 GENERATE-BSP-TREE (Tree.RootNode, GeometryPolygons)<br>l 鍒嗛厤鍙惰妭鐐逛笂鐨勫彇鏍風偣銆?br>5 DISTRIBUTE-SAMPLE-POINTS (Tree.RootNode, {})<br>6 TRACE-VISIBILITY (Tree)<br>7 for 姣忎竴涓満鏅腑鐨勯潤鎬佺墿浣搊bject O<br>8 for 鐗╀綋O涓瘡涓涓杈瑰艦P<br>9 PUSH-POLYGON (Node, P)<br>l 鍑芥暟CREATE-PATCHES鏄竴涓湭瀹氫箟鐨勫嚱鏁幫紝鐢變簬鎴戜滑鐨勮В鍐蟲柟妗堟晥鐜囧茍涓嶆槸澶ソ錛屽洜姝ゆ病鏈夊瀹冭繘琛岃緇嗙殑浠嬬粛銆?br>10 CREATE-PATCHES (Tree)<br>11 RADIOSITY (Tree)<br>    澶嶆潅搴﹀垎鏋?br>鍑芥暟鐨勫鏉傚害濡備笅錛?br>鍑芥暟 鏈鍧忔儏鍐?涓鑸儏鍐?鎻忚堪<br>GENERATE-BSP-TREE O(n2 lg n) O(n2) n涓哄満鏅腑澶氳竟褰㈢殑鏁伴噺<br>DISTRIBUTE-SAMPLE-POINTS Q (np + xy) Q (np + xy) n涓烘爲涓杈瑰艦鐨勬暟閲忥紝p涓烘爲涓吀鍨嬬偣鐨勬暟閲忥紝x鍜寉涓哄垎鍓查潰鐨勫搴﹀拰楂樺害銆?br>TRACE-VISIBILITY O(n2) O(n lg n), n涓烘爲涓杈瑰艦鐨勬暟閲忋?br>RADIOSITY O(n3) O(n2 lg n) n涓烘爲涓璸atch鐨勬暟閲?br>鍦ㄤ竴鑸儏鍐佃繖涓鍒椾腑鏄劇ず浜嗙畻娉曢氬父鎵闇榪愯鐨勬椂闂達紝瀵圭畻娉曟椂闂村獎鍝嶆渶澶х殑鏄嚱鏁癛ADIOSITY錛屽畠浣挎暣涓畻娉曠殑澶嶆潅搴﹁秼鍚戜簬O(n3)銆?/p> <img src ="http://www.shnenglu.com/bloodbao/aggbug/51631.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/bloodbao/" target="_blank">bloodbao</a> 2008-05-30 20:11 <a href="http://www.shnenglu.com/bloodbao/archive/2008/05/30/51631.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>ogre+ceguihttp://www.shnenglu.com/bloodbao/archive/2008/05/30/51615.htmlbloodbaobloodbaoFri, 30 May 2008 09:32:00 GMThttp://www.shnenglu.com/bloodbao/archive/2008/05/30/51615.htmlhttp://www.shnenglu.com/bloodbao/comments/51615.htmlhttp://www.shnenglu.com/bloodbao/archive/2008/05/30/51615.html#Feedback0http://www.shnenglu.com/bloodbao/comments/commentRss/51615.htmlhttp://www.shnenglu.com/bloodbao/services/trackbacks/51615.html
OGRE鏄嬁鏉ョ帺鐨勶紝IRR鏄嬁鏉ュ仛欏圭洰鐨勶紝BLOOD灝嗘槸鏈寮哄ぇ鐨凞X10寮曟搸錛?

bloodbao 2008-05-30 17:32 鍙戣〃璇勮
]]>
DX10涔婫S鐢熸垚綃?/title><link>http://www.shnenglu.com/bloodbao/archive/2008/05/28/51359.html</link><dc:creator>bloodbao</dc:creator><author>bloodbao</author><pubDate>Wed, 28 May 2008 01:33:00 GMT</pubDate><guid>http://www.shnenglu.com/bloodbao/archive/2008/05/28/51359.html</guid><wfw:comment>http://www.shnenglu.com/bloodbao/comments/51359.html</wfw:comment><comments>http://www.shnenglu.com/bloodbao/archive/2008/05/28/51359.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/bloodbao/comments/commentRss/51359.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/bloodbao/services/trackbacks/51359.html</trackback:ping><description><![CDATA[<p align=left>                                             DX10涔婫S鐢熸垚綃?br>1.鐢變笁瑙掑艦鐢熸垚閲戝瓧濉旓細<br>綆鏋愶細triangle GSPS_INPUT input[3]浠h〃杈撳叆鐨勪笁瑙掑艦<br> inout TriangleStream<GSPS_INPUT> TriStream 浠h〃杈撳嚭鐨勪笁瑙掑艦嫻侊紞鍗抽噾瀛楀鍏?2涓《鐐?br>絎竴涓驚鐜綆椾笁涓爣鍑烘硶鍚戦噺鐨勪笁瑙掑艦錛屽鍥炬墍紺恒?br>絎簩涓驚鐜綆楀嚭涓夎褰笌杈撳叆鐨勪笁瑙掑艦涓鏍鳳紝浣嗗鉤闈㈢殑娉曞悜閲忓垰濂界浉鍙嶃?img src="http://www.shnenglu.com/images/cppblog_com/bloodbao/gs.jpg" border=0></p> <p>//--------------------------------------------------------------------------------<br>// Geometry Shader<br>//--------------------------------------------------------------------------------<br>[maxvertexcount(12)]<br>void GS( triangle GSPS_INPUT input[3], inout TriangleStream<GSPS_INPUT> TriStream )<br>{<br>    GSPS_INPUT output;<br>    <br>    //<br>    // Calculate the face normal<br>    //<br>    float3 faceEdgeA = input[1].Pos - input[0].Pos;<br>    float3 faceEdgeB = input[2].Pos - input[0].Pos;<br>    float3 faceNormal = normalize( cross(faceEdgeA, faceEdgeB) );<br>    float3 ExplodeAmt = faceNormal*Explode;<br>    <br>    //<br>    // Calculate the face center<br>    //<br>    float3 centerPos = (input[0].Pos.xyz + input[1].Pos.xyz + input[2].Pos.xyz)/3.0;<br>    float2 centerTex = (input[0].Tex + input[1].Tex + input[2].Tex)/3.0;<br>    centerPos += faceNormal*Explode;<br>    <br>    //<br>    // Output the pyramid<br>    //<br>    for( int i=0; i<3; i++ )<br>    {<br>        output.Pos = input[i].Pos + float4(ExplodeAmt,0);<br>        output.Pos = mul( output.Pos, View );<br>        output.Pos = mul( output.Pos, Projection );<br>        output.Norm = input[i].Norm;<br>        output.Tex = input[i].Tex;<br>        TriStream.Append( output );<br>        <br>        int iNext = (i+1)%3;<br>        output.Pos = input[iNext].Pos + float4(ExplodeAmt,0);<br>        output.Pos = mul( output.Pos, View );<br>        output.Pos = mul( output.Pos, Projection );<br>        output.Norm = input[iNext].Norm;<br>        output.Tex = input[iNext].Tex;<br>        TriStream.Append( output );<br>        <br>        output.Pos = float4(centerPos,1) + float4(ExplodeAmt,0);<br>        output.Pos = mul( output.Pos, View );<br>        output.Pos = mul( output.Pos, Projection );<br>        output.Norm = faceNormal;<br>        output.Tex = centerTex;<br>        TriStream.Append( output );<br>        <br>        TriStream.RestartStrip();<br>    }<br>    <br>    for( int i=2; i>=0; i-- )<br>    {<br>        output.Pos = input[i].Pos + float4(ExplodeAmt,0);<br>        output.Pos = mul( output.Pos, View );<br>        output.Pos = mul( output.Pos, Projection );<br>        output.Norm = -input[i].Norm;<br>        output.Tex = input[i].Tex;<br>        TriStream.Append( output );<br>    }<br>    TriStream.RestartStrip();<br>}<br>2.GS綺掑瓙<br>瀹炵幇鍍忕儫鑺變竴鏍風殑鏁堟灉銆?br>棣栧厛瑕佷簡瑙d簲縐嶅熀鏈矑瀛愩?br>Launcher Particles 鍙戝皠綺掑瓙錛氫笉縐誨姩涔熶笉姝誨幓錛岀敤鏉ュ彂灝凷hell綺掑瓙銆備竴鏃﹀彂灝勫畬Shell綺掑瓙錛屽氨閲嶇疆鏃墮棿銆?br>Shell Particles 鐢卞彂灝勭矑瀛愬彂灝勫嚭闅忔満閫熷害鐨勭殑Shell綺掑瓙錛屽湪鐢熷懡鍛ㄦ湡鍐呬笉鍙戝皠鏈被鍨嬬殑綺掑瓙錛岃屽彂灝勫嚭涓浜汦mber1鍜孍mber2綾誨瀷鐨勭矑瀛愩?br>Ember1 Particles 鐢盨hell綺掑瓙鍙戝皠錛屾嫢鏈夊緢鐭殑鐢熷懡鍛ㄦ湡錛岄殢鐫鏃墮棿鑰屾貳鍑烘鍘伙紝騫朵笉鍙戝皠綺掑瓙銆?br>Ember2 Particles 鐢盨hell綺掑瓙鍙戝皠錛屽湪鐢熷懡鍛ㄦ湡鏈彂鍑篍mber3綺掑瓙錛岀浜屾鐨勭垎鐐告簮銆?br>Ember3 Particles 綾諱技Ember1綺掑瓙錛岄櫎浜嗘湁涓嶅悓鐨勯鑹層?br>[maxvertexcount(128)]<br>void GSAdvanceParticlesMain(point VSParticleIn input[1], inout PointStream<VSParticleIn> ParticleOutputStream)<br>{<br>    if( input[0].Type == PT_LAUNCHER )<br>        GSLauncherHandler( input[0], ParticleOutputStream );<br>    else if ( input[0].Type == PT_SHELL )<br>        GSShellHandler( input[0], ParticleOutputStream );<br>    else if ( input[0].Type == PT_EMBER1 ||<br>              input[0].Type == PT_EMBER3 )<br>        GSEmber1Handler( input[0], ParticleOutputStream );<br>    else if( input[0].Type == PT_EMBER2 )<br>        GSEmber2Handler( input[0], ParticleOutputStream );<br>}</p> <p> </p> <img src ="http://www.shnenglu.com/bloodbao/aggbug/51359.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/bloodbao/" target="_blank">bloodbao</a> 2008-05-28 09:33 <a href="http://www.shnenglu.com/bloodbao/archive/2008/05/28/51359.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>浠巇ll瀵煎嚭鍏跺搴旂殑libhttp://www.shnenglu.com/bloodbao/archive/2008/05/17/50174.htmlbloodbaobloodbaoSat, 17 May 2008 11:39:00 GMThttp://www.shnenglu.com/bloodbao/archive/2008/05/17/50174.htmlhttp://www.shnenglu.com/bloodbao/comments/50174.htmlhttp://www.shnenglu.com/bloodbao/archive/2008/05/17/50174.html#Feedback0http://www.shnenglu.com/bloodbao/comments/commentRss/50174.htmlhttp://www.shnenglu.com/bloodbao/services/trackbacks/50174.html  Visual   C++   寮鍙戝伐鍏鋒彁渚涗簡涓や釜鍛戒護琛屽伐鍏鳳紝涓涓槸dumpbin.exe,鍙︿竴涓槸lib.exe銆傚埄鐢ㄨ繖涓や釜宸ュ叿鍗沖彲浠巇ll瀵煎嚭鍏跺搴旂殑lib銆?nbsp; 
   
  1銆佸湪鍛戒護琛屾墽琛岋細  
  dumpbin   /exports   yourdll.dll   >   yourdll.def  
   
  2銆佺紪杈?nbsp;  yourdll.def   鏂囦歡錛屼嬌涔嬫牸寮忎笌.def鏂囦歡鏍煎紡涓鑷淬傛瘮濡傦細  
   
  EXPORTS;  
                fn1;  
                fn2;  
   
  3銆佸湪鍛戒護琛屾墽琛岋細  
  lib   /def:yourdll.def   /machine:i386   /out:yourdll.lib  
   
  榪欐牱灝卞彲浠ュ鍑哄搴旂殑LIB浜嗭紝浣嗕綘瑕佺敤鐨勮瘽錛岃鍦ㄥ伐紼嬩腑鑷繁鎵嬪伐鍔犱笂

bloodbao 2008-05-17 19:39 鍙戣〃璇勮
]]>
underwater scenehttp://www.shnenglu.com/bloodbao/archive/2008/05/16/50088.htmlbloodbaobloodbaoFri, 16 May 2008 12:46:00 GMThttp://www.shnenglu.com/bloodbao/archive/2008/05/16/50088.htmlhttp://www.shnenglu.com/bloodbao/comments/50088.htmlhttp://www.shnenglu.com/bloodbao/archive/2008/05/16/50088.html#Feedback0http://www.shnenglu.com/bloodbao/comments/commentRss/50088.htmlhttp://www.shnenglu.com/bloodbao/services/trackbacks/50088.html宸ヤ綔鍟婏紝宸ヤ綔錛佹湁鏈嬪弸璇磋鎺ㄨ崘鍘諱笂嫻峰拰騫夸笢鍟︼紝涓嶈繃錛屼及璁¤繕鏄闈㈣瘯錛屾曟曪紒
鏈榪戣灝戝啓綆鏋愬鍐機ODE浜嗭紒
鍒氬仛鐨勫満鏅細



bloodbao 2008-05-16 20:46 鍙戣〃璇勮
]]>
HLSL鎬誨姩鍛橈紙DX9寰呮敼錛?/title><link>http://www.shnenglu.com/bloodbao/archive/2008/05/12/49659.html</link><dc:creator>bloodbao</dc:creator><author>bloodbao</author><pubDate>Mon, 12 May 2008 11:51:00 GMT</pubDate><guid>http://www.shnenglu.com/bloodbao/archive/2008/05/12/49659.html</guid><wfw:comment>http://www.shnenglu.com/bloodbao/comments/49659.html</wfw:comment><comments>http://www.shnenglu.com/bloodbao/archive/2008/05/12/49659.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/bloodbao/comments/commentRss/49659.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/bloodbao/services/trackbacks/49659.html</trackback:ping><description><![CDATA[<p>鏈塃ffect鐗堬細<br>    DWORD         g_dwShaderFlags; // Shader compilate and link flags<br>      LPD3DXBUFFER  g_pCompiledFragments = NULL;  </p> <p>    D3DXGatherFragmentsFromFile( L"FragmentLinker.fx", NULL, <br>                NULL, g_dwShaderFlags, &g_pCompiledFragments, NULL );</p> <p>D3DXGatherFragmentsFromFile requires the .fx file, pointers to the #define and #include handlers (both set to NULL in this example), and the shader compile flags. The method returns a buffer which contains the compiled shader fragment. The method can return a second buffer with compile errors, which is set to NULL in this example because it is not used. D3DXGatherFragments is overloaded to handle loading fragments from a string, a file, or a resource.</p> <p>Set your debugger to break on this method to look for compile errors in the debugger. The compiler can catch errors in syntax, but it cannot check for registers that are shared incorrectly due to the fact that it has no way to predict which parameters a user may want to share between fragments.</p> <p>You need a fragment linker to manage the compiled fragments. Create the fragment linker by calling D3DXCreateFragmentLinker:</p> <p>ID3DXFragmentLinker* g_pFragmentLinker = NULL;     // Fragment linker interface<br>IDirect3DDevice9*    pd3dDevice        = NULL;</p> <p>    // Initialize the device before using it<br> ...<br> <br>    // Create the fragment linker interface<br>    D3DXCreateFragmentLinker( pd3dDevice, 0, &g_pFragmentLinker );</p> <p>Then simply add the compiled fragments to the fragment linker using ID3DXFragmentLinker::AddFragments.</p> <p>    // Add the compiled fragments to a list<br>    g_pFragmentLinker->AddFragments(     <br>              (DWORD*)g_pCompiledFragments->GetBufferPointer() );</p> <p>ID3DXFragmentLinker::AddFragments requires a pointer to the DWORD stream that contains the compiled shader.</p> <p>After compiling fragments and creating a fragment linker, there are several ways to link fragments. One way to link a vertex shader fragment is to call ID3DXFragmentLinker::LinkVertexShader. Here is an example that links two vertex shader fragments:</p> <p>    // Get a handle to each fragment    <br>    D3DXHANDLE fragmentHandle[2];<br> fragmentHandle[0] = <br>     (D3DXHANDLE)g_pFragmentLinker->GetFragmentHandleByName("Ambient");<br> fragmentHandle[1] = <br>     (D3DXHANDLE)g_pFragmentLinker->GetFragmentHandleByName("AmbientDiffuseFragment");<br>    <br>    // Link the fragments together to form a vertex shader<br>    IDirect3DVertexShader9* pVertexShader = NULL;<br>    g_pFragmentLinker->LinkVertexShader( "vs_1_1", g_dwShaderFlags, <br>           fragmentHandle, 2, &pVertexShader, NULL );</p> <p>This requires a shader compile target, the shader compile and link flags, and a handle to each of the fragments to link. If the fragments are successfully linked, ID3DXFragmentLinker::LinkVertexShader returns a vertex shader (IDirect3DVertexShader9). The vertex shader needs to be set in the effect before rendering. But before this, here's how the shader is declared in the effect:</p> <p>VertexShader MyVertexShader; // Vertex shader set by the application</p> <p>The effect technique contains all the state set for a pass. This pass specifies the vertex shader like this:</p> <p>technique RenderScene<br>{<br>    pass P0<br>    {<br>        VertexShader = <MyVertexShader>;    <br>        PixelShader = compile ps_1_1 ModulateTexture();    <br>    }<br>} </p> <p>With the effect's vertex shader created and initialized, the render code also sets the uniform constants and calls the render loop. Set the uniform constants similar to this:</p> <p>    // Update the uniform shader constants.<br>    g_pEffect->SetMatrix( "g_mWorldViewProjection", &mWorldViewProjection );<br>    g_pEffect->SetMatrix( "g_mWorld", &mWorld );<br>    g_pEffect->SetFloat( "g_fTime", (float)fTime );    <br>Then render the effect by setting the current technique and pass:</p> <p>    // Render the scene<br>    if( SUCCEEDED( pd3dDevice->BeginScene() ) )<br>    {  <br>        // Apply the technique contained in the effect<br>        UINT cPasses, iPass;<br>        g_pEffect->Begin(&cPasses, 0);</p> <p>        for (iPass = 0; iPass < cPasses; iPass++)<br>        {<br>            g_pEffect->BeginPass(iPass);</p> <p>            // Render the mesh with the applied technique<br>            g_pMesh->DrawSubset(0);</p> <p>            g_pEffect->EndPass();<br>        }<br>        g_pEffect->End();</p> <p>        pd3dDevice->EndScene();<br>    }</p> <p>When setting uniform shader constants, it is more efficient to cache a handle to the parameter by calling ID3DXBaseEffect::GetParameterByName. This avoids the string lookup that is necessary when calling effect methods like ID3DXBaseEffect::SetMatrix.</p> <p>  // Instead of setting a uniform constant like this in the render loop<br>  g_pEffect->SetMatrix( "g_mWorldViewProjection", &mWorldViewProjection );</p> <p>  // Get a handle to a uniform constant outside of the render loop<br>  D3DXHANDLE hParameter;<br>  GetParameterByName( hParameter,"g_mWorldViewProjection");</p> <p>  ...<br>  <br>  // Use the handle to set the uniform constant in the render loop<br>  g_pEffect->SetMatrix(hParameter); </p> <p>鏃燛ffect鐗堬細<br> LPD3DXCONSTANTTABLE pConstantTable;<br>    LPD3DXBUFFER pShaderBuf;<br>    IDirect3DVertexShader9* pVertexShader = NULL;</p> <p>    // Compile the fragments to a buffer.<br>    D3DXGatherFragmentsFromFile( L"FragmentLinker.fx", NULL, NULL, <br>         g_dwShaderFlags, &g_pCompiledFragments, NULL );<br>    <br>    g_pFragmentLinker->AddFragments((DWORD*)g_pCompiledFragments->GetBufferPointer());<br>    g_pFragmentLinker->LinkShader( <br>     "vs_1_1",<br>     g_dwShaderFlags,<br>     aHandles,<br>     NUM_FRAGMENTS,<br>     &pShaderBuf,<br>     NULL);<br>    D3DXGetShaderConstantTable( <br>     (DWORD*)pShaderBuf->GetBufferPointer(),<br>     &pConstantTable );<br>    <br>    pDevice->CreateVertexShader(<br>     (DWORD*)pShaderBuf->GetBufferPointer(),<br>     &pVertexShader);<br>    RELEASE(pShaderBuf);</p> <img src ="http://www.shnenglu.com/bloodbao/aggbug/49659.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/bloodbao/" target="_blank">bloodbao</a> 2008-05-12 19:51 <a href="http://www.shnenglu.com/bloodbao/archive/2008/05/12/49659.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>OGRE鍦烘櫙綆$悊綆鏋愶紙寰呮敼錛?/title><link>http://www.shnenglu.com/bloodbao/archive/2008/05/11/49504.html</link><dc:creator>bloodbao</dc:creator><author>bloodbao</author><pubDate>Sun, 11 May 2008 03:42:00 GMT</pubDate><guid>http://www.shnenglu.com/bloodbao/archive/2008/05/11/49504.html</guid><wfw:comment>http://www.shnenglu.com/bloodbao/comments/49504.html</wfw:comment><comments>http://www.shnenglu.com/bloodbao/archive/2008/05/11/49504.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/bloodbao/comments/commentRss/49504.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/bloodbao/services/trackbacks/49504.html</trackback:ping><description><![CDATA[<p>OGRE鍦烘櫙綆$悊錛?br>PCZSceneManager : public SceneManager<br>鑺傜偣錛?br>    typedef std::list < SceneNode * > NodeList;<br>    typedef std::list < WireBoundingBox * > BoxList;<br>鎽勫儚鏈猴細<br>    class PCZCamera;<br>澶╃┖錛?br>    void setSkyZone(PCZone * zone);<br>鍏夌収錛?br>    createLight(const String& name);<br>鍦板甫錛?br>    class PCZone;<br>    PCZone * createZone(const String& zoneType, const String& instanceName);<br>閲婃斁鑺傜偣錛?br>    void removeSceneNode( SceneNode * );<br>鑺傜偣鏌ユ壘錛?br>    void findNodesIn( const AxisAlignedBox &box, <br>        PCZSceneNodeList &list, <br>        PCZone * startZone,<br>        PCZSceneNode *exclude = 0 );</p> <p>    class PCZIntersectionSceneQuery;錛嶏紞錛嶏紞錛嶇浉浜ゆ煡璇?br>    class PCZRaySceneQuery;錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶅皠綰挎煡璇?br>    class PCZSphereSceneQuery;錛嶏紞錛嶏紞錛嶏紞錛嶏紞鐞冮潰鏌ヨ<br>    class PCZAxisAlignedBoxSceneQuery;錛嶏紞錛嶏紞錛嶏紞綆辨煡璇紙娌胯醬鍚戯級<br>    class PCZPlaneBoundedVolumeListSceneQuery;-----錛嶏紞琛ㄦ煡璇?br>綆鍗曞湴鐪嬩簡OGRE鐨勫満鏅鐞嗭紝闄や簡OGREMAIN閮ㄥ垎錛岃繕鐢ㄤ簡PCZ鎻掍歡鏉ュ疄緇ф壙騫跺疄鐜般?br>錛坈lass PCZSceneManagerFactory : public SceneManagerFactory錛夋尯澶嶆潅鐨勶紝鐩告瘮涔嬩笅錛岄鐏殑鍦烘櫙綆$悊灝辯畝鍗曚簡錛?br>鍙皟鐢ㄥ縐嶈妭鐐廣?/p> <img src ="http://www.shnenglu.com/bloodbao/aggbug/49504.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/bloodbao/" target="_blank">bloodbao</a> 2008-05-11 11:42 <a href="http://www.shnenglu.com/bloodbao/archive/2008/05/11/49504.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>緹ら噷鐨勬湅鍙嬪仛鐨?/title><link>http://www.shnenglu.com/bloodbao/archive/2008/05/10/49472.html</link><dc:creator>bloodbao</dc:creator><author>bloodbao</author><pubDate>Sat, 10 May 2008 14:00:00 GMT</pubDate><guid>http://www.shnenglu.com/bloodbao/archive/2008/05/10/49472.html</guid><wfw:comment>http://www.shnenglu.com/bloodbao/comments/49472.html</wfw:comment><comments>http://www.shnenglu.com/bloodbao/archive/2008/05/10/49472.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/bloodbao/comments/commentRss/49472.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/bloodbao/services/trackbacks/49472.html</trackback:ping><description><![CDATA[<img src="http://www.shnenglu.com/images/cppblog_com/bloodbao/32.jpg" border=0><img src="http://www.shnenglu.com/images/cppblog_com/bloodbao/31.jpg" border=0> <img src ="http://www.shnenglu.com/bloodbao/aggbug/49472.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/bloodbao/" target="_blank">bloodbao</a> 2008-05-10 22:00 <a href="http://www.shnenglu.com/bloodbao/archive/2008/05/10/49472.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>nd闈㈣瘯鍒嗘瀽http://www.shnenglu.com/bloodbao/archive/2008/05/08/49212.htmlbloodbaobloodbaoThu, 08 May 2008 06:38:00 GMThttp://www.shnenglu.com/bloodbao/archive/2008/05/08/49212.htmlhttp://www.shnenglu.com/bloodbao/comments/49212.htmlhttp://www.shnenglu.com/bloodbao/archive/2008/05/08/49212.html#Feedback7http://www.shnenglu.com/bloodbao/comments/commentRss/49212.htmlhttp://www.shnenglu.com/bloodbao/services/trackbacks/49212.html涓澶╁潗浜嗕節涓皬鏃剁殑杞︼紝鎴戠畻鏄綋楠屽埌浜嗚鐢熸椿鐨勮壈杈涖?br>涓崍鍧愯濺鐨勬椂鍊欏ぉ榪樻槸鐐庣儹鐨勶紝涓嬪崍寮濮嬬媯涓嬮洦錛屾垜絀跨潃涓や歡琛f湇榪樹竴鐩村湪鍙戞姈銆?br>鍏堟潵璋堣皥鎰熷彈錛?br>1.鍏徃鍐呴儴鐜涓嶉敊錛屽緢婕備寒鐨勬父娉蟲睜錛屾攢娌垮錛屼細璁錛岄鍫傘傛垜姣旇緝鍠滄閭d釜娓告吵姹狅紝鎰熻寰堜笉閿欍?br>2.緹庡コ寰堝錛岀壒鍒槸浜轟簨閮ㄩ棬鐨勶紝閭d箞鍐風殑澶╂皵錛岀┛鐫瓚呯煭瑁欙紝綆鏄椋庡害涓嶈娓╁害銆備笉榪囷紝鐗瑰埆鍏葷溂銆?br>3.宸ヤ綔鐜錛屼袱涓夌櫨涓漢鎸ゅ湪涓涓ぇ鍘呬腑銆傚ソ鍍忥紝鍚勪釜寮鍙戠粍閮藉湪涓璧峰惂錛屾湁浜涙垚鍛橀潰鍓嶆斁鐫涓ゅ彴寰堝ぇ鐨勬恫鏅訛紝寰堜笂鍘誨氨鎸虹埥鐨勩傚彧鏄繖涔堝惖鏉傜殑鐜閫傚悎寮鍙戝悧錛屽伓鏄笉鐭ラ亾鐨勩?br>4.浜轟簨閮ㄧ殑MM鎸哄嫟蹇殑錛屼笉榪囷紝渚濇棫鏈夎鎵斿湪涓鏃佺殑鎰熻錛岀壒鍒槸鍦ㄧ瓑涓庝富紼嬭闈㈢殑鏃墮棿錛屽樊涓嶅蹇竴涓皬鏃躲傚垢濂芥梺杈圭殑涓涓竻鍝ョ粰浜嗘湰鏉傚織錛岃鎴戞墦鍙戞椂闂淬?br>5.姣忔椂姣忓埢閮芥湁浜哄湪搴旇仒錛屼笉榪囷紝閮芥槸鎷涙枃鍛樸傛劅瑙夊氨鍘諱簡涓涓狿HP鐨勶紝涔熺畻鎶鏈殑銆?br>6.涓葷▼寰堝帀瀹籌紝鐢ㄧ幇鍦ㄧ殑璇濊錛屽彨寰堢墰銆備漢浜嬬殑MM錛岃浠栧緢涓ユ牸錛岄潰璇曠殑棰樼洰閮芥槸浠栧嚭鐨勶紝闈炲父闅俱傞潰璋堟椂鏋滅劧寰堜弗錛屽伓涓嶆槸璁$畻鏈虹鐝嚭韜殑錛岃櫧鐒禖++鐢ㄧ殑涓嶆槸鐐夌伀綰潚錛屼絾涔熸湁涓や笁騫寸殑鍩虹錛屽鍩烘湰姒傚康閮芥槸灝忔噦鐨勶紝鍙槸瑕佹垜鎸変功鏈笂鑳屽嚭鏉ワ紝璁╂垜鏈夌偣闅句互鎺ュ彈錛堜篃鑳屼笉鍑烘潵鍟婏級銆?br>鑷充簬棰樼洰鐨勯毦搴︼紝鏈夌敤鐨凜++鐨勬湅鍙嬶紝搴旇閮芥槸浜嗚В鐨勩傝繕鏈夊氨鏄偅涓富紼嬩竴鐩存兂璁╂垜璁蹭紭鐐瑰拰緙虹偣錛屼及璁℃槸鍑轟簬宀椾綅瀹夋帓鑰冭檻錛屽彲鏄亢涓鐩存壘涓嶆潵鑷凡鐨勭壒鑹詫紝榪欑畻鏄垜闈㈣瘯鐨勮觸絎斿惂銆傛渶澶х殑璐ョ瑪鍙兘鏄浜轟簨鐨凪M錛岃浜嗗彞榪欒冮澶狤ASY浜嗐?br>7.甯﹀幓浠g爜鐢ㄧ殑璋冭瘯鐜澶珮錛岃繖鏄垜鐨勯敊錛佸搸錛岃皝璁╂垜鐨勫紑鍙戠幆澧冩槸VISTA+VC2008錛佸棷錛岄毦閬揘D閮芥病鏈変竴鍙扮數鑴戣窇榪欎釜鐨勶紵
閭d富紼嬭紼嬪簭鎵撲笉寮銆傚搸錛屾垜鐨勯敊銆傜洿瑙夊憡璇夋垜錛岃繖涓富紼嬫瘮鍗庝負闈㈣瘯瀹樺樊澶氫簡錛岀畝鐩存槸涓や釜妗f鐨勩備互鍓嶏紝鍦ㄥ拰鍗庝負鐨勪氦嫻佹椂錛岄偅鎬佸害鍟婏紝瀵逛唬鐮佺殑鍒嗘瀽錛岄兘寰堜笉閿欍傚彲鎬滐紝閭f椂鎴戝垰瀛++錛屽偦涔庝箮鐨勫氨璺戝幓闈㈣瘯錛屽崕涓烘嫑紜歡+C鐨勬瘮杈冨錛屽拰鍋剁殑涓嶉傚悎錛堟垜涓嶆噦鏁板瓧鐢佃礬錛屾ā鐢電瓑紜歡鏂歸潰鐨勭煡璇嗭級銆?br>8.鎴戣浜嗘垜鐨勪紭鍔垮湪瀵規暟瀛︾殑浜嗚В涓婏紝姣斿鐭╅樀鍙兘鍦ㄥ紩鎿庝笂鏈変竴瀹氱殑搴旂敤銆傞偅涓葷▼鐩存帴鍜屾垜璇達紝鏁板鍦ㄦ父鎴忓紑鍙戜笂搴旂敤涓嶅お銆傛垜蹇借浜嗭紝ND濂藉儚鐢ㄧ殑鏄疷NREAL錛屽埆浜虹殑寮曟搸錛屼笉鐢ㄨ嚜宸插紑鍙戝簳灞傚惂錛?br>C++
1.浠涔堟槸緇ф壙錛?br>2.浠涔堟槸澶氭佹э紵
3.浠涔堟槸Iterator,鏈変粈涔堜綔鐢紵
4.STL鏄粈涔堬紵
5.STACK,LIST鍜孧AP鏈変粈涔堜笉鍚岋紵
6.浠涔堟槸閲嶈澆錛坥verloading)鍜岄噸鍐欙紙overridding)錛熸湁浠涔堝尯鍒紵
7.澶氱嚎紼嬫湁鍑犵銆傘傘傦紵
8.MUTEX鍜孋RITICALSECTION鏈変粈涔堝尯鍒紵
9.ENTERCRITICALSECTION鍜孴RYENTERCRITICALSECTION鏈変粈涔堜笉鍚岋紵
D3D
1.鏉愯川鏄粈涔堬紵鏈変簺浠涔堝厓绱狅紵
2.LOD鏃朵駭鐢烼鍨嬭緙濆拰鍛煎惛鏁堝簲錛屾湁浠涔堜紭鍖栨柟妗堬紵
3.嫻呰ВHDR鎶鏈紵
4.浠涔堟槸BILLBOARD錛屾庝箞瀹炵幇錛?br>5.浠涔堟槸BSP?鐢ㄥ湪瀹ゅ唴榪樻槸瀹ゅ錛熸庝箞瀹炵幇錛?br>6.妯℃澘緙撳啿鍖虹殑搴旂敤錛?br>7.閫嗙煩闃墊湁浠涔堝簲鐢紵
闈㈣瘯鏃訛細
1.D3D鎴朞NPENGL錛屽疄鐜頒竴涓笁瑙掑艦錛燂紙榪囩▼錛?br>2.鐢ㄨ繃浠涔堢墿鐞嗗紩鎿庯紵
3.鐢ㄨ繃浠涔堣剼鏈紵
4.鑷凡鐨勪紭緙虹偣錛?br>5.鏈変粈涔堜綔鍝佸茍浠嬬粛錛?br>6.瀵?D涓殑浠涔堟渶鐔熸倝錛?br>鎬葷粨錛氳觸鍐涗箣灝嗭紝璋堜粈涔堥兘鏄病鐢ㄧ殑錛屾壘涓嶅埌濂藉伐浣滆嫤鐨勬槸鑷凡錛岃刀蹇姞娣辮嚜韜殑淇吇銆傜壒鍒槸琛ㄨ揪鍜屾矡閫氳兘鍔涖?

bloodbao 2008-05-08 14:38 鍙戣〃璇勮
]]>
anorasi欏圭洰鍓栨瀽錛?錛?/title><link>http://www.shnenglu.com/bloodbao/archive/2008/05/08/49187.html</link><dc:creator>bloodbao</dc:creator><author>bloodbao</author><pubDate>Thu, 08 May 2008 02:31:00 GMT</pubDate><guid>http://www.shnenglu.com/bloodbao/archive/2008/05/08/49187.html</guid><wfw:comment>http://www.shnenglu.com/bloodbao/comments/49187.html</wfw:comment><comments>http://www.shnenglu.com/bloodbao/archive/2008/05/08/49187.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/bloodbao/comments/commentRss/49187.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/bloodbao/services/trackbacks/49187.html</trackback:ping><description><![CDATA[<p>璇ラ」鐩嬌鐢↖NI鏉ュ疄鐜版暟鎹殑璇誨彇銆?br>姣斿錛?br>1.鑺傜偣璇誨彇<br>INI閮ㄥ垎錛?br>澶栬<br>Look<br> Body<br>  model=impreza.3ds<br>  scale=1 1 1<br> Wheels<br>  model=wheel.3ds<br>  scale=1 1 1<br>澹伴煶<br>Sound<br> Engine<br>  wave=206_engine.wav<br>  pitch_low=0.2<br>  pitch_high=1.5<br>紼嬪簭閮ㄥ垎錛?br>//load car</p> <p> body.node=loadModel(cfg, "Look/Body/", device, sm, driver);</p> <p> body.node_debug=sm->addCubeSceneNode(1, 0, -1, core::vector3df(0, 0, 0), core::vector3df(0, 0, 0),<br>  cfg.Getval_vector("Body/Chassis/1/scale", core::vector3df(1, 1, 1))<br>  );<br> body.node_debug->setMaterialTexture(0, driver->getTexture("data/misc/checked.jpg"));<br>2.杞﹁疆鐨勫睘鎬?br> Wheel #default<br>  damp=30000<br>  spring=50000<br>  radius=0.38<br>  weight=20<br>  width=0.10 #not yet used if user specifies wheel model<br>  brakes=0 # 0.0 - 1.0<br> Wheel_1 #fl<br>  pos=1.39 -0.145 0.823<br>  attr=STEER<br>  brakes=0.8<br>  rotation_z=1.5707963 #used just by client part<br> Wheel_2 #fr<br>  pos=1.39 -0.145 -0.823<br>  attr=STEER<br>  brakes=0.8<br>  rotation_z=4.7123889<br> Wheel_3 #rl<br>  pos=-1.350 -0.15 0.823<br>  attr=STRAIGHT|THURST<br>  brakes=0.2<br>  rotation_z=1.5707963<br> Wheel_4 #rr<br>  pos=-1.350 -0.15 -0.823<br>  attr=STRAIGHT|THURST<br>  brakes=0.2<br>  rotation_z=4.7123889<br>for (int i=0; ; i++) {<br>  char buf2[128];</p> <p>  sprintf(buf2, "Body/Wheel_%d/", i+1);<br>  buf=buf2;</p> <p>  if (!cfg.Getval_exists(buf+"attr")) break;</p> <p>  double radius=cfg.Getval_double((string)buf+"radius", cfg.Getval_double("Body/Wheel/radius", 1));<br>  double width=cfg.Getval_double((string)buf+"width", cfg.Getval_double("Body/Wheel/width", 1));</p> <p>  scene::ISceneNode* node=loadModel(cfg, "Look/Wheels/", device, sm, driver);<br>  CModelAttr wm;</p> <p>  scene::IMesh* cm=CreateCylinder(25, 2, 1);<br>  scene::ISceneNode* node_debug=sm->addMeshSceneNode(cm);<br>  node_debug->setScale(core::vector3df((f32)(radius), (f32)width, (f32)(radius)));<br>  node_debug->setMaterialTexture(0, driver->getTexture("data/misc/checked.jpg"));<br>  node_debug->getMaterial(0).EmissiveColor.set(255,255,255,255);</p> <p>  wm.arot=core::vector3df((f32)cfg.Getval_double(buf+"rotation_x", 0),<br>    (f32)cfg.Getval_double(buf+"rotation_y", 0),<br>    (f32)cfg.Getval_double(buf+"rotation_z", 0));<br>  wm.node=node;<br>  wm.node_debug=node_debug;</p> <p>  wheels.push_back(wm);<br> }<br>3.澹伴煶錛嶏紞錛嶈濺寮鍔ㄦ椂鐨勮槳楦e0<br> //load sounds<br> try {<br>  snd_engine = new openalpp::Source((ALbyte*)("data/cars/"+profile+"/"+cfg.Getval_str("Sound/Engine/wave")).c_str());<br>  if (!snd_engine.valid())<br>   DBGCOUT("ALUT", "Coulnd't load file", ("data/cars/"+profile+"/"+cfg.Getval_str("Sound/Engine/wave")).c_str());<br>  else {<br>   snd_engine->setGain(1);<br>   snd_engine->setPosition(0.0,0.0,0.0);<br>   snd_engine->setLooping(true);<br>  }<br>  snd_engine_pitch_low=cfg.Getval_double("Sound/Engine/pitch_low");<br>  snd_engine_pitch_high=cfg.Getval_double("Sound/Engine/pitch_high");<br> } catch(openalpp::Error e) {<br>  std::cerr << e << "\n";<br> }</p> <img src ="http://www.shnenglu.com/bloodbao/aggbug/49187.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/bloodbao/" target="_blank">bloodbao</a> 2008-05-08 10:31 <a href="http://www.shnenglu.com/bloodbao/archive/2008/05/08/49187.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>ODE綆鏋?/title><link>http://www.shnenglu.com/bloodbao/archive/2008/05/08/49186.html</link><dc:creator>bloodbao</dc:creator><author>bloodbao</author><pubDate>Thu, 08 May 2008 02:27:00 GMT</pubDate><guid>http://www.shnenglu.com/bloodbao/archive/2008/05/08/49186.html</guid><wfw:comment>http://www.shnenglu.com/bloodbao/comments/49186.html</wfw:comment><comments>http://www.shnenglu.com/bloodbao/archive/2008/05/08/49186.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.shnenglu.com/bloodbao/comments/commentRss/49186.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/bloodbao/services/trackbacks/49186.html</trackback:ping><description><![CDATA[<p>ODE甯哥敤鍙橀噺錛?br>dWorldID world;<br>dSpaceID space;<br>dJointGroupID  contactgroup;<br>dBodyID body;<br>dGeomID geom;<br>鍒濆鍖栵細<br>void InitODE(){<br> dInitODE();<br> world=dWorldCreate();<br> space=dHashSpaceCreate(0);<br> contactgroup=dJointGroupCreate(0);<br> dWorldSetGravity(world,0,-9.8,0);<br>}<br>鍥炶皟鍑芥暟錛氳綆楃鎾炵偣<br>void nearCallback(void* node, dGeomID o1, dGeomID o2)<br>{<br>  int i=0;<br>  dBodyID b1=dGeomGetBody(o1);<br>  dBodyID b2=dGeomGetBody(o2);<br>  const int MAX_CONTACTS = 8;<br>  if(b1 && b2 && dAreConnectedExcluding(b1,b2,dJointTypeContact))return;<br>  dContact contact[MAX_CONTACTS];<br>    for(i=0;i<MAX_CONTACTS;++i)<br>  {<br>    contact[i].surface.mode=dContactBounce | dContactSoftCFM;<br>    contact[i].surface.mu=100000.0;<br>    contact[i].surface.mu2=.00001;<br>    contact[i].surface.bounce=.2;<br>    contact[i].surface.bounce_vel=.1;<br>    contact[i].surface.soft_cfm=.0000001;<br>  }<br>    int numc=dCollide(o1,o2,MAX_CONTACTS,&contact[0].geom,sizeof(dContact));<br>  if(numc>0)<br>  {<br>    for(i=0;i<numc;i++)<br>    {<br>      dJointID c=dJointCreateContact(world,contactgroup,&contact[i]);<br>      dJointAttach(c,b1,b2);<br>    }<br>  }<br>}<br>紼嬪簭涓誨驚鐜?br>while(device->run())<br> {<br>  setPosition(geom);<br>  dJointGroupEmpty (contactgroup);    //娓呯┖紕版挒鐐圭粍<br>  driver->beginScene(true, true, SColor(0,200,200,200));<br>  dSpaceCollide (space,0,&nearCallback); //閫氳繃鍥炶皟鍑芥暟璁$畻紕版挒鐐圭瓑鏁版嵁<br>  dWorldQuickStep(world,0.025); //浣跨墿鐞嗕笘鐣岄殢鐫鏃墮棿鍙樺寲<br>  smgr->drawAll();<br>  guienv->drawAll();</p> <p>  driver->endScene();<br> }</p> <img src ="http://www.shnenglu.com/bloodbao/aggbug/49186.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/bloodbao/" target="_blank">bloodbao</a> 2008-05-08 10:27 <a href="http://www.shnenglu.com/bloodbao/archive/2008/05/08/49186.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>rain綆鏋愶紙寰呮敼錛?/title><link>http://www.shnenglu.com/bloodbao/archive/2008/05/08/49184.html</link><dc:creator>bloodbao</dc:creator><author>bloodbao</author><pubDate>Thu, 08 May 2008 02:25:00 GMT</pubDate><guid>http://www.shnenglu.com/bloodbao/archive/2008/05/08/49184.html</guid><wfw:comment>http://www.shnenglu.com/bloodbao/comments/49184.html</wfw:comment><comments>http://www.shnenglu.com/bloodbao/archive/2008/05/08/49184.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/bloodbao/comments/commentRss/49184.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/bloodbao/services/trackbacks/49184.html</trackback:ping><description><![CDATA[<p><img src="http://www.shnenglu.com/images/cppblog_com/bloodbao/sshot_lg.jpg" border=0><br>姒傝錛氶洦綺掑瓙姣忓埢鐨勫姩鐢諱嬌鐢ㄨ緭鍑烘祦錛屽湪姣忎竴甯ч兘浣跨敤geometry Shader鎵╂垚billboard.<br>鏈鍚庯紝闆ㄧ矑瀛愮殑娓叉煋浣跨敤鐨勭汗鐞嗗簱瀛樺偍鍦ㄤ竴涓汗鐞嗛樀鍒椼備嬌鐢―X10鍜孏eForce8 緋誨垪GPU銆?br>1.搴旂敤椋庡拰閲嶅姏浣跨矑瀛愪竴鐩村湪浣滃姩鐢匯?br>2.鎶婄矑瀛愭墿鎴愯鍦ㄦ瘡涓甯ф覆鏌撶殑綺劇伒銆?br>3.娓叉煋綺劇伒<br>1.錛?錛塁++浣跨敤杈撳嚭嫻?br>//璁劇珛娓叉煋鐐瑰垪琛紝姣忎釜綺掑瓙瀛樹竴涓《鐐廣?br>pd3dDevice->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_POINTLIST);<br>pd3dDevice->IASetInputLayout(g_pVertexLayoutRainVertex);<br>//鍐沖畾鍝釜欏剁偣緙撳啿鎴戜滑鏃㈠皢瑕佹覆鏌?br>鍋囧榪欐槸絎竴甯ф垜浠覆鏌撲竴涓浜х敓鐨勯《鐐瑰撫g_pParticleStart<br> static bool firstFrame=true;<br> ID3D10Buffer* pBuffers[1];<br> if(firstFrame)<br>  pBuffers[0]=g_pParticleStart;<br> else<br>  pBuffers[0]=g_pParticleDrawFrom;<br> pDevice->IASetVertexBuffers(0,1,pBuffers,stride,offset);<br> //鎸囧悜姝g‘鐨勮緭鍑虹紦鍐?br> pBuffers[0] = g_pParticleStreamTo;<br>        pd3dDevice->SOSetTargets( 1, pBuffers, offset );<br>        <br>        // 鐢誨浘錛屼嬌綺掑瓙鍔ㄧ敾<br>        D3D10_TECHNIQUE_DESC techDesc;<br>        g_pTechniqueAdvanceRain->GetDesc( &techDesc );<br>        g_pTechniqueAdvanceRain->GetPassByIndex(0)->Apply(0);</p> <p>        pd3dDevice->Draw(g_numRainVertices , 0 );</p> <p>        // Get back to normal<br>        pBuffers[0] = NULL;<br>        pd3dDevice->SOSetTargets( 1, pBuffers, offset );</p> <p>        // Swap buffers浜ゆ崲緙撳啿鍖?br>        ID3D10Buffer* pTemp = g_pParticleDrawFrom;<br>        g_pParticleDrawFrom = g_pParticleStreamTo;<br>        g_pParticleStreamTo = pTemp;<br>    <br>        firstFrame = false;<br>2.錛?錛塇LSL錛嶏紞浣跨敤Geometry shader Expanding</p> <p>GeometryShader gsStreamOut = ConstructGSWithSO( CompileShader( vs_4_0, VSAdvanceRain() ), "POSITION.xyz; SEED.xyz; SPEED.xyz; RAND.x; TYPE.x" );  <br>technique10 AdvanceParticles<br>{<br>    pass p0<br>    {<br>        SetVertexShader( CompileShader( vs_4_0, VSAdvanceRain() ) );<br>        SetGeometryShader( gsStreamOut );<br>        SetPixelShader( NULL );<br>        <br>        SetDepthStencilState( DisableDepth, 0 );<br>    }  <br>}<br>錛?錛塇LSL錛嶏紞浣跨敤Geometry shader Extruding<br>// GS for rendering rain as point sprites.  Takes a point and turns it into 2 tris.<br>[maxvertexcount(4)]<br>void GSRenderRain(point VSParticleIn input[1], inout TriangleStream<PSSceneIn> SpriteStream)<br>{<br>    float totalIntensity = g_PointLightIntensity*g_ResponsePointLight + dirLightIntensity*g_ResponseDirLight;<br>    if(!cullSprite(input[0].pos,2*g_SpriteSize) && totalIntensity > 0)<br>    {    <br>        PSSceneIn output = (PSSceneIn)0;<br>        output.type = input[0].Type;<br>        output.random = input[0].random;<br>       <br>        float3 pos[4];<br>        GenRainSpriteVertices(input[0].pos.xyz, input[0].speed.xyz/g_FrameRate + g_TotalVel, g_eyePos, pos);<br>        <br>        float3 closestPointLight = g_PointLightPos;<br>        float closestDistance = length(g_PointLightPos - pos[0]);<br>        if( length(g_PointLightPos2 - pos[0]) < closestDistance )<br>           closestPointLight = g_PointLightPos2;<br>        <br>        output.pos = mul( float4(pos[0],1.0), g_mWorldViewProj );<br>        output.lightDir = g_lightPos - pos[0];<br>        output.pointLightDir = closestPointLight - pos[0];<br>        output.eyeVec = g_eyePos - pos[0];<br>        output.tex = g_texcoords[0];<br>        SpriteStream.Append(output);<br>                <br>        output.pos = mul( float4(pos[1],1.0), g_mWorldViewProj );<br>        output.lightDir = g_lightPos - pos[1];<br>        output.pointLightDir = closestPointLight - pos[1];<br>        output.eyeVec = g_eyePos - pos[1];<br>        output.tex = g_texcoords[1];<br>        SpriteStream.Append(output);<br>        <br>        output.pos = mul( float4(pos[2],1.0), g_mWorldViewProj );<br>        output.lightDir = g_lightPos - pos[2];<br>        output.pointLightDir = closestPointLight - pos[2];<br>        output.eyeVec = g_eyePos - pos[2];<br>        output.tex = g_texcoords[2];<br>        SpriteStream.Append(output);<br>                <br>        output.pos = mul( float4(pos[3],1.0), g_mWorldViewProj );<br>        output.lightDir = g_lightPos - pos[3];<br>        output.pointLightDir = closestPointLight - pos[3];<br>        output.eyeVec = g_eyePos - pos[3];<br>        output.tex = g_texcoords[3];<br>        SpriteStream.Append(output);<br>        <br>        SpriteStream.RestartStrip();<br>    }   <br>}</p> <p>3.<br>娓叉煋鐐圭簿鐏?br>浣跨敤DX10鏂扮壒鎬exture Array<br>娓叉煋闆?br>榪愯鑼冧緥錛?br>鑼冧緥鏄劇ず涓や釜鐐瑰厜婧愬拰涓鏉$洿灝勫厜涓嬬殑妗ャ?br>宸﹂敭鎺у埗鐩村皠鍏夈?br></p> <img src ="http://www.shnenglu.com/bloodbao/aggbug/49184.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/bloodbao/" target="_blank">bloodbao</a> 2008-05-08 10:25 <a href="http://www.shnenglu.com/bloodbao/archive/2008/05/08/49184.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Racehttp://www.shnenglu.com/bloodbao/archive/2008/05/06/49052.htmlbloodbaobloodbaoTue, 06 May 2008 13:28:00 GMThttp://www.shnenglu.com/bloodbao/archive/2008/05/06/49052.htmlhttp://www.shnenglu.com/bloodbao/comments/49052.htmlhttp://www.shnenglu.com/bloodbao/archive/2008/05/06/49052.html#Feedback0http://www.shnenglu.com/bloodbao/comments/commentRss/49052.htmlhttp://www.shnenglu.com/bloodbao/services/trackbacks/49052.html

bloodbao 2008-05-06 21:28 鍙戣〃璇勮
]]>
crimson projecthttp://www.shnenglu.com/bloodbao/archive/2008/05/04/48788.htmlbloodbaobloodbaoSun, 04 May 2008 07:37:00 GMThttp://www.shnenglu.com/bloodbao/archive/2008/05/04/48788.htmlhttp://www.shnenglu.com/bloodbao/comments/48788.htmlhttp://www.shnenglu.com/bloodbao/archive/2008/05/04/48788.html#Feedback1http://www.shnenglu.com/bloodbao/comments/commentRss/48788.htmlhttp://www.shnenglu.com/bloodbao/services/trackbacks/48788.html

bloodbao 2008-05-04 15:37 鍙戣〃璇勮
]]>
newton鍐茬獊錛嶏紞錛岶OR IRRLICHThttp://www.shnenglu.com/bloodbao/archive/2008/05/04/48762.htmlbloodbaobloodbaoSun, 04 May 2008 04:20:00 GMThttp://www.shnenglu.com/bloodbao/archive/2008/05/04/48762.htmlhttp://www.shnenglu.com/bloodbao/comments/48762.htmlhttp://www.shnenglu.com/bloodbao/archive/2008/05/04/48762.html#Feedback0http://www.shnenglu.com/bloodbao/comments/commentRss/48762.htmlhttp://www.shnenglu.com/bloodbao/services/trackbacks/48762.html//Function to create a NewtonCollision from irrlicht mesh 
NewtonCollision 
*CreateCollisionFromMesh(NewtonWorld *nWorld, scene::IMesh *mesh) 

  
//Get number of vertices 
  u32 nVertices 
= 0, nMeshBuffer; 
  
for( nMeshBuffer = 0 ; nMeshBuffer < mesh->getMeshBufferCount(); ++nMeshBuffer) 
  { 
    scene::IMeshBuffer 
*buffer = mesh->getMeshBuffer(nMeshBuffer); 
    nVertices 
+= buffer->getVertexCount(); 
  } 

  
// allocate block for positions of every vertex in mesh, no need to delete 
  
// anything, the array cleans up for us. 
  core::
array<core::vector3df> vertices; 
  vertices.reallocate(nVertices); 

  
//Get mesh buffers and copy face vertices 
  
for( nMeshBuffer = 0 ; nMeshBuffer < mesh->getMeshBufferCount(); ++nMeshBuffer) 
  { 
    scene::IMeshBuffer 
*buffer = mesh->getMeshBuffer(nMeshBuffer); 

    
// handle the irrlicht supported vertex types 
    switch(buffer
->getVertexType()) 
    { 
    
case video::EVT_STANDARD: 
      { 
        video::S3DVertex
* verts = (video::S3DVertex*)buffer->getVertices(); 
        
for(u32 v = 0; v < buffer->getVertexCount(); ++v) 
          vertices.push_back(verts[v].Pos); 
      } 
      break; 

    
case video::EVT_2TCOORDS: 
      { 
        video::S3DVertex2TCoords
* verts = (video::S3DVertex2TCoords*)buffer->getVertices(); 
        
for(u32 v = 0; v < buffer->getVertexCount(); ++v) 
          vertices.push_back(verts[v].Pos); 
      } 
      break; 

    
case video::EVT_TANGENTS: 
      { 
        video::S3DVertexTangents
* verts = (video::S3DVertexTangents*)buffer->getVertices(); 
        
for(u32 v = 0; v < buffer->getVertexCount(); ++v) 
          vertices.push_back(verts[v].Pos); 
      } 
      break; 

    default: 
      return 
0// don't know vertex type! bail. 
    } 
  } 

  
//Create Newton collision object 
  return NewtonCreateConvexHull(nWorld, nVertices, 
&vertices[0].X, sizeof(core::vector3df), NULL); 
}

core::
array<f32> vertices; 
vertices.reallocate(nVertices 
* 3); 

// each loop should be updated 
for(u32 v = 0; v < buffer->getVertexCount(); ++v) 

  vertices.push_back(verts[v].Pos.X); 
  vertices.push_back(verts[v].Pos.Y); 
  vertices.push_back(verts[v].Pos.Z); 


// this should be passed to the convex hull function 
return NewtonCreateConvexHull(nWorld, nVertices, 
&vertices[0], sizeof(f32 * 3), NULL);

bloodbao 2008-05-04 12:20 鍙戣〃璇勮
]]>
MARK,綆鍗曠瑪璁?/title><link>http://www.shnenglu.com/bloodbao/archive/2008/05/04/48761.html</link><dc:creator>bloodbao</dc:creator><author>bloodbao</author><pubDate>Sun, 04 May 2008 04:17:00 GMT</pubDate><guid>http://www.shnenglu.com/bloodbao/archive/2008/05/04/48761.html</guid><wfw:comment>http://www.shnenglu.com/bloodbao/comments/48761.html</wfw:comment><comments>http://www.shnenglu.com/bloodbao/archive/2008/05/04/48761.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/bloodbao/comments/commentRss/48761.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/bloodbao/services/trackbacks/48761.html</trackback:ping><description><![CDATA[<p>IRRLICHT鐨勫疄鐜幫細<br>1.娉㈡氮鏄浣曞疄鐜扮殑錛?br>鍏堝姣忎釜鐐硅綆楅珮搴︼紝<br></p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">void addWave(vector3df</span><span style="COLOR: #000000">&</span><span style="COLOR: #000000"> dest, </span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> vector3df source, f32 </span><span style="COLOR: #0000ff">time</span><span style="COLOR: #000000">) <br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>{ <br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>     dest.Y </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> source.Y </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top> (sinf(((source.X</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">WaveLength) </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">time</span><span style="COLOR: #000000">)) </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> WaveHeight) </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top> (cosf(((source.Z</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">WaveLength) </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">time</span><span style="COLOR: #000000">)) </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> WaveHeight);<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>}</span></div> <p><br>鐒跺悗鍐嶈綆楁硶綰匡紝<br>recalculateNormals(Mesh);<br>2.ATMOSphere<br>澶槼鍢涳紝灝辨槸涓窡闅忔椂闂寸Щ鍔ㄧ殑BILLBOARD,杈圭紭鏈濂藉姞涓婇浘鍖栨晥鏋溿?br>3.鍦板艦緙栬緫鍣ㄤ唬鐮?br></p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">( Terrain </span><span style="COLOR: #000000">&&</span><span style="COLOR: #000000"> !RightMouseDown </span><span style="COLOR: #000000">&&</span><span style="COLOR: #000000"> Terrain</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">getTriangleSelector() )<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>{<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>LastMousePosition.set( Device</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">getCursorControl()</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">getPosition().X, Device</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">   getCursorControl()</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">getPosition().Y );<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">璁$畻浠庨紶鏍囦綅緗埌瑙傚療鐐圭殑灝勭嚎<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>core::line3df line </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> CollisionMgr</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">getRayFromScreenCoordinates( <br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top> core::position2d</span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">s32</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">( LastMousePosition.X, LastMousePosition.Y ) );<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">璁$畻浠ヤ氦鐐逛負涓績錛屼竴瀹氬崐寰勮寖鍥村唴鐨勭偣<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>core::vector3df spherePosition;<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">( CollisionMgr</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">getClosestVertex( line, Terrain</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">getTriangleSelector(), <br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top> spherePosition, CurrentVertexIndex ) )<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>      {<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>       LeftMouseDown </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>       </span><span style="COLOR: #000000">//</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">Get</span><span style="COLOR: #000000"> all vertices </span><span style="COLOR: #0000ff">with</span><span style="COLOR: #000000"> the circle<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>       SelectedTerrainVertices.clear();<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>       core::vector3df intersection;<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>       scene::SCollisionTriangle tri;<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>       </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">( CollisionMgr</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">getCollisionPoint( line, Terrain</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">getTriangleSelector(), intersection, tri ) )<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>       {<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>        u32 count </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>        SelectedTerrainVertices.reallocate( Terrain</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">getTriangleSelector()</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">getTriangleCount() );<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>        Terrain</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">getTriangleSelector()</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">getVerticesInRadius( SelectedTerrainVertices.pointer(), Terrain</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">getTriangleSelector()</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">getTriangleCount(), count, intersection, RedCircleRadius );<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>        SelectedTerrainVertices.set_used( count );<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>       }<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>       return </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>      }<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>     }<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span></div> <br><img src="http://www.shnenglu.com/images/cppblog_com/bloodbao/draft.jpg" border=0> <img src ="http://www.shnenglu.com/bloodbao/aggbug/48761.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/bloodbao/" target="_blank">bloodbao</a> 2008-05-04 12:17 <a href="http://www.shnenglu.com/bloodbao/archive/2008/05/04/48761.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>ATMOSphere----鏃ュ寰幆http://www.shnenglu.com/bloodbao/archive/2008/05/01/48594.htmlbloodbaobloodbaoThu, 01 May 2008 08:40:00 GMThttp://www.shnenglu.com/bloodbao/archive/2008/05/01/48594.htmlhttp://www.shnenglu.com/bloodbao/comments/48594.htmlhttp://www.shnenglu.com/bloodbao/archive/2008/05/01/48594.html#Feedback0http://www.shnenglu.com/bloodbao/comments/commentRss/48594.htmlhttp://www.shnenglu.com/bloodbao/services/trackbacks/48594.html



bloodbao 2008-05-01 16:40 鍙戣〃璇勮
]]>
VolumeLightSceneNodehttp://www.shnenglu.com/bloodbao/archive/2008/05/01/48573.htmlbloodbaobloodbaoThu, 01 May 2008 03:16:00 GMThttp://www.shnenglu.com/bloodbao/archive/2008/05/01/48573.htmlhttp://www.shnenglu.com/bloodbao/comments/48573.htmlhttp://www.shnenglu.com/bloodbao/archive/2008/05/01/48573.html#Feedback0http://www.shnenglu.com/bloodbao/comments/commentRss/48573.htmlhttp://www.shnenglu.com/bloodbao/services/trackbacks/48573.html



bloodbao 2008-05-01 11:16 鍙戣〃璇勮
]]>
SceneEdit嫻嬭瘯鐗堜笂浼?/title><link>http://www.shnenglu.com/bloodbao/archive/2008/04/30/48544.html</link><dc:creator>bloodbao</dc:creator><author>bloodbao</author><pubDate>Wed, 30 Apr 2008 11:22:00 GMT</pubDate><guid>http://www.shnenglu.com/bloodbao/archive/2008/04/30/48544.html</guid><wfw:comment>http://www.shnenglu.com/bloodbao/comments/48544.html</wfw:comment><comments>http://www.shnenglu.com/bloodbao/archive/2008/04/30/48544.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/bloodbao/comments/commentRss/48544.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/bloodbao/services/trackbacks/48544.html</trackback:ping><description><![CDATA[<p>鐜板皢鍦烘櫙緙栬緫鍣ㄦ祴璇曠増涓婁紶錛屾湜騫垮ぇ鏈嬪弸嫻嬭瘯錛屽璋紒<br>緇忚繃涓鍛ㄧ殑鏀瑰啓錛屽畬鎴愰儴鍒嗗姛鑳斤紝榪欎釜鐗堟湰闈炲畬鍏ㄧ増銆?br>涓嬭澆鍦板潃錛?a >http://pickup.mofile.com/7877768148587694</a><br>鍏變韓鎻愬彇鐮侊細7877768148587694<br>鍥劇墖鍦ㄦ湰鍗氬閮芥湁錛?br>VISTA涓嬫祴璇曢氳繃錛?br>鍡紝鏄懼崱鑷沖皯瑕丏X9鍚э紝涓嬩竴闃舵鎶婅崏鍦幫紝姘撮潰錛岀鎾炶ˉ榻愶紒</p> <img src ="http://www.shnenglu.com/bloodbao/aggbug/48544.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/bloodbao/" target="_blank">bloodbao</a> 2008-04-30 19:22 <a href="http://www.shnenglu.com/bloodbao/archive/2008/04/30/48544.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <a href="http://www.shnenglu.com/">青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品</a> <div style="position:fixed;left:-9000px;top:-9000px;"><font id="pjuwb"></font><button id="pjuwb"><pre id="pjuwb"></pre></button><sub id="pjuwb"></sub><tbody id="pjuwb"><var id="pjuwb"><address id="pjuwb"></address></var></tbody><listing id="pjuwb"><label id="pjuwb"><strong id="pjuwb"></strong></label></listing><wbr id="pjuwb"><small id="pjuwb"><tbody id="pjuwb"></tbody></small></wbr><ins id="pjuwb"><xmp id="pjuwb"></xmp></ins><style id="pjuwb"></style><label id="pjuwb"><em id="pjuwb"><li id="pjuwb"></li></em></label><samp id="pjuwb"></samp><menu id="pjuwb"><input id="pjuwb"></input></menu><pre id="pjuwb"><tbody id="pjuwb"><tfoot id="pjuwb"><button id="pjuwb"></button></tfoot></tbody></pre><form id="pjuwb"></form><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"><sup id="pjuwb"></sup></label></style></i><li id="pjuwb"><table id="pjuwb"><abbr id="pjuwb"></abbr></table></li><video id="pjuwb"></video><dfn id="pjuwb"></dfn><progress id="pjuwb"></progress><strong id="pjuwb"></strong><mark id="pjuwb"></mark><em id="pjuwb"></em><tbody id="pjuwb"><p id="pjuwb"><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike></p></tbody><option id="pjuwb"></option><strike id="pjuwb"></strike><u id="pjuwb"></u><td id="pjuwb"><center id="pjuwb"><tr id="pjuwb"></tr></center></td><em id="pjuwb"><mark id="pjuwb"><em id="pjuwb"><tt id="pjuwb"></tt></em></mark></em><strong id="pjuwb"></strong><wbr id="pjuwb"></wbr><s id="pjuwb"></s><strong id="pjuwb"></strong><legend id="pjuwb"></legend><nav id="pjuwb"></nav><dl id="pjuwb"><th id="pjuwb"><dl id="pjuwb"></dl></th></dl><noframes id="pjuwb"><ins id="pjuwb"></ins></noframes><font id="pjuwb"></font><strike id="pjuwb"><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"></label></style></i></strike><output id="pjuwb"></output><thead id="pjuwb"><pre id="pjuwb"></pre></thead><source id="pjuwb"></source><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem><pre id="pjuwb"><span id="pjuwb"><pre id="pjuwb"><big id="pjuwb"></big></pre></span></pre><cite id="pjuwb"><fieldset id="pjuwb"><s id="pjuwb"><rt id="pjuwb"></rt></s></fieldset></cite><big id="pjuwb"><progress id="pjuwb"><big id="pjuwb"></big></progress></big><samp id="pjuwb"><delect id="pjuwb"></delect></samp><dl id="pjuwb"></dl><strike id="pjuwb"><nav id="pjuwb"><dl id="pjuwb"><strong id="pjuwb"></strong></dl></nav></strike><tbody id="pjuwb"><b id="pjuwb"><optgroup id="pjuwb"><rp id="pjuwb"></rp></optgroup></b></tbody><em id="pjuwb"></em><xmp id="pjuwb"><blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote></xmp> <i id="pjuwb"><abbr id="pjuwb"><i id="pjuwb"><abbr id="pjuwb"></abbr></i></abbr></i><center id="pjuwb"><acronym id="pjuwb"><center id="pjuwb"></center></acronym></center><pre id="pjuwb"></pre><ul id="pjuwb"><thead id="pjuwb"></thead></ul><blockquote id="pjuwb"><pre id="pjuwb"><sup id="pjuwb"></sup></pre></blockquote><acronym id="pjuwb"></acronym><big id="pjuwb"><s id="pjuwb"></s></big><th id="pjuwb"></th><th id="pjuwb"></th><tbody id="pjuwb"></tbody><thead id="pjuwb"><strike id="pjuwb"></strike></thead><th id="pjuwb"><dl id="pjuwb"><wbr id="pjuwb"></wbr></dl></th><dl id="pjuwb"><strong id="pjuwb"></strong></dl><abbr id="pjuwb"><noframes id="pjuwb"><noscript id="pjuwb"></noscript></noframes></abbr><td id="pjuwb"><ol id="pjuwb"></ol></td><li id="pjuwb"><noscript id="pjuwb"><abbr id="pjuwb"></abbr></noscript></li><small id="pjuwb"><bdo id="pjuwb"><nav id="pjuwb"></nav></bdo></small><style id="pjuwb"></style><optgroup id="pjuwb"><table id="pjuwb"></table></optgroup><center id="pjuwb"><tr id="pjuwb"><dfn id="pjuwb"></dfn></tr></center><th id="pjuwb"></th><u id="pjuwb"></u><tfoot id="pjuwb"><legend id="pjuwb"><i id="pjuwb"></i></legend></tfoot><mark id="pjuwb"></mark><meter id="pjuwb"></meter><nav id="pjuwb"></nav><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><nobr id="pjuwb"></nobr><sub id="pjuwb"><th id="pjuwb"><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem></th></sub><thead id="pjuwb"><sub id="pjuwb"></sub></thead><ul id="pjuwb"><address id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></address></ul><dfn id="pjuwb"></dfn><pre id="pjuwb"></pre><input id="pjuwb"><cite id="pjuwb"><fieldset id="pjuwb"></fieldset></cite></input><u id="pjuwb"><form id="pjuwb"><u id="pjuwb"></u></form></u><kbd id="pjuwb"><em id="pjuwb"><mark id="pjuwb"></mark></em></kbd><tr id="pjuwb"></tr><del id="pjuwb"><form id="pjuwb"><address id="pjuwb"></address></form></del><tfoot id="pjuwb"><legend id="pjuwb"><ol id="pjuwb"><dl id="pjuwb"></dl></ol></legend></tfoot><menu id="pjuwb"><nobr id="pjuwb"><th id="pjuwb"><nobr id="pjuwb"></nobr></th></nobr></menu><fieldset id="pjuwb"></fieldset><pre id="pjuwb"><blockquote id="pjuwb"><samp id="pjuwb"></samp></blockquote></pre><xmp id="pjuwb"><sup id="pjuwb"><pre id="pjuwb"></pre></sup></xmp><span id="pjuwb"><progress id="pjuwb"></progress></span><font id="pjuwb"></font><var id="pjuwb"><abbr id="pjuwb"></abbr></var><strong id="pjuwb"><label id="pjuwb"><i id="pjuwb"><legend id="pjuwb"></legend></i></label></strong><tr id="pjuwb"><em id="pjuwb"><em id="pjuwb"><output id="pjuwb"></output></em></em></tr><thead id="pjuwb"><strike id="pjuwb"></strike></thead> <acronym id="pjuwb"></acronym><i id="pjuwb"></i><tt id="pjuwb"></tt><rt id="pjuwb"><source id="pjuwb"><rt id="pjuwb"></rt></source></rt><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike><del id="pjuwb"></del><font id="pjuwb"><output id="pjuwb"><ins id="pjuwb"><output id="pjuwb"></output></ins></output></font><kbd id="pjuwb"><tr id="pjuwb"><kbd id="pjuwb"></kbd></tr></kbd><pre id="pjuwb"><sup id="pjuwb"><delect id="pjuwb"><samp id="pjuwb"></samp></delect></sup></pre><samp id="pjuwb"></samp><track id="pjuwb"></track><tr id="pjuwb"></tr><center id="pjuwb"></center><fieldset id="pjuwb"></fieldset><i id="pjuwb"></i><td id="pjuwb"></td><rt id="pjuwb"></rt><object id="pjuwb"></object><pre id="pjuwb"><progress id="pjuwb"><sub id="pjuwb"><thead id="pjuwb"></thead></sub></progress></pre><kbd id="pjuwb"><tr id="pjuwb"><option id="pjuwb"></option></tr></kbd><output id="pjuwb"><ins id="pjuwb"></ins></output><ol id="pjuwb"></ol><source id="pjuwb"></source><strong id="pjuwb"></strong><ruby id="pjuwb"></ruby><sub id="pjuwb"><meter id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></meter></sub><pre id="pjuwb"></pre><center id="pjuwb"></center><tr id="pjuwb"><tbody id="pjuwb"><xmp id="pjuwb"><dd id="pjuwb"></dd></xmp></tbody></tr><video id="pjuwb"></video><pre id="pjuwb"></pre><form id="pjuwb"><optgroup id="pjuwb"></optgroup></form><samp id="pjuwb"></samp><kbd id="pjuwb"></kbd><strong id="pjuwb"><option id="pjuwb"></option></strong><object id="pjuwb"></object><abbr id="pjuwb"><noframes id="pjuwb"><abbr id="pjuwb"></abbr></noframes></abbr><ul id="pjuwb"><del id="pjuwb"><button id="pjuwb"><pre id="pjuwb"></pre></button></del></ul><abbr id="pjuwb"></abbr><strong id="pjuwb"><code id="pjuwb"><strong id="pjuwb"></strong></code></strong><option id="pjuwb"></option><optgroup id="pjuwb"><bdo id="pjuwb"><code id="pjuwb"></code></bdo></optgroup><mark id="pjuwb"><em id="pjuwb"><font id="pjuwb"></font></em></mark><acronym id="pjuwb"><code id="pjuwb"></code></acronym><dl id="pjuwb"></dl><em id="pjuwb"></em><object id="pjuwb"><input id="pjuwb"><object id="pjuwb"></object></input></object><output id="pjuwb"><dd id="pjuwb"></dd></output><option id="pjuwb"><button id="pjuwb"><option id="pjuwb"></option></button></option><small id="pjuwb"></small></div> <a href="http://www-55125.com" target="_blank">亚洲图片激情小说</a>| <a href="http://eguge.com" target="_blank">国产一区二区三区精品久久久</a>| <a href="http://rbet6365.com" target="_blank">在线不卡中文字幕</a>| <a href="http://www-772773.com" target="_blank">久久久久久9</a>| <a href="http://152mu.com" target="_blank">久久综合999</a>| <a href="http://chunshanketang.com" target="_blank">日韩视频一区二区三区在线播放免费观看 </a>| <a href="http://360inns.com" target="_blank">久久亚洲欧美国产精品乐播</a>| <a href="http://chenyirong.com" target="_blank">在线 亚洲欧美在线综合一区</a>| <a href="http://zgztby.com" target="_blank">欧美国产日韩xxxxx</a>| <a href="http://by33336.com" target="_blank">欧美激情视频一区二区三区免费</a>| <a href="http://0808333.com" target="_blank">亚洲图中文字幕</a>| <a href="http://17ang.com" target="_blank">性色av一区二区三区红粉影视</a>| <a href="http://ttmitch.com" target="_blank">尤物yw午夜国产精品视频</a>| <a href="http://psykoptic.com" target="_blank">亚洲第一在线综合在线</a>| <a href="http://sortxz.com" target="_blank">欧美日本国产</a>| <a href="http://heyzo1199.com" target="_blank">欧美在线综合视频</a>| <a href="http://zhenhaozu.com" target="_blank">女主播福利一区</a>| <a href="http://16kkkk.com" target="_blank">性欧美激情精品</a>| <a href="http://www-111111.com" target="_blank">蜜臀91精品一区二区三区</a>| <a href="http://k-dchina.com" target="_blank">亚洲一区在线免费</a>| <a href="http://x946.com" target="_blank">久久香蕉国产线看观看av</a>| <a href="http://yp77741.com" target="_blank">亚洲无限乱码一二三四麻</a>| <a href="http://783956.com" target="_blank">欧美亚洲尤物久久</a>| <a href="http://638179.com" target="_blank">亚洲麻豆一区</a>| <a href="http://shalitao.com" target="_blank">欧美制服丝袜</a>| <a href="http://5138555.com" target="_blank">亚洲综合国产</a>| <a href="http://vvvv81.com" target="_blank">欧美激情1区2区3区</a>| <a href="http://89wbw.com" target="_blank">久久精品首页</a>| <a href="http://lymzdd.com" target="_blank">欧美色图首页</a>| <a href="http://8842aa.com" target="_blank">亚洲国产mv</a>| <a href="http://1188188.com" target="_blank">国产一区二区三区四区三区四</a>| <a href="http://julong-ads.com" target="_blank">你懂的网址国产 欧美</a>| <a href="http://m-pisiwa.com" target="_blank">国产精品视频九色porn</a>| <a href="http://yp77741.com" target="_blank">亚洲第一在线综合网站</a>| <a href="http://ydpszcn.com" target="_blank">韩日在线一区</a>| <a href="http://ahhyez.com" target="_blank">亚洲一区综合</a>| <a href="http://www35211.com" target="_blank">一区二区三区成人精品</a>| <a href="http://zhaosaofu.com" target="_blank">久久视频一区</a>| <a href="http://yw1396.com" target="_blank">久久久久久高潮国产精品视</a>| <a href="http://qkspvip.com" target="_blank">国产精品v亚洲精品v日韩精品</a>| <a href="http://eguge.com" target="_blank">欧美国产在线电影</a>| <a href="http://xjksrbh.com" target="_blank">国产亚洲精品一区二区</a>| <a href="http://18av-77.com" target="_blank">亚洲性视频网址</a>| <a href="http://b1768.com" target="_blank">妖精成人www高清在线观看</a>| <a href="http://www35177.com" target="_blank">久久综合九色综合欧美就去吻</a>| <a href="http://wy172.com" target="_blank">欧美一区二区在线观看</a>| <a href="http://4006616309.com" target="_blank">国产精品电影网站</a>| <a href="http://www789yys.com" target="_blank">91久久久久久久久</a>| <a href="http://9486322.com" target="_blank">亚洲欧洲一区二区三区在线观看</a>| <a href="http://489633.com" target="_blank">久久精品国产视频</a>| <a href="http://dadepaimai.com" target="_blank">久久精品免费观看</a>| <a href="http://329aaa.com" target="_blank">国产欧美精品xxxx另类</a>| <a href="http://my1315.com" target="_blank">亚洲一区二区免费在线</a>| <a href="http://www330088.com" target="_blank">亚洲一区二区三区免费在线观看</a>| <a href="http://www-90567.com" target="_blank">欧美风情在线观看</a>| <a href="http://xxxbobba.com" target="_blank">亚洲国产精品久久精品怡红院</a>| <a href="http://556995.com" target="_blank">精品动漫3d一区二区三区免费 </a>| <a href="http://599107.com" target="_blank">蜜臀av性久久久久蜜臀aⅴ四虎</a>| <a href="http://maoming365.com" target="_blank">av成人国产</a>| <a href="http://popowq.com" target="_blank">国产专区欧美精品</a>| <a href="http://wwwnnnn.com" target="_blank">亚洲午夜视频在线观看</a>| <a href="http://www-5888c.com" target="_blank">亚洲欧美日韩在线</a>| <a href="http://wltaste.com" target="_blank">欧美日韩中文字幕</a>| <a href="http://7755mm.com" target="_blank">中文精品视频</a>| <a href="http://xtgoldsky.com" target="_blank">欧美一区二视频</a>| <a href="http://www44552.com" target="_blank">国产一区二区主播在线</a>| <a href="http://012488.com" target="_blank">久久久噜噜噜久久狠狠50岁</a>| <a href="http://787622.com" target="_blank">老**午夜毛片一区二区三区</a>| <a href="http://sexx777.com" target="_blank">激情偷拍久久</a>| <a href="http://631537.com" target="_blank">免费不卡在线视频</a>| <a href="http://zhipiao998.com" target="_blank">亚洲国产美女</a>| <a href="http://744734.com" target="_blank">亚洲网在线观看</a>| <a href="http://snis675.com" target="_blank">国产精品网站在线</a>| <a href="http://y65v.com" target="_blank">久久精品日韩欧美</a>| <a href="http://136066.com" target="_blank">欧美激情第1页</a>| <a href="http://xiaocao-av.com" target="_blank">日韩小视频在线观看专区</a>| <a href="http://tzhbsb.com" target="_blank">欧美日韩在线高清</a>| <a href="http://11867a.com" target="_blank">亚洲欧美日韩久久精品</a>| <a href="http://188267.com" target="_blank">久久亚洲色图</a>| <a href="http://www149aa.com" target="_blank">亚洲精品婷婷</a>| <a href="http://66889h.com" target="_blank">国产精品日本一区二区</a>| <a href="http://lctongda.com" target="_blank">久久精品视频在线免费观看</a>| <a href="http://hnluvlux.com" target="_blank">欧美国产日韩一区二区三区</a>| <a href="http://j88866.com" target="_blank">99精品国产高清一区二区</a>| <a href="http://7776701.com" target="_blank">欧美视频官网</a>| <a href="http://hnautos.com" target="_blank">欧美专区日韩专区</a>| <a href="http://yunpiwang.com" target="_blank">91久久亚洲</a>| <a href="http://uu774.com" target="_blank">欧美中文字幕视频在线观看</a>| <a href="http://www-787788.com" target="_blank">尤物yw午夜国产精品视频</a>| <a href="http://91x8.com" target="_blank">欧美日韩国产在线</a>| <a href="http://shaijia123.com" target="_blank">欧美一级片一区</a>| <a href="http://66636by.com" target="_blank">亚洲国产裸拍裸体视频在线观看乱了中文 </a>| <a href="http://119773.com" target="_blank">久久久夜色精品亚洲</a>| <a href="http://yiqipapa8.com" target="_blank">亚洲黄色有码视频</a>| <a href="http://9511331.com" target="_blank">午夜精品视频在线观看一区二区</a>| <a href="http://www-136hk.com" target="_blank">国产一区香蕉久久</a>| <a href="http://cnxwlm.com" target="_blank">欧美极品一区</a>| <a href="http://kk8586.com" target="_blank">欧美一区免费视频</a>| <a href="http://56lin.com" target="_blank">亚洲人成久久</a>| <a href="http://www87bbw.com" target="_blank">久久精品一区</a>| <a href="http://833816.com" target="_blank">这里只有精品视频</a>| <a href="http://www92994.com" target="_blank">精品999网站</a>| <a href="http://www387333.com" target="_blank">欧美三区在线</a>| <a href="http://107766a.com" target="_blank">老司机一区二区</a>| <a href="http://heyzo1199.com" target="_blank">亚洲一区二区三区在线</a>| <a href="http://cloakok.com" target="_blank">欧美高清在线视频</a>| <a href="http://91chaopron.com" target="_blank">性欧美大战久久久久久久久</a>| <a href="http://gjjlzs.com" target="_blank">亚洲日本视频</a>| <a href="http://by2866.com" target="_blank">激情一区二区</a>| <a href="http://quintostdio.com" target="_blank">国产精品青草久久</a>| <a href="http://hjersqc.com" target="_blank">欧美极品在线播放</a>| <a href="http://wwwqm9.com" target="_blank">久久婷婷久久</a>| <a href="http://www474000c.com" target="_blank">中文亚洲视频在线</a>| <a href="http://7467tom.com" target="_blank">亚洲国产91精品在线观看</a>| <a href="http://456kp.com" target="_blank">久久精品国内一区二区三区</a>| <a href="http://zhaosaoz.com" target="_blank">宅男在线国产精品</a>| <a href="http://7782y.com" target="_blank">亚洲黑丝一区二区</a>| <a href="http://3333347.com" target="_blank">国内精品久久久久久久果冻传媒</a>| <a href="http://easypufu.com" target="_blank">欧美午夜精品久久久久久浪潮</a>| <a href="http://kakatok.com" target="_blank">浪潮色综合久久天堂</a>| <a href="http://syntheticnets.com" target="_blank">性色av香蕉一区二区</a>| <a href="http://7755cc.com" target="_blank">亚洲无亚洲人成网站77777 </a>| <a href="http://cp3824.com" target="_blank">免费视频一区</a>| <a href="http://548710.com" target="_blank">久久精品综合网</a>| <a href="http://77xyc77.com" target="_blank">亚洲日韩欧美视频</a>| <a href="http://556995.com" target="_blank">精品不卡一区</a>| <a href="http://6055365.com" target="_blank">久久青青草原一区二区</a>| <a href="http://aqd072.com" target="_blank">中文亚洲欧美</a>| <a href="http://tareandshare.com" target="_blank">亚洲毛片播放</a>| <a href="http://smdzs.com" target="_blank">亚洲国产欧洲综合997久久</a>| <a href="http://www149aa.com" target="_blank">国产一区二区三区久久悠悠色av</a>| <a href="http://niceboybao.com" target="_blank">欧美午夜不卡视频</a>| <a href="http://69jp.com" target="_blank">欧美日韩午夜激情</a>| <a href="http://kittybob.com" target="_blank">欧美区高清在线</a>| <a href="http://qiruiwangluo.com" target="_blank">欧美大片18</a>| <a href="http://www-222kkk.com" target="_blank">免费成人黄色</a>| <a href="http://wawabt.com" target="_blank">久久久亚洲欧洲日产国码αv </a>| <a href="http://414794.com" target="_blank">亚洲欧美自拍偷拍</a>| <a href="http://maogo666.com" target="_blank">亚洲无玛一区</a>| <a href="http://aaa211.com" target="_blank">亚洲综合清纯丝袜自拍</a>| <a href="http://juegold.com" target="_blank">亚洲一区二区三区四区在线观看</a>| <a href="http://569658.com" target="_blank">一区二区三区欧美在线观看</a>| <a href="http://wwwbbb888999.com" target="_blank">9色精品在线</a>| <a href="http://bocfdj.com" target="_blank">一本久久综合亚洲鲁鲁</a>| <a href="http://833077.com" target="_blank">一区二区三区日韩精品视频</a>| <a href="http://78757a.com" target="_blank">一区二区欧美视频</a>| <a href="http://ccly2.com" target="_blank">亚洲综合日韩在线</a>| <a href="http://chunshanketang.com" target="_blank">午夜国产精品视频</a>| <a href="http://126film.com" target="_blank">欧美亚洲在线</a>| <a href="http://wansilv.com" target="_blank">久久视频在线视频</a>| <a href="http://388268.com" target="_blank">蜜臀久久99精品久久久画质超高清</a>| <a href="http://0070571.com" target="_blank">美日韩丰满少妇在线观看</a>| <a href="http://mm-777.com" target="_blank">久久综合狠狠</a>| <a href="http://8x1080x.com" target="_blank">欧美成人免费在线</a>| <a href="http://woshinannan741.com" target="_blank">欧美日韩精品免费观看</a>| <a href="http://www-69669.com" target="_blank">国产精品www</a>| <a href="http://e789a.com" target="_blank">国产三级精品三级</a>| <a href="http://seo8138.com" target="_blank">在线色欧美三级视频</a>| <a href="http://2220004.com" target="_blank">亚洲免费电影在线</a>| <a href="http://kgg93.com" target="_blank">亚洲综合色丁香婷婷六月图片</a>| <a href="http://xxxx90.com" target="_blank">午夜日韩在线观看</a>| <a href="http://www-442336.com" target="_blank">久色婷婷小香蕉久久</a>| <a href="http://ooo789.com" target="_blank">亚洲国产一区在线</a>| <a href="http://www49966.com" target="_blank">aa国产精品</a>| <a href="http://jav69me.com" target="_blank">欧美伊人影院</a>| <a href="http://zz-777.com" target="_blank">欧美精品v日韩精品v韩国精品v </a>| <a href="http://www-4997.com" target="_blank">国产乱码精品一区二区三区忘忧草</a>| <a href="http://www-74987.com" target="_blank">国产欧美在线看</a>| <a href="http://www0505nn.com" target="_blank">亚洲激情视频在线播放</a>| <a href="http://555134.com" target="_blank">亚洲一区国产精品</a>| <a href="http://62san.com" target="_blank">老司机成人网</a>| <a href="http://jizz16.com" target="_blank">99视频热这里只有精品免费</a>| <a href="http://pinyuanad.com" target="_blank">欧美亚洲一区二区在线</a>| <a href="http://www47343.com" target="_blank">欧美激情精品久久久久久久变态 </a>| <a href="http://www-69669.com" target="_blank">欧美在线观看视频</a>| <a href="http://17ccem.com" target="_blank">欧美国产成人精品</a>| <a href="http://609005.com" target="_blank">亚洲视频一区二区在线观看</a>| <a href="http://961318.com" target="_blank">久久国产主播精品</a>| <a href="http://as777as.com" target="_blank">欧美日韩免费观看一区=区三区</a>| <a href="http://058888e.com" target="_blank">国产午夜精品全部视频播放</a>| <a href="http://wwwmiya728.com" target="_blank">亚洲精品国产系列</a>| <a href="http://www47067.com" target="_blank">久久国产日韩</a>| <a href="http://china-cvct.com" target="_blank">亚洲精品在线观看免费</a>| <a href="http://376524.com" target="_blank">久久精品首页</a>| <a href="http://7749137.com" target="_blank">欧美手机在线视频</a>| <a href="http://budanbao.com" target="_blank">亚洲国产cao</a>| <a href="http://yjizzdizhigmail.com" target="_blank">欧美亚洲视频在线看网址</a>| <a href="http://388123cc.com" target="_blank">亚洲国产成人91精品</a>| <a href="http://436212.com" target="_blank">欧美一区二视频在线免费观看</a>| <a href="http://gx2020.com" target="_blank">欧美日韩国产综合视频在线观看</a>| <a href="http://airsixth.com" target="_blank">好吊日精品视频</a>| <a href="http://833077.com" target="_blank">亚洲欧美日韩在线不卡</a>| <a href="http://qdzhudai.com" target="_blank">亚洲国产欧美一区</a>| <a href="http://hhhtalk.com" target="_blank">久久久久久一区二区</a>| <a href="http://zooxoft.com" target="_blank">亚洲中午字幕</a>| <a href="http://nztd20.com" target="_blank">欧美—级a级欧美特级ar全黄</a>| <a href="http://j88866.com" target="_blank">韩国欧美国产1区</a>| <a href="http://fengxinye.com" target="_blank">亚洲欧美在线免费观看</a>| <a href="http://ll992.com" target="_blank">亚洲人成免费</a>| <a href="http://3737520.com" target="_blank">麻豆精品一区二区综合av</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>