На данный момент я немного изучаю OpenGL и надеюсь узнать как можно больше. Прямо сейчас я пишу класс формы, который, надеюсь, смогу использовать в других проектах, которые я решу взять на себя. Однако я пришел к выводу, что есть определенные элементы, которые мне необходимо принять во внимание. Одним из них является набор массы, объема и плотности - в большей степени в отношении того, как они будут применяться к самому геометрическому примитиву.
Любые выровненные по оси сферы или ограничивающие прямоугольники, скорее всего, будут производными от этого класса, а также примитивы, которые фактически будут отображаться на экране — как в 2D, так и в 3D. Я надеялся узнать, может ли кто-нибудь дать мне несколько советов о том, как написать хороший класс Shape без необходимости «давать ответ». Мне нужно какое-то направление.
Два основных ресурса, которые у меня есть, это Никол Болас (думаю, именно так пишется его имя) >Изучение современного графического программирования и 3D-математика Букварь для разработки графики и игр. Что касается основ и продвинутых концепций с точки зрения рендеринга и тому подобного, этого должно быть достаточно.
На данный момент я ищу что-то вроде руководства с точки зрения того, как я могу создать этот класс. Последнее, что я хочу сделать сейчас, это просто следовать руководствам, которые включают в себя рисование треугольников на экране из статических значений, потому что я просто один из тех людей, которые не слишком хорошо учатся таким образом; Я учусь по ходу дела, применяя свои собственные методы и одновременно полагаясь на другие источники информации.
Пока что это то, что у меня есть (ПРИМЕЧАНИЕ — ни один из этих методов еще не реализован, кроме 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;
};