2
안녕하세요 저는 C++ SFML을 처음 사용합니다. 회전하는 동안 사각형을 그리고 AABB를 렌더링해야하는데 회전하는 다른 AABB 사각형과 교차하는 차원을 감지하려고합니다. 여기 내가 그들을 탐지하기 위해 사용하는 것들이있다. 회전하는 경우 확인하는 것으로 충분합니까? 분리 축 정리와 같은 것들을 사용해야합니까? 또는 사용할 필요가 없습니다 수있는 방법이있는 OBB회전하는 동안 AABB를 렌더링하는 방법
#define RECT 5
sf::RectangleShape Rect[RECT];
Rect[0].setSize(sf::Vector2f(50.0f, 50.0f));
Rect[1].setSize(sf::Vector2f(50.0f, 100.0f));
Rect[2].setSize(sf::Vector2f(60.0f, 80.0f));
Rect[3].setSize(sf::Vector2f(100.0f, 60.0f));
Rect[4].setSize(sf::Vector2f(30.0f, 250.0f));
sf::Vector2f MinPoint[RECT];
sf::Vector2f MaxPoint[RECT];
for (int x = 0; x < RECT; x++)
{
//Starting Position
Rect[x].setOrigin(Rect[x].getSize().x/2, Rect[x].getSize().y/2);
xpos += 150;
Rect[x].setPosition(xpos, ypos);
colcount++;
if (colcount == 3)
{
xpos = 0;
ypos += 200;
colcount = 0;
}
Rect[x].setFillColor(sf::Color::Red);
}
while (window.isOpen())
{
window.clear(sf::Color::Black);
//Drawing Shapes
for (int x = 0; x < RECT; x++)
{
window.draw(Rect[x]);
}
Rect[0].rotate(90*3.14/180);
Rect[1].rotate(12 * 3.14/180);
Rect[2].rotate(10 * 3.14/180);
Rect[3].rotate(180 * 3.14/180);
Rect[4].rotate(360 * 3.14/180);
for (int i = 0; i < RECT; i++)
{
MinPoint[i].x = Rect[i].getPosition().x - (Rect[i].getSize().x/2);
MaxPoint[i].x = Rect[i].getPosition().x + (Rect[i].getSize().x/2);
MinPoint[i].y = Rect[i].getPosition().y - (Rect[i].getSize().y/2);
MaxPoint[i].y = Rect[i].getPosition().y + (Rect[i].getSize().y/2);
}
//Collision Detection
for (int i = 0; i < RECT; i++)
{
for (int j = i + 1; j < RECT; j++)
{
if (i != j)
{
if (MaxPoint[i].x >= MinPoint[j].x && MaxPoint[j].x >= MinPoint[i].x && MaxPoint[i].y >= MinPoint[j].y && MaxPoint[j].y >= MinPoint[i].y)
{
Rect[i].setFillColor(sf::Color::Green);
Rect[j].setFillColor(sf::Color::Green);
}
}
}
}