【问题标题】:OpenGL. Ball to ball collisionOpenGL。球对球碰撞
【发布时间】:2012-05-02 04:08:56
【问题描述】:

在 OpenGL 中制作概率机。

Ball ballArray[5];

while(elapsed > 0)
{
     timeStep = m_Timer.getSeconds();
     for(int i = 0; i < NUMBER_OF_BALLS; ++i)
     {
        ballArray[i].updateBall(timeStep); // where collision with pegs dealt 
        //ballArray[0].ballBallCollision(timeStep,ballArray[0],ballArray[1]);
      }
      Redraw();
}

我无法让注释行工作:( 我如何传递 2 个球的实例

【问题讨论】:

    标签: collision-detection


    【解决方案1】:

    假设 ballBallCollision() 有效,您可能希望每个球与其他球发生碰撞,即 0 与 1、0 与 2、1 与 2 等。为此您需要第二个循环。

    我首选的解决方案是创建一个循环遍历所有剩余的球,如下所示:

    for(int i = 0; i < NUMBER_OF_BALLS; ++i)
    {
       ballArray[i].updateBall(timeStep); // where collision with pegs dealt 
       for(int j = i + 1; i < NUMBER_OF_BALLS; ++j)
       {
          ballArray[i].ballBallCollision(timeStep,ballArray[i],ballArray[j]);
       }
    }
    

    请注意,由于我们从 i + 1 开始,我们永远不会让球相互碰撞(0 与 0),我们不会对每一对检查两次(我们检查 0 与 1,但不是 1 与0 再次)。

    【讨论】:

    • 当我这样做时,我所有的球都冻结在顶部:(
    • @RashedHassan:那么您的ballBallCollision 代码似乎无法正常工作。我建议让它在两个单独的 Balls 上工作,而不是在一个数组中,没有 for 循环。然后可以推广到NUMBER_OF_BALLSballs。
    • 谢谢伙计。你的算法运行良好。我重写了我的球-球碰撞的东西。现在它工作正常。正在网上查找有关循环联赛的东西,但是 for 循环很有效!欢呼xD
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 2012-02-11
    • 1970-01-01
    • 2010-12-29
    相关资源
    最近更新 更多