我正在尝试为我的OpenGL应用程序创建碰撞。
我的代码可以成功测试我的相机是否在我的平台对象中:
void checkInsidePlatform()
{
float halfW = gymPlatform -> getW() / 2;
float Height = gymPlatform -> getH();
float halfD = gymPlatform -> getD() / 2;
float platformRight = gymPlatform -> getX() + halfW + 1;
float platformTop = gymPlatform -> getY() + Height + 1;
float platformFront = gymPlatform -> getZ() - halfD - 1;
if(testPlatformCollision())
{
//Below code doesnt work (NEED HELP HERE)
if(myCamera -> curPos -> x < platformRight)
{
myCamera -> curPos -> platformRight;
}
if(myCamera -> curPos -> z > platformFront)
{
myCamera -> curPos -> platformFront;
}
if(myCamera -> curPos -> y < platformTop)
{
myCamera -> curPos -> platformTop;
}
}
}
bool testPlatformCollision()
{
float halfW = gymPlatform -> getW() / 2;
float Height = gymPlatform -> getH();
float halfD = gymPlatform -> getD() / 2;
float platformLeft = gymPlatform -> getX() - halfW - 1;
float platformRight = gymPlatform -> getX() + halfW + 1;
float platformTop = gymPlatform -> getY() + Height + 1;
float platformFront = gymPlatform -> getZ() - halfD - 1;
float platformBack = gymPlatform -> getZ() + halfD + 1;
if((myCamera -> curPos -> x > platformLeft) && (myCamera -> curPos -> x < platformRight))
{
if((myCamera -> curPos -> z > platformFront) && (myCamera -> curPos -> z < platformBack))
{
if(myCamera -> curPos -> y < platformTop)
{
return true;
}
}
}
return false;
}
但现在我被卡住了。我不确定如果它进入平台,如何将相机移出平台。 如果摄像机在平台内,则执行所有3个测试。
答案 0 :(得分:2)
您需要执行碰撞解决。碰撞分辨率是解决碰撞的行为,并且比执行布尔IsColliding
函数更复杂。
要搜索的其他信息包括:分离轴测试(SAT)。由于您正在处理AABB(大概),您可以很容易地将一个简单的分辨率放在一起,只需将相机移到外面。
这是一个快速描述:找到相机应该移动的方向,使其在盒子外面。这个方向应该是向外移动的最短路径。找到要移动的距离,然后执行该移动操作。
当然,实际实施会涉及更多。