是否可以格式化texta UILabel以显示项目符号?
如果是这样,我该怎么办?
我正在评估Bullet物理库中我正在使用C++和Ogre3D编写的3D空间游戏.通过从btMotionState派生并插入我的SceneNodes,我已经很好地集成了Ogre3D和Bullet,但是现在我在计算我应该传递给btRigidBody :: applyCentralImpulse和btRigidBody :: applyTorqueImpulse方法的值时遇到很多麻烦才能实现我正在寻找的结果.
当我按下键盘上的左或右键时,我希望太空飞船在本地Z轴上滚动.当我按UP或DOWN时,我希望它在本地X轴上倾斜.当我按A或Z时,我希望它在局部Z轴的方向上加速/减速.我可以在Ogre中使用一些四元数学并直接在SceneNode上应用translate/rotation来实现这一点,但我真的想使用force/torque方法在Bullet引擎中应用这些值,这样它将继续移动/俯仰/滚动即使在用户停止按键之后,摩擦也会作用在物体上以根据需要减慢速度.
那么,我如何计算为这两种脉冲方法提供的必要值,以确保脉冲基于身体的当前方向而不是使用世界的轴?
谢谢,马克
更新:
我能够计算出向前和向后运动所需的冲动,但我仍在努力解决如何重新定向偏航/俯仰/滚转值以便将它们与扭矩脉冲方法一起使用.这是我进行前进/后退运动的方式:
if (mKeyboard->isKeyDown(OIS::KC_A))
mBody->applyCentralImpulse(mBody->getWorldTransform().getBasis().getColumn(2) * 20 * time);
if (mKeyboard->isKeyDown(OIS::KC_Z))
mBody->applyCentralImpulse(mBody->getWorldTransform().getBasis().getColumn(2) * -20 * time);
Run Code Online (Sandbox Code Playgroud) 使用Bullet 2.76我试图冻结一个物体(刚体),使其立即停止移动,但仍然响应碰撞.
我尝试将它的激活状态设置为DISABLE_SIMULATION,但是它几乎不存在于其他对象中.此外,如果对象在禁用时与其"碰撞",则会发生奇怪的事情(对象通过静态物体落下等)
我想,暂时将它转换为静态刚体可能会起作用,但是在Bullet的方面是否存在一种现有的"原生"方式来实现这一点?
编辑:有没有办法关闭特定对象的重力?
我正在尝试使用由libgdx Android Java开发框架(gdx-bullet)包装的子弹物理库,并在一段短暂的随机工作时间之后使JVM崩溃或"纯虚拟方法称为"崩溃.
其中一些生成hs_err_pidXXXX.log文件,通常包含:
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0aa0c217, pid=7956, tid=7440
#
# JRE version: 7.0_05-b05
# Java VM: Java HotSpot(TM) Client VM (23.1-b03 mixed mode, sharing windows-x86 )
# Problematic frame:
# C [gdx-bullet.dll+0x1c217]
Current thread (0x04af2800): JavaThread "LWJGL Application" [_thread_in_native, id=7440, stack(0x04d70000,0x04dc0000)]
siginfo: ExceptionCode=0xc0000005, reading address 0x6572fc0f
Registers:
EAX=0x0073f370, EBX=0x0073f480, ECX=0x0073f484, EDX=0x6572fc07
ESP=0x04dbf3c0, EBP=0x04dbf400, ESI=0x0073f120, EDI=0x04dbf3f0
EIP=0x0aa0c217, EFLAGS=0x00010206
Instructions: (pc=0x0aa0c217)
0x0aa0c217: ff 52 08 f3 0f 10 05 0c f0 ba 0a f3 0f 10 4c …Run Code Online (Sandbox Code Playgroud) 我正在使用BulletSharp,它是子弹库的C#发行版.我已经在一个据称有0.0f的恢复原状的物体中得到了一些弹跳.
我有一个动态气缸(不久将是一个网状物)落在两个静态气缸上.像这样:

