МГГУ, Технология Подземной Разработки
защитил кандидатскую с работой, приложение к которой писал на Delphi + OpenGL (моделирование выпуска отбитой руды)
В своём движке, относительно текстур руководствуюсь следующими правилами:
— все текстуры 2^N
— стараться избегать размеров > 1024 (время выборки)
— стараться жать текстуры с выносом альфа-канала (если имеется) в отдельную текстуру A8 (память, время выборки)
— win, mac, nix = DXT1
— ios = PVRTC
— android = ETC (даже не смотря на то, что Tegra лучше дружит с DXT)
— для любых других текстур использовать RGBA8, A8
— все сжатые текстуры квадратные
— конвертация происходит в момент сборки пака, под конкретную ось
— перезагружать текстуры и рендер-таргеты при потере контекста
Cо стилусом проблем небыло, обрабатывается как и любой другой тач.
Очевидно, что автора этой курсовой работы совершенно отсутствует опыт как в разработке, так и в планировании. Видится лишь единственное практическое применение такой писанины — выбить инвестиции из какого-нибудь лоха и успешно их «освоить».
Ничего против умеренного ООП не имею, но когда пациент страдает ООП головного мозга — можно смело ставить крест на всех фитчах и сроках выполнения проекта.
Печально, что зачастую, эти самые гейм-дизы в бэкграунде имеют лишь посредственную должность квестописателя, что по мнению продюсера даёт им право совершать самые дорогие ошибки в проекте (арт и код в корзину)
Верёвки и прочую soft-body (если постараться то и rigid-body) физику можно писать используя интегрирование Верле.
Вся теория завязана на том, что скорость — разница между текущим и предыдущим её положением.
Применительно к задаче реализация сводится к следующему (псевдокод):
Есть набор точек (joints) связанных пружинками (links).
Задача каждой точки — двигаться согласно скорости.
joint.update
tempPos = pos // запоминаем текущую позицию во временную переменную
pos += pos - lastPos // прибавляем скорость
pos += gravity // и вектор гравитации
lastPos = tempPos
Задача каждой пружинки — поддерживать нужное расстояние между её joint'ами.
link.update
delta = joint[1].pos - joint[0].pos // вектор в сторону второй точки
length = sqrt(delta.x^2 + delta.y^2) // текущее расстояние между точками
delta /= length // нормализация вектора
delta *= length - LINK_LENGTH // LINK_LENGTH - расстояние которое следует поддерживать
delta *= FORCE // FORCE - коэффициент упругости пружинки (0..1)
// расталкиваем точки в противоположных направлениях
joint[0].pos += delta * 0.5
joint[1].pos -= delta * 0.5
Сама организация цикла обновления сводится к обновлению всех joint'ов, и нескольким иттерациям обновления всех link'ов (для стабилизации).
Таким незамысловатым способом можно создавать верёвки, рэгдоллы (ограничить углы между link'ами), волосы и даже некий аналог твёрдотельной физики. Реализация простая и никаких физических движков не требует. Пример работы такой физики.
защитил кандидатскую с работой, приложение к которой писал на Delphi + OpenGL (моделирование выпуска отбитой руды)
— все текстуры 2^N
— стараться избегать размеров > 1024 (время выборки)
— стараться жать текстуры с выносом альфа-канала (если имеется) в отдельную текстуру A8 (память, время выборки)
— win, mac, nix = DXT1
— ios = PVRTC
— android = ETC (даже не смотря на то, что Tegra лучше дружит с DXT)
— для любых других текстур использовать RGBA8, A8
— все сжатые текстуры квадратные
— конвертация происходит в момент сборки пака, под конкретную ось
— перезагружать текстуры и рендер-таргеты при потере контекста
Cо стилусом проблем небыло, обрабатывается как и любой другой тач.
at flash.media::SoundMixer$/computeSpectrum()
at Main/ComputeMaxSpectrumValue()
at Main/Update()
А в остальном здорово 8)
Вся теория завязана на том, что скорость — разница между текущим и предыдущим её положением.
Применительно к задаче реализация сводится к следующему (псевдокод):
Есть набор точек (joints) связанных пружинками (links).
Задача каждой точки — двигаться согласно скорости.
joint.update
tempPos = pos // запоминаем текущую позицию во временную переменную
pos += pos - lastPos // прибавляем скорость
pos += gravity // и вектор гравитации
lastPos = tempPos
Задача каждой пружинки — поддерживать нужное расстояние между её joint'ами.
link.update
delta = joint[1].pos - joint[0].pos // вектор в сторону второй точки
length = sqrt(delta.x^2 + delta.y^2) // текущее расстояние между точками
delta /= length // нормализация вектора
delta *= length - LINK_LENGTH // LINK_LENGTH - расстояние которое следует поддерживать
delta *= FORCE // FORCE - коэффициент упругости пружинки (0..1)
// расталкиваем точки в противоположных направлениях
joint[0].pos += delta * 0.5
joint[1].pos -= delta * 0.5
Сама организация цикла обновления сводится к обновлению всех joint'ов, и нескольким иттерациям обновления всех link'ов (для стабилизации).
Таким незамысловатым способом можно создавать верёвки, рэгдоллы (ограничить углы между link'ами), волосы и даже некий аналог твёрдотельной физики. Реализация простая и никаких физических движков не требует.
Пример работы такой физики.