Date: 06/16/21 15:33:31
1. Queries
1. 쿼리
Have you ever stood in one position and looked around? You see things near to you and far from you.
한 자리에 서서 주위를 둘러 본 적이 있습니까? 당신은 가까이 있고 멀리있는 것들을 볼 수 있습니다.
You can gauge how close things are to you.
사물이 얼마나 가까이 있는지 측정 할 수 있습니다.
Physics engines provide this same type of spatial query.
물리 엔진은 이와 동일한 유형의 공간 쿼리를 제공합니다.
PhysicsWorld objects currently support point queries, ray casts and rect queries.
물리 세계 객체는 현재 포인트 쿼리, 레이 캐스트 및 rect 쿼리를 지원합니다.
2. Point Queries
2. 포인트 쿼리
When you touch something, say your desk, you can think of this as a point query.
무언가를 만질 때, 책상이라고 말하면 이것을 포인트 쿼리로 생각할 수 있습니다.
Point queries allow you to check if there are shapes within a certain distance of a point.
포인트 쿼리를 사용하면 포인트의 특정 거리 내에 모양이 있는지 확인할 수 있습니다.
Point queries are useful for things like mouse picking and simple sensors.
포인트 쿼리는 마우스 선택 및 간단한 센서와 같은 작업에 유용합니다.
You can also find the closest point on a shape to a given point or find the closest shape to a point.
도형에서 주어진 지점에 가장 가까운 지점을 찾거나 지점에 가장 가까운 도형을 찾을 수도 있습니다.
3. Ray Cast
3. 레이 캐스트
If you are looking around, some object within your sight is bound to catch your attention.
주위를 둘러 보면 눈에 보이는 물체가 주의를 끌게됩니다.
You have essentially performed a ray cast here.
본질적으로 여기서 레이 캐스트를 수행했습니다.
You scanned until you found something interesting to make you stop scanning.
스캔을 중단 할 흥미로운 것을 발견 할 때까지 스캔했습니다.
You can ray cast at a shape to get the point of first intersection.
첫 번째 교차점을 얻기 위해 모양에 레이 캐스팅 할 수 있습니다.
For example:
void tick(float dt)
{
Vec2 d(300 * cosf(_angle), 300 * sinf(_angle));
Vec2 point2 = s_centre + d;
if (_drawNode)
{
removeChild(_drawNode);
}
_drawNode = DrawNode::create();
Vec2 points[5];
int num = 0;
auto func = [&points, &num](PhysicsWorld& world,
const PhysicsRayCastInfo& info, void* data)->bool
{
if (num < 5)
{
points[num++] = info.contact;
}
return true;
};
s_currScene->getPhysicsWorld()->rayCast(func, s_centre, point2, nullptr);
_drawNode->drawSegment(s_centre, point2, 1, Color4F::RED);
for (int i = 0; i < num; ++i)
{
_drawNode->drawDot(points[i], 3, Color4F(1.0f, 1.0f, 1.0f, 1.0f));
}
addChild(_drawNode);
_angle += 1.5f * (float)M_PI / 180.0f;
}
4. Rect Queries
4. rect 쿼리
Rect queries provide a fast way to check roughly which shapes are in an area.
rect 쿼리는 영역에있는 모양을 대략적으로 확인할 수있는 빠른 방법을 제공합니다.
It is pretty easy to implement:
구현하기가 매우 쉽습니다.
auto func = [](PhysicsWorld& world, PhysicsShape& shape, void* userData)->bool
{
//Return true from the callback to continue rect queries
return true;
}
scene->getPhysicsWorld()->queryRect(func, Rect(0,0,200,200), nullptr);
A few examples of using a rect query while doing a logo smash:
로고 스매시를 수행하는 동안 rect 쿼리를 사용하는 몇 가지 예 :