본문 바로가기
Bullet Physics

Basic Data Types and Math Library

by ses jeon 2020. 12. 2.

The basic data types, memory management and containers are located in Bullet/src/LinearMath.

기본 데이터 유형, 메모리 관리 및 컨테이너는 Bullet / src / LinearMath에 있습니다.

 

   • btScalar

A btScalar is a posh word for a floating point number. In order to allow to compile the library in single floating point precision and double precision, we use the btScalar data type throughout the library, By default, btScalar is a typedef to float. It can be double by defining BT_USE_DOUBLE_PRECISION either in your build system, or at the top of the file Bullet/src/LinearMath/btScalar.h.

btScalar는 부동 소수점 숫자에 대한 고급 단어입니다. 단일 부동 소수점 정밀도와 배정 밀도로 라이브러리를 컴파일 할 수 있도록 라이브러리 전체에서 btScalar 데이터 유형을 사용합니다. 기본적으로 btScalar는 부동 소수점에 대한 typedef입니다. 빌드 시스템에서 또는 Bullet / src / LinearMath / btScalar.h 파일 상단에서 BT_USE_DOUBLE_PRECISION을 정의하여 두 배가 될 수 있습니다.

 

   btVector3

3D positions and vectors can be represented using btVector3. btVector3 has 3 scalar x,y,z components. It has, however, a 4th unused w component for alignment and SIMD compatibility reasons. Many operations can be performed on a btVector3, such as add subtract and taking the length of a vector.

3D 위치와 벡터는 btVector3를 사용하여 표현할 수 있습니다. btVector3에는 3 개의 스칼라 x, y, z 구성 요소가 있습니다. 그러나 정렬 및 SIMD 호환성을 위해 사용되지 않은 4 번째 w 구성 요소가 있습니다. btVector3에서 더하기 빼기 및 벡터 길이 가져 오기와 같은 많은 작업을 수행 할 수 있습니다.

 

   btQuaternion and btMatrix3x3

3D orientations and rotations can be represented using either btQuaternion or btMatrix3x3.

3D 방향 및 회전은 btQuaternion 또는 btMatrix3x3을 사용하여 표현할 수 있습니다.

 

   btTransform

btTransform is a combination of a position and an orientation. It can be used to transform points and vectors from one coordinate space into the other. No scaling or shearing is allowed. 

btTransform은 위치와 방향의 조합입니다. 한 좌표 공간에서 다른 좌표 공간으로 점과 벡터를 변환하는 데 사용할 수 있습니다. 스케일링이나 전단은 허용되지 않습니다.
Bullet uses a right-handed coordinate system:

 

btTransformUtil, btAabbUtil provide common utility functions for transforms and AABBs.

btTransformUtil, btAabbUtil은 변환 및 AABB에 대한 공통 유틸리티 기능을 제공합니다.

 

Memory Management, Alignment, Containers

Often it is important that data is 16-byte aligned, for example when using SIMD or DMA transfers on Cell SPU. Bullet provides default memory allocators that handle alignment, and developers can provide their own memory allocator. All memory allocations in Bullet use:

예를 들어 셀 SPU에서 SIMD 또는 DMA 전송을 사용할 때 데이터를 16 바이트로 정렬하는 것이 중요합니다. Bullet은 정렬을 처리하는 기본 메모리 할당자를 제공하며 개발자는 자체 메모리 할당자를 제공 할 수 있습니다. Bullet의 모든 메모리 할당은 다음을 사용합니다.

 

   • btAlignedAlloc, which allows to specify size and alignment 

   • btAlignedFree, free the memory allocated by btAlignedAlloc. 

 

To override the default memory allocator, you can choose between: 

   • btAlignedAllocSetCustom is used when your custom allocator doesn’t support alignment 

   • btAlignedAllocSetCustomAligned can be used to set your custom aligned memory allocator.

 

To assure that a structure or class will be automatically aligned, you can use this macro: 

   • ATTRIBUTE_ALIGNED16(type) variablename creates a 16-byte aligned variable

 

Often it is necessary to maintain an array of objects. Originally the Bullet library used a STL std::vector data structure for arrays, but for portability and compatibility reasons we switched to our own array class. 

