본문 바로가기

PhysX15

8. PhysX - RigidBody Dynamics - 2 Sleeping - 물체가 일정 기간동안 움직이지 않으면, 미래에도 계속 그 상태를 유지할 것이라고 가정하고, 시뮬레이션에서 제외시켜서 메모리를 아낄 수 있다. - 이 상태를 잠자는 상태(Sleeping)이라고 하며, 아래 코드에서 PxRigidDynamic 객체가 잠자는 상태인지 확인할 수 있다. bool PxRigidDynamic::isSleeping() const; - 간혹 Actor가 잠들거나 깨어날 때 보내는 이벤트를 수신하는 게 편리할 수 있음 - 이벤트를 받으려면 Actor에 아래 플래그가 설정되어 있어야 한다. void PxSimulationEventCallback::onWake(PxActor** actors, PxU32 count) = 0; void PxSimulationEventCall.. 2023. 3. 4.
7. PhysX - RigidBody Dynamics - 1 속도 (Velocity) - PhysX 시뮬레이션에서, 물체의 운동은 선속도, 각속도로 분리된다. - 물체의 운동은 중력, 적용된 힘과 토크, 충돌 등 다양한 제약 조건으로 발생한다. 선속도를 가져오는 메서드 PxVec3 PxRigidBody::getLinearVelocity(); 각속도를 가져오는 메서드 PxVec3 PxRigidBody::getAngularVelocity(); 그리고 선속도와 각속도를 아래와 같이 설정할 수 있다. void PxRigidBody::setLinearVelocity(const PxVec3& linVel, bool autowake); void PxRigidBody::setAngularVelocity(const PxVec3& angVel, bool autowake); 질량 속.. 2023. 3. 4.
6. PhysX - RigidBody 충돌 - 2 Broad-phase 알고리즘 PhysX는 다음과 같은 여러 개의 Broad-phase 알고리즘을 지원합니다. - sweep-and-prune (SAP) - multi box pruning (MBP) - automatic box pruning (ABP) SAP - SAP는 객체의 많은 부분이 움직이지 않을 때 훌륭한 성능을 발휘한다. - 하지만 모든 객체가 움직이거나 많은 수의 객체가 Broad-phase에 추가되거나 제거될 때 성능이 저하된다. MBP - 모든 객체가 움직일 때 또는 많은 수의 객체를 삽입할 때 SAP와 같은 성능 문제가 발생하지 않는다. - 하지만 많은 수의 객체가 움직이지 않을 때 성능은 SAP보다 떨어질 수 있다. (이 알고리즘을 수행하기 위해 충돌을 계산하는데 사용하는 공간을 정.. 2023. 3. 3.
5. PhysX - RigidBody 충돌 - 1 강체(RigidBody)의 모양(Shape)는 물체가 공간에서 차지하는 범위와, 충돌 특성을 설명한다. 모양(Shape)는 세 가지 목적으로 사용된다. 1. 교차 검사(Intersection test) - 물체 간 접촉 기능을 결정 2. 장면 쿼리 테스트 (Scene query test) - 예시로는 레이캐스트(raycast) 3. 트리거 볼륨 정의 - 다른 모양들이 교차할 때 알림 생성 - 각각의 Shape는 참조 카운팅되며, PxGeometry 객체와 PxMaterial의 참조를 포함한다. - 이들은 생성 시 모두 지정되어야 함 *아래 코드는 구체 모양과 특정 재질을 가진 모양(Shape)를 생성하는 방법을 보여준다. PxShape* shape = physics.createShape(PxSphereG.. 2023. 3. 3.