티스토리 뷰

결론은 항상 정해져 있다.

망할

Reference 모델의 경우 잘 정돈되어있다. 예외도 없고

그에 반해 유저 모델의 경우 항상 생각했던 범위를 뛰어넘는다

그 때문에 적당히 테스트를 해야한다

현재 발견된 문제는 3개다.

모델의 가슴이 뚤리는 현상.

물리 값이 발산하는 현상.

뼈 값이 음수가 나오는 현상.

Debug 모드시엔 nad 값이 나오면서 assert 가 걸린다.

그럼 이 값이 왜 나오는지 봐야하는데,

m_linearVelocity = {mVec128={m128_f32=0x000001eb7f39d0c0 {-6.81898034e+36, -8.55016639e+36, 7.02308856e+36, 0.000000000} ...} ...}

또 저 값이 어디서 결정되는지 바야하는데

저 값은

        m_tmpSolverBodyPool[i].m_originalBody->setLinearVelocity(
            m_tmpSolverBodyPool[i].m_linearVelocity+
            m_tmpSolverBodyPool[i].m_externalForceImpulse);

또, 저값은

m_deltaLinearVelocity

로 부터 나온 값인데, step impulse solver 로 부터 나오고 있었다.

그럼 400개의 pool 을 다 비교해야하나?

bullet 이 강체끼리 겹치게 놓으면 밀어내긴해도 이 정도로 발산한 적은 없었다.

이유가 멀까?

버전을 2.75 까지 낮추니 먼가 약간 괜찮은거 같으면서도 머리는 날라갔다

999999 이건 머냐

그리고 강체의 Friction 은 또 0 이네

그러고나니 원작자의 코멘트가 기억이 났다.

물리 설정 잘안되서 힘들었다

먼가 원하는 느낌이 안나니 거대 값을 박은 것이다.

friction 을 강제로 주던가

아님

   for (int i = 0; i < 3; i++)
    {
        const btScalar& value = m_AngularStiffness[i];
        if (!btFuzzyZero( value ))
        {
            int index = i + 3;
            pConstraint->enableSpring( index, true );
            pConstraint->setStiffness( index, value );
            pConstraint->setDamping( index, kDefaultDamping );
        }
    }

kDefaultDamping은 99999 를 감당할 만큼의 적은 값을 두니 정상 처럼 보이기 시작했다

그러고 나니 특정 상황에서 머리카락이 엿가락 처럼 늘어지기 시작했는데

joint 의 limit 은 -0.01 ~ 0.01 로 거의 딱 붙은 상태였다.

값은 제대로 올라가고 있고

그러고 나니 진짜 문제가 보였다.

    pConstraint->setLinearUpperLimit( m_LinearLowerLimit );
    pConstraint->setLinearLowerLimit( m_LinearUpperLimit );

reference 모델은 이상황에도 정상 작동한건 물리 값이 안정되서 그런듯

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크