пятница, 10 апреля 2009 г.
Сортировка перед отрисовкой
Качественный метод сортировки объектов перед отрисовкой. Качественный, потому что был использован в God Of War 3 и еще некоторых известных тайтлах. Основная идея: хранить информацию, необходимую для отрисовки, и указатель на объет в массиве в виде пары (key, value). key содержит в себе информацию в виде беззнакового числа и по нему происходит сортировка.
О ядре
В качестве основы для ядра хочу использовать вот это (один двиг - описание в 4х частях): один, два, три, четыре. Точнее начиная со второй половины второй статьи (The Kernel).
То есть основная идея - это использовать ядро (kernel) в качестве организатора цикла обработки всего и вся, а все и вся организовать в виде задач для ядра (tasks). В качестве задач может выступать все, что угодно: таймер, рендер, триггер, физика и тд.
Если кратко об устройстве, то внутри kernel содержится список задач, а у каждой задачи есть 3 метода: start, stop и update. При добавлении задачи, выполняется метод start, при ее удалении из списка - stop. У kernel есть метод execute, внутри которого крутиться цикл, в котором поочередно выполняется метод update у всех задач. Чем меньше приоритет, тем раньше будет вызван метод update у этой задачи в текущей итерации цикла.
На текущий момент все просто - за одну итерацию цикла у каждой задачи выполняется метод update один раз. Мне хочется большего: чтобы была возможность за одну итерацию, для некоторых задач выполнять метод update несколько раз. Объясню для чего это нужно: например, у нас есть задача "физика" (соответственно для обсчёта физики), она должна делать update несколько раз на один раз рендера (например, 10 аптдейтов физики на 1 апдейт рендера). Есть идеи, как это сделать? Прошу помочь ссылками на соответствующую литературу.
То есть основная идея - это использовать ядро (kernel) в качестве организатора цикла обработки всего и вся, а все и вся организовать в виде задач для ядра (tasks). В качестве задач может выступать все, что угодно: таймер, рендер, триггер, физика и тд.
Если кратко об устройстве, то внутри kernel содержится список задач, а у каждой задачи есть 3 метода: start, stop и update. При добавлении задачи, выполняется метод start, при ее удалении из списка - stop. У kernel есть метод execute, внутри которого крутиться цикл, в котором поочередно выполняется метод update у всех задач. Чем меньше приоритет, тем раньше будет вызван метод update у этой задачи в текущей итерации цикла.
На текущий момент все просто - за одну итерацию цикла у каждой задачи выполняется метод update один раз. Мне хочется большего: чтобы была возможность за одну итерацию, для некоторых задач выполнять метод update несколько раз. Объясню для чего это нужно: например, у нас есть задача "физика" (соответственно для обсчёта физики), она должна делать update несколько раз на один раз рендера (например, 10 аптдейтов физики на 1 апдейт рендера). Есть идеи, как это сделать? Прошу помочь ссылками на соответствующую литературу.
Подписаться на:
Сообщения (Atom)