当前位置: 首页>>代码示例>>C++>>正文


C++ CStudioHdr::hull_min方法代码示例

本文整理汇总了C++中CStudioHdr::hull_min方法的典型用法代码示例。如果您正苦于以下问题:C++ CStudioHdr::hull_min方法的具体用法?C++ CStudioHdr::hull_min怎么用?C++ CStudioHdr::hull_min使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在CStudioHdr的用法示例。


在下文中一共展示了CStudioHdr::hull_min方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: CenterOnFace

void ControlPanel::CenterOnFace( void )
{
    if ( !models->GetActiveStudioModel() )
        return;

    StudioModel *mdl = models->GetActiveStudioModel();
    if ( !mdl )
        return;

    CStudioHdr *hdr = mdl->GetStudioHdr();
    if ( !hdr )
        return;

    setSpeed( 1.0f );

    int oldSeq = models->GetActiveStudioModel()->GetSequence();

    int seq = models->GetActiveStudioModel()->LookupSequence( "idle_suble" );
    if ( seq == -1 )
        seq = 0;

    if ( seq != oldSeq )
    {
        Con_Printf( "Centering changed model sequence # to %d\n", seq );
    }

    setSequence( seq );
    initPoseParameters( );

    mdl->m_angles.Init();
    mdl->m_origin.Init();

    Vector size;
    VectorSubtract( hdr->hull_max(), hdr->hull_min(), size );

    float eyeheight = hdr->hull_min().z + 0.9 * size.z;

    if ( hdr->GetNumAttachments() > 0 )
    {
        for (int i = 0; i < hdr->GetNumAttachments(); i++)
        {
            const mstudioattachment_t &attachment = hdr->pAttachment( i );
            int iBone = hdr->GetAttachmentBone( i );

            if ( Q_stricmp( attachment.pszName(), "eyes" ) )
                continue;

            mstudiobone_t *bone = hdr->pBone( iBone );
            if ( !bone )
                continue;

            matrix3x4_t boneToPose;
            MatrixInvert( bone->poseToBone, boneToPose );

            matrix3x4_t attachmentPoseToLocal;
            ConcatTransforms( boneToPose, attachment.local, attachmentPoseToLocal );

            Vector localSpaceEyePosition;
            VectorITransform( vec3_origin, attachmentPoseToLocal, localSpaceEyePosition );

            // Not sure why this must be negative?
            eyeheight = -localSpaceEyePosition.z + hdr->hull_min().z;
            break;
        }
    }

    KeyValues *seqKeyValues = new KeyValues("");
    if ( seqKeyValues->LoadFromBuffer( mdl->GetFileName( ), mdl->GetKeyValueText( seq ) ) )
    {
        // Do we have a build point section?
        KeyValues *pkvAllFaceposer = seqKeyValues->FindKey("faceposer");
        if ( pkvAllFaceposer )
        {
            float flEyeheight = pkvAllFaceposer->GetFloat( "eye_height", -9999.0f );
            if ( flEyeheight != -9999.0f )
            {
                eyeheight = flEyeheight;
            }
        }
    }

    seqKeyValues->deleteThis();

    mdl->m_origin.x = size.z * .65f;
    mdl->m_origin.z += eyeheight;

    CUtlVector< StudioModel * > modellist;

    modellist.AddToTail( models->GetActiveStudioModel() );

    int i;
    if ( models->CountVisibleModels() > 0 )
    {
        modellist.RemoveAll();
        for ( i = 0; i < models->Count(); i++ )
        {
            if ( models->IsModelShownIn3DView( i ) )
            {
                modellist.AddToTail( models->GetStudioModel( i ) );
            }
//.........这里部分代码省略.........
开发者ID:DeadZoneLuna,项目名称:SourceEngine2007,代码行数:101,代码来源:controlpanel.cpp

示例2: FindPoseCycle

void IFaceposerModels::CFacePoserModel::CreateNewBitmap( char const *pchBitmapFilename, int sequence, int nSnapShotSize, bool bZoomInOnFace, CExpression *pExpression, mxbitmapdata_t *bitmap )
{
    MatSysWindow *pWnd = g_pMatSysWindow;
    if ( !pWnd ) 
        return;

    StudioModel *model = m_pModel;
    if ( !model )
        return;

    CStudioHdr *hdr = model->GetStudioHdr();
    if ( !hdr )
        return;
    if ( sequence < 0 || sequence >= hdr->GetNumSeq() )
        return;

    mstudioseqdesc_t &seqdesc = hdr->pSeqdesc( sequence );

    Con_ColorPrintf( FILE_COLOR, "Creating bitmap %s for sequence '%s'\n", pchBitmapFilename, seqdesc.pszLabel() );

    model->ClearOverlaysSequences();
    int iLayer = model->GetNewAnimationLayer();
    model->SetOverlaySequence( iLayer, sequence, 1.0 );
    model->SetOverlayRate( iLayer, FindPoseCycle( model, sequence ), 0.0 );

    for (int i = 0; i < hdr->GetNumPoseParameters(); i++)
    {
        model->SetPoseParameter( i, 0.0 );
    }

    float flexValues[ GLOBAL_STUDIO_FLEX_CONTROL_COUNT ] = { 0 };

    if ( pExpression )
    {
        float *settings = pExpression->GetSettings();
        float *weights = pExpression->GetWeights();

        // Save existing settings from model
        for ( LocalFlexController_t i = LocalFlexController_t(0); i < hdr->numflexcontrollers(); ++i )
        {
            int j = hdr->pFlexcontroller( i )->localToGlobal;
            if ( j == -1 )
                continue;
            flexValues[ i ] = model->GetFlexController( i );
            // Set Value from passed in settings
            model->SetFlexController( i, settings[ j ] * weights[ j ] );
        }
    }

    model->ClearLookTargets( );

    QAngle oldrot, oldLight;
    Vector oldtrans;
    
    VectorCopy( model->m_angles, oldrot );
    VectorCopy( model->m_origin, oldtrans );
    VectorCopy( g_viewerSettings.lightrot, oldLight );

    model->m_angles.Init();
    model->m_origin.Init();
    g_viewerSettings.lightrot.Init();

    g_viewerSettings.lightrot.y = -180;

    bool bSaveGround = g_viewerSettings.showGround;
    g_viewerSettings.showGround = false;

    if ( bZoomInOnFace )
    {
        Vector size;
        VectorSubtract( hdr->hull_max(), hdr->hull_min(), size );

        float eyeheight = hdr->hull_min().z + 0.9 * size.z;
        //	float width = ( size.x + size.y ) / 2.0f;

        model->m_origin.x = size.z * .6f;

        if ( hdr->GetNumAttachments() > 0 )
        {
            for (int i = 0; i < hdr->GetNumAttachments(); i++)
            {
                const mstudioattachment_t &attachment = hdr->pAttachment( i );
                int iBone = hdr->GetAttachmentBone( i );

                if ( Q_stricmp( attachment.pszName(), "eyes" ) )
                    continue;

                mstudiobone_t *bone = hdr->pBone( iBone );
                if ( !bone )
                    continue;

                matrix3x4_t boneToPose;
                MatrixInvert( bone->poseToBone, boneToPose );

                matrix3x4_t attachmentPoseToLocal;
                ConcatTransforms( boneToPose, attachment.local, attachmentPoseToLocal );

                Vector localSpaceEyePosition;
                VectorITransform( vec3_origin, attachmentPoseToLocal, localSpaceEyePosition );

//.........这里部分代码省略.........
开发者ID:DeadZoneLuna,项目名称:SourceEngine2007,代码行数:101,代码来源:faceposer_models.cpp


注:本文中的CStudioHdr::hull_min方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。