目前,我一直在研究一些OpenGL,我希望尽可能多地学习。现在我正在写一个形状类,我希望可以在我选择承担的其他项目中使用和派生它。然而,我已经意识到有一些我需要考虑的因素。其中之一是质量、体积和密度的集合——更重要的是它们如何应用于几何图元本身。
任何轴向对齐的球体或边界框都可能派生自此类,以及实际渲染到屏幕上的图元 - 2D 和 3D 类似。我希望看看是否有人可以给我一些关于如何编写一个好的 Shape 类而不需要“放弃答案”的指示。我需要某种方向。
我身边的两个主要资源是 Nicol Bolas(我想他的名字就是这样拼写的)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;
};