2017-01-22 11 views
1

많은 상용구 예제는 CommonRigidBodyBase에서 상속됩니다. 객체는 btPoint2PointConstraint에 따라 선택됩니다. SimpleBox 예제를 분석했습니다.글 머리 기호 물리 - 따기 후의 개체 안정화

떨어지는 물체를 선택하면 물기가있는 지점을 중심으로 회전하지만 시간이 지남에 따라 회전이 감소합니다. 얼마 후, 고른 물건이 안정되어야합니다. 이상 (이전보다 더 큰)

btBoxShape* colShape = createBoxShape(btVector3(2,2,2)); 

내가 떨어지는 선택 개체 : 나는 (2,2,2)에 충돌 모양 양식 (1,1,1) 변경 SimpleBox 예에서

또는 지상의 높이가 높을수록 픽 포인트 주변에서 훨씬 더 오래 회전합니다. 왜 ?

따기 후에 객체를 안정화하는 데 필요한 시간을 어떻게 제어 할 수 있을지 궁금합니다. 중력이 고정되어 있다고 가정 해 봅시다 (9.8). 나는 한 가지 생각 만 갖고 있습니다 : 물체에 더 큰 질량을 할당하십시오. 다른 매개 변수가 있습니까?

답변

1

btPoint2PointConstraint 대신에, 모든 각 운동이 억제 된 btGeneric6DofConstraint을 사용합니다.

m_pickedRigidBody->setActivationState(DISABLE_DEACTIVATION); 

btTransform pivot; 
pivot.setIdentity(); 
btVector3 localPivot = m_pickedRigidBody->getCenterOfMassTransform().inverse() * rayCast.point; 
pivot.setOrigin(localPivot); 

btGeneric6DofConstraint* DOF6 = new btGeneric6DofConstraint(*m_pickedRigidBody, pivot, true); 

bool bLimitAngularMotion = true; 
if (bLimitAngularMotion) { 
    DOF6->setAngularLowerLimit(btVector3(0, 0, 0)); 
    DOF6->setAngularUpperLimit(btVector3(0, 0, 0)); 
} 

m_dynamicWorld->addConstraint(DOF6, true); 

m_pickedConstraint = DOF6; 

float cfm = 0.5f; 
float erp = 0.5f; 

for (int i = 0; i < 6; i++) { 
    DOF6->setParam(BT_CONSTRAINT_STOP_CFM, cfm, i); 
    DOF6->setParam(BT_CONSTRAINT_STOP_ERP, erp, i); 
} 
+0

이유 부품에 답변 할 수 있습니까? 나도 알고 싶다. – javaLover

+0

point to point constraint는 실제로 두 개의 서로 다른 참조 프레임에있는 두 점을 최대한 가깝게 유지하려고 시도합니다. 따라서 선택한 객체는 선택 점쪽으로 당겨 지지만 회전은 영향을받지 않습니다. 그래서 위의 솔루션은 각 운동 억제를 제안합니다. 무언가가 선택되면 각 속도를 0으로 설정하여 수동으로 수행 할 수도 있습니다. 그것은 당신이 손으로 그것을 "움켜 잡을 때"기대하는 것보다 더 낫습니다. – Ben