Развитие приложения может потребовать как совершенствования физической модели, так и способа ее визуализации. Поскольку проблемы могут возникнуть и с тем и с другим, разумно будет их разделить, рассматривая физическую и визуальную составляющие приложения по отдельности.

Описание модели и способа изменения ее состояния содержится в подклассах класса Application — в первую очередь, в конструкторе и методе update. За визуализацию отвечает метод display.

Сначала убедимся в том, что "физика" работает нормально, чтобы потом на этой основе проверить работоспособность визуализации. Для этого временно исключим визуализацию из приложения.

Класс Application подробно описан здесь. Если удалить из него все, что связано с графикой, получим

class Application
{

public:

    virtual void update() = 0;
    virtual void display() = 0;
};

Таким образом, отладочная версия Application представляет собой интерфейс, на основе которого мы будем строить приложения.

Существенно упрощается и реализация функции main()

#include "engine/app.h"    // включаем каркас приложения
#include "engine/timing.h" // подключаем функции-таймеры


extern Application* getApplication();

Application* app;


int main(int argc, char** argv)
{
    TimingData::init();

    app = getApplication();

    while (1)
    {
        TimingData::get().update();
        app->update();
        app->display();
    }

    // Очистка ресурсов
    TimingData::deinit();
}

В данном случае используется бесконечный цикл. Хотя его можно легко заменить, например, проверкой заданного значения счетчика кадров.

Метод display() теперь используется для вывода отладочных значений на экран или в файл. Например, чтобы вывести каждое тысячное значение z-координаты последней частицы нити, запишем:

void Rope::display()
{
    unsigned frame = TimingData::get().frameNumber;
    if (!(frame % 1000))
    {
        printf("%d : %f\n", frame, particle[numberOfParticles-1].getPosition().z);
    }
}

С другой стороны, эти данные можно сохранить в текстовом файле и передать для визуализации другой программе, например, gnuplot.



Комментарии

comments powered by Disqus