浏览代码

Consider zoom when culling billboards.

screenScale represents the current zoom factor, but may need some
revision because I'm not sure if what it's doing is technically correct.
It is used to multiply the culling distance for cells, as well as the
fading distance.
Daniel Buckmaster 13 年之前
父节点
当前提交
74bd05030d
共有 1 个文件被更改,包括 4 次插入2 次删除
  1. 4 2
      Engine/source/T3D/fx/groundCover.cpp

+ 4 - 2
Engine/source/T3D/fx/groundCover.cpp

@@ -1550,8 +1550,10 @@ void GroundCover::prepRenderImage( SceneRenderState *state )
    {
    {
       PROFILE_SCOPE( GroundCover_RenderBillboards );
       PROFILE_SCOPE( GroundCover_RenderBillboards );
 
 
+      F32 screenScale = state->getWorldToScreenScale().y / state->getViewport().extent.y;
+
       // Set the far distance for billboards.
       // Set the far distance for billboards.
-      mCuller.setFarDist( mRadius );   
+      mCuller.setFarDist( mRadius * screenScale );
 
 
       F32 cullScale = 1.0f;
       F32 cullScale = 1.0f;
       if ( state->isReflectPass() )
       if ( state->isReflectPass() )
@@ -1560,7 +1562,7 @@ void GroundCover::prepRenderImage( SceneRenderState *state )
       // Setup our shader const data.
       // Setup our shader const data.
       // Must be done prior to submitting our render instance.
       // Must be done prior to submitting our render instance.
 
 
-      mShaderConstData.fadeInfo.set( mFadeRadius * cullScale, mRadius * cullScale );      
+      mShaderConstData.fadeInfo.set( mFadeRadius * cullScale * screenScale, mRadius * cullScale * screenScale );    
 
 
       const F32 simTime = Sim::getCurrentTime() * 0.001f;
       const F32 simTime = Sim::getCurrentTime() * 0.001f;