我正在尝试编写一个非常简单的刚体物理模拟(使用c ++和OpenGL)用于学习目的(也请提前原谅我,但英语不是我的第一语言)。
现在,到目前为止,我的课程结构如下:
代理类:
障碍类:
模拟课程:
渲染器类:
现在一切正常但我在如何进一步构建我的程序以实现以下功能方面遇到了问题:
像顶点,纹理和要使用的着色器这样的东西当前在渲染器中是硬编码的。我希望能够在每个Agent对象的基础上更改它们,但我认识到这些变量在Agent类和Simulation类中都没有位置。我应该在哪里跟踪这些?
我想在程序中添加一些调试/可视化内容。例如,给定一个选定的代理程序,程序将在经过一定距离后绘制一个点(例如:每2个统一行进1个点),这样我就可以有一条轨迹来显示代理的去向。什么课程负责:
对不起啰嗦的帖子感到抱歉,但我一直试图解决这些问题两个星期,但没有什么好的想法。
我知道我可以使用实体组件系统架构缓解这些问题,但我真的更喜欢保持它尽可能简单。
答案 0 :(得分:0)
实体/组件架构是我所需要的。通过互联网有很多关于此的内容,我鼓励你google it并在堆栈溢出和gamedev stackexchange上查找它。
这方面的一个例子(不是唯一一个,也许对你没有好处,但它就是一个例子)可能就像
struct Entity
{
int m_Id;
};
struct PhysicsComponent {
unsigned long m_Flags;
// Some data
};
struct GraphicsComponent {
Texture m_Texture;
Mesh m_Mesh;
// Some other data
};
Actor actors[MAX_ACTORS];
Wall walls[MAX_WALLS];
GraphicsComponent graphics_components[MAX_GRAPHICS_COMPONENTS];
void UpdatePhysics(float dt) {
// Do you logic stuff, using your flags and so on
}
void Render() {
// Render your stuff by retrieving position / orientation via entities ID
}