Exemple #1
0
        public void SetExplicitLodState(MyLodStrategyInfo strategyInfo, MyInstanceLodState state, float stateData)
        {
            m_explicitState     = state;
            m_explicitStateData = stateData;
            int maxLod = 0;

            if (!strategyInfo.IsEmpty)
            {
                maxLod = strategyInfo.GetLodsCount() - 1;
            }
            UpdateCachedResults(maxLod, m_allPassIds);
        }
Exemple #2
0
        public void ResolveExplicit(MyLodStrategyInfo strategyInfo, ulong currentFrameId, int lodNum, List <int> activePassIds)
        {
            if (strategyInfo.IsEmpty)
            {
                return;
            }

            if (currentFrameId == m_updatedAtFrameId)
            {
                return;
            }

            int maxLod = strategyInfo.GetLodsCount() - 1;

            m_currentLod    = Math.Min(lodNum, maxLod);
            m_transitionLod = -1;
            m_transition    = 0;

            UpdateCachedResults(maxLod, activePassIds);
        }
Exemple #3
0
        public void SkippingResolve(MyLodStrategyInfo strategyInfo, ulong currentFrameId, Vector3D cameraPos, Vector3D instancePos, List <int> activePassIds, MyLodStrategyPreprocessor preprocessor)
        {
            if (strategyInfo.IsEmpty)
            {
                return;
            }

            float distance = (float)(cameraPos - instancePos).Length();

            distance *= preprocessor.DistanceMult;
            distance += m_objectDistanceAdd;
            distance *= m_objectDistanceMult;

            m_currentLod    = GetTheBestLod(strategyInfo, distance);
            m_transitionLod = -1;
            m_transition    = 0;

            m_updatedAtFrameId = currentFrameId;
            int maxLod = strategyInfo.GetLodsCount() - 1;

            UpdateCachedResults(maxLod, activePassIds);
        }
Exemple #4
0
        public void SmoothResolve(MyLodStrategyInfo strategyInfo, ulong currentFrameId, float timeDeltaSeconds, Vector3D cameraPos, Vector3D instancePos, List <int> activePassIds, MyLodStrategyPreprocessor preprocessor)
        {
            if (strategyInfo.IsEmpty)
            {
                return;
            }

            if (currentFrameId == m_updatedAtFrameId)
            {
                return;
            }

            float distance = (float)(cameraPos - instancePos).Length();

            distance *= preprocessor.DistanceMult;
            distance += m_objectDistanceAdd;
            distance *= m_objectDistanceMult;

            if (MISSING_FRAMES_TO_JUMP < currentFrameId - m_updatedAtFrameId) // the lod was not updated for a long time, we can jump to the lod
            {
                m_currentLod    = GetTheBestLod(strategyInfo, distance);
                m_transitionLod = -1;
                m_transition    = 0;
            }
            else
            {
                SmoothTransition(strategyInfo, timeDeltaSeconds, distance, ref m_currentLod, ref m_transitionLod, ref m_transition);
            }

            m_updatedAtFrameId = currentFrameId;
            int maxLod = strategyInfo.GetLodsCount() - 1;

            /*m_currentLod = strategyInfo.GetLodsCount() - 1;
             * m_transition = 0;*/

            UpdateCachedResults(maxLod, activePassIds);
        }