我一直在使用 chai-3d 和 opengl 为触觉设备创建模拟。
我已经绘制了一个位于中心的球体和另一个位于中心球体周围的小球体,对于每 15 度,将根据中心球体绘制一个球体。下面的代码将绘制中心球体。
cShapeSphere *sphere;
cShapeSphere* sphere2;
void sphere(void)
{
float r1=0.020;
float a=0.0;
float b=0.0;
float r2=r1/6;
float th=15;
double pi=3.14159265;
sphere =new cShapeSphere(r1);
world->addChild(sphere);
sphere->setPos(0,a,b);
//this will draw small sphere around the main sphere
for(int j=1;j<=24;j++)
{
sphere2 =new cShapeSphere(r2);
world->addChild(sphere2);
sphere2->setPos(0,a+(r1+r2)*cos(th*j*pi/180),b+(r1+r2)*sin(th*j*pi/180));
//this were i apply the force
double strength = pow((sphere2->getRadius() - length) * 8000,2);
force = (c_pos - spos) * strength;
//the calculated force is sent to haptic device
hapticDevice->setForce(force);
}
}
当我尝试对所有较小的球体施加力时,仅在位于 15 度的第一个较小的球体上检测到力。无法对位于 30 度到 360 度的球体施加力。计算出的力被发送到触觉设备。问题在于球体,围绕中心球体绘制了 24 个较小的球体。我用来绘制 24 个球体的变量是 sphere2。让我们考虑我通过给出不同的变量名称来绘制球体,比如球体 1 到 24,在那里我可以毫无问题地施加力,因为我使用不同的变量,但是如果我使用相同的名称来绘制所有球体,则施加力仅在第一次迭代时。该力不适用于 24 次中的其他 23 次迭代。我必须将力与球体位置一起迭代。