簡體   English   中英

OpenGL中的3D碰撞

[英]3D collision in OpenGL

我正在嘗試為我的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個測試。

您需要執行沖突解決。 碰撞分辨率是解決碰撞的行為,並且比僅執行布爾IsColliding函數要IsColliding

要搜索的其他信息包括:分離軸測試(SAT)。 由於您正在處理AABB(大概),您可以很容易地將一個簡單的分辨率放在一起,只需將相機移到外面。

這是一個快速描述:找到相機應該移動的方向,使其在盒子外面。 這個方向應該是向外移動的最短路徑。 找到要移動的距離,然后執行該移動操作。

當然,實際實施會涉及更多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM