Bullet Physic - Ringtoss game: цель

Я и мой друг пытаемся создать игровой движок для симулятора рингтоссов, используя физику пули на VS C++. Все идет довольно хорошо, пока нам не понадобится какой-то способ определить счет (определить, было ли кольцо помещено внутрь шеста). Для кольца я использую btCompoundShape с 36 маленьким Шпере, вот код:

btRigidBody* SceneManager::AddRing(float rad, float thick, float x, float y, float z, float mass)
{
    btTransform t;
    btCompoundShape *comShape = new btCompoundShape;
    btSphereShape* sphere = new btSphereShape(thick / 2.0);
    //sphere->setUserIndex(8);
    float masses[36];

    for (int i = 0; i < 36; i++)
    {
        t.setIdentity();
        t.setOrigin(btVector3((rad - thick / 2.0)*sin(3.14159265359 / 180.0 * 10 * i), 0, (rad - thick / 2.0)*cos(3.14159265359 / 180.0 * 10 * i)));
        comShape->addChildShape(t, sphere);
        //comShape->addChildShape(t, box);
        masses[i] = mass / 36;
    }

    btVector3 inertia(0, 0, 0);
    t.setIdentity();
    comShape->calculatePrincipalAxisTransform(masses, t, inertia);
    t.setIdentity();
    t.setOrigin(btVector3(x, y, z));

    btMotionState* motion = new btDefaultMotionState(t);
    btRigidBody::btRigidBodyConstructionInfo info(mass, motion, comShape, inertia);  
    btRigidBody* body = new btRigidBody(info);   


    sceneWorld->addRigidBody(body); 
    vRigidBody.push_back(body);

    return body;
}

Во всяком случае, я попробовал три разных способа проверить цель:

  • Я использую callBackFunc и body->setUserIndex(int i), однако для этого метода кольцо должно касаться только полюса, чтобы считаться целью.

  • Я проверяю положение центра кольца относительно полюса, этот способ работает, но иногда, когда кольцо подходит близко к полюсу или стоит сбоку от него, оно также считается.

  • Я проверяю 4 точки на кольце, как 4 направления на компасе относительно положения полюса, это приводит к тому же результату, что и выше.

Я новичок в физике пули, если кто-нибудь из адептов, который мог бы помочь, я был бы очень признателен.

0 ответов

Другие вопросы по тегам