目前,我一直在研究一些OpenGL,我希望能学到尽可能多的东西。现在我正在编写一个形状类,我希望可以在我选择进行的其他项目中使用和派生它。然而,我已经意识到我需要考虑某些因素。其中之一是质量、体积和密度的集合 - 更重要的是它们如何应用于几何基元本身。
任何轴向对齐的球体或边界框都可能派生自此类,以及实际上将呈现到屏幕上的图元 - 2D 和 3D 都一样。我希望看看是否有人可以给我一些关于如何编写一个好的 Shape 类而不必“给出答案”的指示。我需要某种方向。
我身边的两个主要资源是尼可波拉斯(我想他的名字就是这样拼写的)Learning Modern Graphics Programming , 和 3D Math Primer for Graphics and Game Development书。至于渲染等方面的基础知识和高级概念,这些应该就足够了。
不过,我目前正在寻找的是关于如何构建此类的指南。我现在最不想做的就是按照教程进行操作,这些教程涉及从静态值在屏幕上绘制三角形,因为我只是那些不太了解这种方式的人之一;我通过实现自己的方法并同时依赖其他信息源边学边学。
到目前为止,这就是我所拥有的(注意 - 除了 ctor 和内联之外,这些方法都没有实现):
class Shape
{
public:
Shape(float radius, glm::vec4 center_pos);
virtual ~Shape(void) { }
virtual void draw(void) = 0;
void collide(Shape& s);
public:
inline void setRadius(float radius)
{
mRadius = radius;
redetermineStructure();
}
public:
glm::vec4 CenterPosition;
protected:
float mass(void);
void redetermineStructure(void); //used to recalculate the dimensions and attributes of the primitive after a new value such as radius or position has been set.
protected:
float mRadius, mVolume, mDensity;
glm::vec4 mLastPosition;
int mHP;
};
最佳答案
除非您已经知道您将需要什么(前期设计/原型(prototype)制作),否则很难给出具体的答案。
如果你边做边学,那么我建议一个好的方法是编写一些简单的实现来利用你的形状类:
- 两个粒子之间的一维碰撞
- 粒子与平面的一维碰撞
- 钟摆
- 1 个形状和 1 个平面之间的二维碰撞(边界检查)
- 2 个形状/多个形状之间的二维碰撞(边界检查、动量传递)
- 与上面的 3D 碰撞
...这应该相当快地公开您的形状类将需要的各种成员函数和内部存储。
关于c++ - 为在 OpenGL 中使用基本物理和渲染寻找一个好的形状类设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11481876/