我正在使用子弹制作一个游泳池模拟器,并且需要准确模拟人类可能的镜头。为了找到施加到母球的冲动,我使用了目标球、口袋中心和母球的位置。
(来源:poolplayers.com)
在主球的运动路径与目标球相似的情况下(击球角度接近 180 度),一切正常,目标球沉入袋中。但似乎射击路径的角度越大,我产生的脉冲的误差幅度就越大。我已经尝试了很多方法来解决这个问题:调整球的碰撞余量、扩大世界规模、关闭摩擦力和恢复力以及许多其他方法,但似乎没有什么能改变这种行为。
以下是我的代码的相关位:
//assume p = pocket center, b = object ball center, c = cue ball center
//first find the position of the ghost ball, ie the target point of collision for the cue ball
btVector3 ghostPos = b+(b-p).normalize()*(2.0f*BALL_RADIUS);
//then use the normal between the ghostball and cue ball as the impulse, scaled by the shots total distance
btVector3 cueImpulse = (ghostPos-c).normalize()*((p.distance(b)+ghostPos.distance(c))*HIT_RATIO);
//finally apply the impulse to the cueball's center of mass (using general form of applyImpulse to later use rel_pos for english
cueBallBody->applyImpulse(cueImpulse,btVector3());
希望这是足够的信息。我已经为这个错误苦苦挣扎了很长时间,现在这个我已经工作了近两年的非常大的项目取决于解决这个问题!即使您没有看到我的代码有什么问题,但有另一种寻找冲动的策略——我很想听听它,因为我担心我已经没有想法了。