вторник, 6 сентября 2011 г.

Simple Render. Интерфейс IRenderer

Продолжаем рассматривать демо с организацией простенького рендера. В прошлой заметке я рассмотрел интерфейс IEntity и его реализацию. Сегодня у нас очередь интерфейса IRenderer, который в моей схеме представляет view.
Интерфейс IRenderer достаточно прост и содержит всего один важный для нас метод render, метод в котором и будет находиться код по отрисовке той или иной сущности.
class IRenderer
{
public:
virtual ~IRenderer()
{
}
virtual void render()=0;
};
Посмотрим теперь простенькую реализацию данного интерфейса, для отрисовки объектов типа GameEntity, о которых я говорил в прошлой заметке.

class SimpleRenderer2D : public IRenderer
{
private:
GameEntity& m_Entity;
protected:
const GameEntity& getGameEntity()
{
return m_Entity;
}
public:
SimpleRenderer2D(GameEntity& entity);
virtual void render();
};
И соответственно дальше реализация метода render в данном классе:

void SimpleRenderer2D::render()
{
glPushMatrix();
glTranslatef(getGameEntity().getPosition().x, getGameEntity().getPosition().y, 0.0f);
glColor3ub(255,0,0);
glBegin(GL_QUADS);
glVertex2f(0,25);
glVertex2f(0,0);
glVertex2f(25,0);
glVertex2f(25,25);
glEnd();
glPopMatrix();
}
Теперь все выглядит, как мне кажется, просто и наглядно. Класс GameEntity не имеет никакого представления о классе SimpleRenderer2D, а значит мы можем добавлять и другие view для данного типа объектов, использовать их по своему усмотрению и это никак не отражается на нашей модели.

Остается только собрать все эти классы вместе и запустить наше приложение. Этим мы и займемся в следующей заметке.
Всем доброй ночи.