顶部的气缸通常会疯狂地弹跳,通常会弹到一边.
这是我用来设置场景的代码:
//now figure out bulletsharp stuff...
CollisionConfiguration collConfig = new DefaultCollisionConfiguration();
Dispatcher collDispatch = new CollisionDispatcher(collConfig);
BroadphaseInterface broadphase = new DbvtBroadphase();
ConstraintSolver sol = new SequentialImpulseConstraintSolver();
world = new DiscreteDynamicsWorld(collDispatch, broadphase, sol, collConfig);
world.Gravity = new Vector3(0.0f, -10.0f, 0.0f);
//log (moving object)
MotionState still = new DefaultMotionState();
CylinderShape shape = new CylinderShapeZ(0.5f, 1.0f, 1.0f);
still.WorldTransform = Matrix.Translation(0.0f, 0.4f, 0.0f);
RigidBodyConstructionInfo constructInfo = new RigidBodyConstructionInfo(1.0f, still, shape);
logBody = new RigidBody(constructInfo);
logBody.SetDamping(0.04f, 0.1f);
world.AddRigidBody(logBody);
//rollers (static objects)
CylinderShape …Run Code Online (Sandbox Code Playgroud) 我正在编写一个模拟,我们需要一些盒子,当它们在一组传送带上移动时,可以相当准确地建模.目前,我们检测箱子是否与静态输送机表面碰撞,并根据输送机速度应该对每个箱子施加冲动.有没有办法让实际的输送机表面移动并使其环绕或在出料端溶解并从进料端生长?只是使用子弹类和方法的名称才能真正起作用.
我想检测一个(球)何时接触另一个物体(目标),我想知道那个接触的冲动.
我知道有三种方法来检测联系人
gContactAddedCallback
Run Code Online (Sandbox Code Playgroud)
要么
int numManifolds = m_dynamicsWorld->getDispatcher()->getNumManifolds();
for (int i=0;i<numManifolds;i++)
{
btRigidBody* obA = static_cast<btRigidBody*>(contactManifold->getBody0());
btRigidBody* obB = static_cast<btRigidBody*>(contactManifold->getBody1());
// May be there is contact obA and obB
btPersistentManifold* contactManifold = m_dynamicsWorld->getDispatcher()->getManifoldByIndexInternal(i);
int numContacts = contactManifold->getNumContacts();
for (int j=0;j<numContacts;j++)
{
btManifoldPoint& pt = contactManifold->getContactPoint(j);
if (pt.getDistance()<0.f)
{
// One contact point is inside of another object
// But some contacts are ignored
}
}
}
Run Code Online (Sandbox Code Playgroud)
要么
检查线性和角速度变化.(不清楚是否有接触和什么物体使速度发生变化,是物体还是阻尼,重力或某些力场.
我希望有联系信息,包括联系人冲动.我注意到在1帧模拟中解决了一些接触,其他需要2帧,脉冲则低两倍.(我得到了它调试代码.)我会很乐意得到一个总冲动的联系通知.
我列出的所有方法都没有为我提供联系方式的完整信息.有一段时间它会在球飞近目标时发射,甚至不会碰到目标.
什么是预期的方法呢?
如果接触能量很高,这些信息可用于播放冲击声或开始一些动画.
假设我们在A点有一个物体.它想知道它是否可以移动到B点.它的速度有限,所以它只能一步一步地移动.它向正在移动的方向投射光线.Ray与一个对象碰撞,我们检测到它.如何安全地传递我们的光线(避免碰撞)?

顺便说一句,有没有办法让这种东西在对象投射的情况下工作,它会像简单的光线投射一样快/近吗?

有没有办法在某些vay路径中找到最优?

我只是想知道是否有办法将子弹物理学应用于opengl绘制的对象(使用glVertex3f创建或使用glVertexAttribPointer创建三角形网格).我目前正在使用jogl和jbullet将物理应用到我的3D对象.具体来说,如果我为3d对象的三角形网格形状提供顶点缓冲区.我需要Bullet来创建基于三角形网格形状的CollisionShape,并将物理应用于它,同时将物理应用于绘制的opengl对象.此刻,物理碰撞形状可能会移动(在子弹中),但绘制的opengl形状不是.
否则,我可以创建碰撞形状,在每个模拟步骤之后应用物理后获取碰撞形状的顶点,然后根据顶点的位置绘制对象.我已经看了看Hello World示例的子弹,但只帮我申请对OpenGL的对象(基于Z,Y,X axis_的位置物理学和不冷静之类的东西,例如立方体的一角打一个平面开始滚动和旋转.
如果有人能给我一些可以做到这一点的代码或演示,那就太棒了.或者给我一些关于如何使这项工作的提示.我已经在子弹上查看了这个教程:http://www.raywenderlich.com/53077/bullet-physics-tutorial-getting-started.但我似乎无法找到有关如何将子弹应用于opengl对象的信息.
在Bullet Physics库中,当构造刚体时,惯性张量的默认参数是零向量.
我对惯性的理解是相当基本的,但从方程式来看
扭矩=惯性*angular_velocity
我希望惯性为零的物体上的角速度不确定.
对于动态对象,可以使用碰撞形状来近似局部惯性张量,否则使用零向量(默认参数)
那么零惯性会发生什么?我误解了这个等式吗?或者在子弹中具有零惯性,类似于在定义物体相对于方向时具有零质量?
bullet ×10
physics ×4
c++ ×2
game-physics ×2
3d ×1
algorithm ×1
c# ×1
contact ×1
dumpbin ×1
ios ×1
jbullet ×1
jogl ×1
libgdx ×1
objective-c ×1
ogre3d ×1
opengl ×1
path-finding ×1
raycasting ×1
rigid-bodies ×1
swift ×1
uilabel ×1
windbg ×1