Hey,

I'm trying to implement a real-time rendered scope for my mod. I've used
some modified code from Rear-view mirror tutorial from valve developer,
but I can't get it to work. The render texture is compiled well using
tutrorial from http://www.fpsbanana.com/tuts/208 and it shows as black
ingame, but no scope is rendered on it. The code I use:

rendertexture.cpp:

//=============================================================================
// Scope Texture
//=============================================================================
static CTextureReference s_pScopeTexture;
ITexture *GetScopeTexture( void )
{
        if ( !s_pScopeTexture )
        {
                if( materials->FindTexture( "_rt_Scope", 
TEXTURE_GROUP_RENDER_TARGET ) )
                {
                        s_pScopeTexture.Init( materials->FindTexture( 
"_rt_Scope",
TEXTURE_GROUP_RENDER_TARGET ) );
                        if( IsErrorTexture( s_pScopeTexture ) )
                                return NULL;
                        Assert( !IsErrorTexture( s_pScopeTexture ) );
                        AddReleaseFunc();
                }
        }

        return s_pScopeTexture;
}

view.cpp:

void CViewRender::DrawScope( const CViewSetup &viewSet )
{
        C_BasePlayer *localPlayer = C_BasePlayer::GetLocalPlayer();

        if(!localPlayer)
                return;

        if( !localPlayer->GetActiveWeapon() )
                return;

        //Copy our current View.
        CViewSetup mirrorView = viewSet;

        //Get our camera render target.
        ITexture *pRenderTarget = GetScopeTexture();

        if( pRenderTarget == NULL )
                return;

        //Fog data, enables for this view, and reverts back to default.
        fogparams_t oldFogParams;
        float flOldZFar = 0.0f;
        bool fogEnabled = true;
        if ( fogEnabled )
        {
                oldFogParams = localPlayer->m_Local.m_fog;
                flOldZFar = mirrorView.zFar;
                localPlayer->m_Local.m_fog.enable = true;
                localPlayer->m_Local.m_fog.start = 2048;
                localPlayer->m_Local.m_fog.end = 4096;
                localPlayer->m_Local.m_fog.farz = 4096;
                localPlayer->m_Local.m_fog.colorPrimary.SetR( 0 );
                localPlayer->m_Local.m_fog.colorPrimary.SetG( 0 );
                localPlayer->m_Local.m_fog.colorPrimary.SetB( 0 );
                mirrorView.zFar = 4096;
        }

        //Our view information, Origin, View Direction, window size
        //      location on material, and visual ratios.
        mirrorView.width = 256;
        mirrorView.height = 256;
        mirrorView.x = 0;
        mirrorView.y = 0;
        mirrorView.origin = localPlayer->GetAbsOrigin() + Vector( 0, 0, 50);
        mirrorView.angles = localPlayer->GetRenderAngles();
        //mirrorView.angles.x += 30;
        //mirrorView.angles.y = AngleNormalize( mirrorView.angles.y + 180 );
        mirrorView.fov = 40/*localPlayer->GetActiveWeapon()->GetZoomFov()*/;
        mirrorView.m_bOrtho = false;
        mirrorView.m_flAspectRatio = 1.0f;

        //Set the view up and output the scene to our RenderTarget (Scope
Material).
        render->Push3DView( mirrorView, VIEW_CLEAR_DEPTH | VIEW_CLEAR_COLOR,
true, pRenderTarget, m_Frustum );
        ViewDrawScene( true, true, mirrorView, 0, VIEW_MAIN );
        render->PopView( m_Frustum );

        // Reset the world fog parameters.
        if ( fogEnabled )
        {
                localPlayer->m_Local.m_fog = oldFogParams;
                mirrorView.zFar = flOldZFar;
        }
}

And this in RenderViewEx:

        if(g_pMaterialSystemHardwareConfig->GetDXSupportLevel() >= 70 )
        {
                DrawScope( view );
        }

_______________________________________________
To unsubscribe, edit your list preferences, or view the list archives, please 
visit:
http://list.valvesoftware.com/mailman/listinfo/hlcoders

Reply via email to