草庐IT

c++ - 零星碰撞检测

我一直致力于检测游戏中对象之间的碰撞。现在一切都是垂直的,但希望保持其他运动的选择。这是经典的2d垂直空间射击游戏。现在我遍历每个对象,检查碰撞:for(std::list::iteratoriter=mObjectList.begin();iter!=mObjectList.end();){Object*m=(*iter);for(std::list::iteratorinnerIter=++iter;innerIter!=mObjectList.end();innerIter++){Object*s=(*innerIter);if(m->getType()==s->getType(

c++ - 无法识别的类型 - 'Error: Variable "[var-name ]"is not a type name'

作为项目的一部分,我正在创建一个处理物理的类。我们被告知要使用一个处理任意行为的类。我创建了一个类,它将根据提供给它的模块更新内部状态(代码如下)。但是,表示内部状态的结构PhysicsData除了它自己的文件外,在任何地方都无法识别。任何人都可以解释一下吗?(对于大量信息的转储,我们深表歉意,但是问题所在的对象和问题所在的位置之间的差距非常大,减少额外的细节也会删除可能有用的上下文)这里是有问题的结构:#pragmaonce//Thisfile"PhysicsBehaviourBase.h"#include#includestructPhysicsData{public:D3DXVE

c++ - 允许运行时和编译时多态性的灵活方式?

示例情况:我正在创建一个用于游戏开发的物理引擎。我有两种空间划分方法:网格四叉树我想允许将要使用我的物理引擎的程序员:在编译时通过模板参数选择空间划分方法Physics::Worldworld;//chosenatcompile-time通过多态对象在运行时选择空间划分方法Physics::WorldRunTimeworld;world.setSpatialPartitioningMethod(newPhysics::Grid);//chosenatrun-time您可以从上面的示例中注意到,我必须使用两个不同的类(World和WorldRunTime)。这会导致代码重复,因为我将拥有

c++ - 物理模拟给出(非常)不准确的简单轨迹微积分位置

我想在游戏中实现一个物理引擎,以便计算物体在受力时的轨迹。该引擎将根据对象的先前状态计算对象的每个状态。当然,这意味着要在两个时间单位之间进行大量计算才能足够精确。为了正确地做到这一点,我首先想知道这种获取位置的方法与运动学方程之间的差异有多大。所以我编写了这段代码,用于存储文件中模拟和方程给出的位置(x,y,z)。#include#include#include#include"header.h"BodynouveauCorps(Bodybody,Vector3force,doubledeltaT){doublem=body.mass;doublet=deltaT;//Newton'

java - 降噪程序

如果您要编写一个程序来获取麦克风输入,将其反转(通过将1设为0并将0设为1将其设置为异相),然后从扬声器中播放,这会消除声音吗?波浪物理学说,如果波峰与波谷对齐,就会发生破坏性干扰,因此如果不“完全”抵消的话,可以在这里利用它来减少噪音。我可以想象,由于反转音频的复杂性,或者甚至因为反转和播放时间太长,以至于声波已经过去,这将无法工作。如果我必须关联一种语言来执行此操作,那么它必须是c++或java(我至少在这两种语言中都胜任)。 最佳答案 是的,它会抵消声音。这或多或少就是环绕声的工作原理:通过减去左/右声道,在第3个扬声器中播放

c++ - 盒子不会在 Bullet Physics 中滚动

正如您在图片中看到的,TheBox并不滚动,而是在斜坡上滑动。这是我在代码中创建框的方式,config=newbtDefaultCollisionConfiguration();dispatcher=newbtCollisionDispatcher(config);broadphase=newbtDbvtBroadphase();solver=newbtSequentialImpulseConstraintSolver();bWorld=newbtDiscreteDynamicsWorld(dispatcher,broadphase,solver,config);bWorld->set

c++ - 来自 C++ 中拉格朗日/变分法的 ODE 求解器

我有一个一般性问题,我将在更具体的情况下提出这个问题。如果想找到双摆的动力学,可以从数学上推导出运动方程,重写ODE使其具有对数值计算有用的特殊形式,并使用C++中的odeint求解ODE(参见堆栈溢出的例子https://stackoverflow.com/a/30582741)。现在假设我们想对n个耦合摆(n在运行时已知)做同样的事情。这需要我们写一个所谓的拉格朗日函数(动能-势能),这个函数的不同导数将是我们需要求解的ODE。此外,必须以适合odeint的形式重写这些ODE。这对于一般人来说很难用手完成。在像Mathematica和Maple这样的程序中,这实际上很容易。可以从拉

c++ - 对于 C++ Vector3 实用程序类实现,数组是否比结构和类快?

出于好奇,我以3种方式实现了vector3实用程序:数组(使用typedef)、类和结构这是数组实现:typedeffloatnewVector3[3];namespacevec3{voidadd(constnewVector3&first,constnewVector3&second,newVector3&out_newVector3);voidsubtract(constnewVector3&first,constnewVector3&second,newVector3&out_newVector3);voiddot(constnewVector3&first,constnewVe

c++ - 移动 Physics 对象以进行穿透的最小尺寸 Vec3 = 0

这是一个例子(见图片):-2个红色矩形是静态对象(即它不能移动)。蓝色的球是动态物体。到目前为止,我设法获得了所有深入的信息。让我们将其视为我们的输入:-为了解决A和球之间的渗透问题,我可以通过Vec3(1,0,0)OR移动球Vec3(0,2,0)。为了解决B和球之间的穿透问题,我可以将球移动Vec3(0,1,0)。^我将其存储为2DVec3数组problem={{Vec3{1,0,0},Vec3{0,2,0}},{Vec3{0,1,0}}}.如何找到物理对象(例如示例中的球)的最佳运动(最小尺寸)以尽可能减少穿透力?此示例中的最佳解决方案是“通过Vec3(1,1,0)移动球:size

c++ - 物理引擎的继承/接口(interface)决策

这是针对在MinGW/Windows上使用SDL的小型游戏项目。我正在研究一个物理引擎,我的想法是拥有一个Physics::Object,所有物理对象都应该派生自它,并且它会在全局Physics::中注册自己System类(这是一个单态模式),因此用户不需要跟踪哪些对象包含在物理计算中,只需要调用一个函数,如Physics::System::PerformTimestepCalculation(doubledt)。这很好用,我什至使用一个派生类Physics::Circle实现它,这是一个二维圆。我对预测碰撞检测非常满意,尽管我仍然需要对其进行优化。无论如何,当我开始添加其他原语以包含