종종 객체 배열을 유지해야합니다. 원래 Bullet 라이브러리는 배열에 STL std :: vector 데이터 구조를 사용했지만 이식성과 호환성을 위해 자체 배열 클래스로 전환했습니다.

   • btAlignedObjectArray closely resembles std::vector. It uses the aligned allocator to guarantee alignment. It has    methods to sort the array using quick sort or heap sort.

   • btAlignedObjectArray는 std :: vector와 매우 유사합니다. 정렬을 보장하기 위해 정렬 된 할당자를 사용합니다. 빠른 정렬 또는 힙 정렬을 사용하여 배열을 정렬하는 방법이 있습니다.

To enable Microsoft Visual Studio Debugger to visualize btAlignedObjectArray and btVector3, follow the instructions in Bullet/msvc/autoexp_ext.txt

Microsoft Visual Studio 디버거가 btAlignedObjectArray 및 btVector3을 시각화 할 수 있도록하려면 Bullet / msvc / autoexp_ext.txt의 지침을 따르십시오.

Timing and Performance Profiling

In order to locate bottlenecks in performance, Bullet uses macros for hierarchical performance measurement. 

   • btClock measures time using microsecond accuracy. 

   • BT_PROFILE(section_name) marks the start of a profiling section.

   • CProfileManager::dumpAll(); dumps a hierarchical performance output in the console. Call this after stepping the simulation.

   • CProfileIterator is a class that lets you iterate through the profiling tree.

Note that the profiler doesn’t use the memory allocator, so you might want to disable it when checking for memory leaks, or when creating a final release build of your software.

The profiling feature can be switched off by defining #define BT_NO_PROFILE 1 in Bullet/src/LinearMath/btQuickProf.h

프로파일 러는 메모리 할당자를 사용하지 않으므로 메모리 누수를 확인하거나 소프트웨어의 최종 릴리스 빌드를 만들 때 비활성화 할 수 있습니다. Bullet / src / LinearMath / btQuickProf.h에서 #define BT_NO_PROFILE 1을 정의하여 프로파일 링 기능을 끌 수 있습니다.

 

Debug Drawing

Visual debugging the simulation data structures can be helpful. For example, this allows you to verify that the physics simulation data matches the graphics data. Also scaling problems, bad constraint frames and limits show up. 

시뮬레이션 데이터 구조를 시각적으로 디버깅하는 것이 도움이 될 수 있습니다. 예를 들어, 물리 시뮬레이션 데이터가 그래픽 데이터와 일치하는지 확인할 수 있습니다. 또한 스케일링 문제, 잘못된 제약 프레임 및 한계가 나타납니다.

btIDebugDraw is the interface class used for debug drawing. Derive your own class and implement the virtual ‘drawLine’ and other methods. 

Assign your custom debug drawer to the dynamics world using the setDebugDrawer method. 

Then you can choose to draw specific debugging features by setting the mode of the debug drawer:

btIDebugDraw는 디버그 드로잉에 사용되는 인터페이스 클래스입니다. 자신 만의 클래스를 만들고 가상 'drawLine'및 기타 메서드를 구현합니다. setDebugDrawer 메서드를 사용하여 사용자 정의 디버그 드로어를 역학 세계에 할당합니다. 그런 다음 디버그 드로어의 모드를 설정하여 특정 디버깅 기능을 그리도록 선택할 수 있습니다.

   dynamicsWorld->getDebugDrawer()->setDebugMode(debugMode);

Every frame you can call the debug drawing by calling the

   world-> debugDrawWorld();

Here are some debug modes

   •  btIDebugDraw::DBG_DrawWireframe

   •  btIDebugDraw::DBG_DrawAabb

   •  btIDebugDraw::DBG_DrawConstraints

   •  btIDebugDraw::DBG_DrawConstraintLimits

 

By default all objects are visualized for a given debug mode, and when using many objects this can clutter the display. You can disable debug drawing for specific objects by using

기본적으로 모든 객체는 주어진 디버그 모드에 대해 시각화되며 많은 객체를 사용할 때 디스플레이를 복잡하게 만들 수 있습니다. 다음을 사용하여 특정 개체에 대한 디버그 드로잉을 비활성화 할 수 있습니다.

   int f = objects->getCollisionFlags();

   ob->setCollisionFlags(f|btCollisionObject::CF_DISABLE_VISUALIZE_OBJECT);

 

 

 

'Bullet Physics' 카테고리의 다른 글

Collision Filtering (selective collisions)  (0) 2020.12.02
Bullet Collision Detection  (0) 2020.12.02
Rigid Body Physics Pipeline  (0) 2020.12.02
Library Overview  (0) 2020.12.02
Introduction  (0) 2020.12.02

댓글