現在、私はいくつかの OpenGL を研究しており、可能な限り多くのことを学びたいと考えています。現在、私が着手することを選択した他のプロジェクトで使用および派生できることを願って、シェイプ クラスを作成しています。しかし、考慮しなければならない特定の要素があることに気づきました。これらの 1 つは、質量、体積、および密度のコレクションです。これは、ジオメトリ プリミティブ自体にどのように適用されるかという点で特に重要です。
2D と 3D の両方で実際に画面にレンダリングされるプリミティブと同様に、軸方向に整列した球または境界ボックスはこのクラスから派生する可能性があります。必要な「答えを与える」ことなく、適切な Shape クラスを作成する方法について誰かが私にいくつかの指針を与えることができるかどうかを知りたいと思っていました。何らかの方向性が必要です。
私が手元に持っている 2 つの主なリソースは、Nicol Bolas の (彼の名前の綴りはそのようになっていると思います) Learning Modern Graphics Programmingと3D Math Primer for Graphics and Game Developmentの本です。レンダリングなどの基本と高度な概念に関しては、これらで十分です。
現時点で探しているのは、このクラスを構築する方法に関するガイドのようなものです。今のところ最後にやりたいことは、静的な値から画面上に三角形を描くことを含むチュートリアルに従うことです。私は、自分の方法を実行すると同時に、他の情報源に頼ることによって、進むにつれて学びます。
これまでのところ、これは私が持っているものです(注-ctorとinlinesを除いて、これらのメソッドはまだ実装されていません):
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;
};