![]() |
Ответ: Clear Engine (Понятный движок)
запилил атрибуты
PHP код:
|
Ответ: Clear Engine (Понятный движок)
столько лишних слов...
это нифига не slim. |
Ответ: Clear Engine (Понятный движок)
Цитата:
Slim не в плане простоты, а в плане того, что движок не жирный. |
Ответ: Clear Engine (Понятный движок)
Кстати вот в d3dx есть такая штука id3dxeffect, которая позволяет более менее структурировать большое кол-во шейдеров, хотя конечно имхо от большого кол-ва шейдеров нужно по возможности избавляться. Можешь попробовать в opengl что-то подобное сам сделать.
Насчет Slim: с таким подходом он может превратиться либо в обертку вокруг opengl, которая не прибавляет функционала, но становится ненужным оверхедом, либо урезает функционал, что-то обобщает, но ничего полезного не добавляет, либо просто явлется контейнером всего что в нем лежит и опять же никакого толку - все компоненты можно использовать напрямую с тем же успехом без лишних заморочек. По моему убеждению движок должен не добавлять/обобщать/урезать функционал тех компонентов с которыми он работает, а интерпретировать высокоуровневую работу с абстрактными сущностями через эти низкоуровневые компоненты. Что ты понимаешь под простотой движка? Например кодить небольшие игры довольно просто на unity3d или blitz3d, однако их нельзя назвать оптимизированными по производительности. С другой стороны оптимизированный код обычно больше по размеру чем универсальный, потому что в нем может быть много частных случаев и ассемблерных вставок, он сложней для понимания и отладки. Так что имхо упрощать нужно архитектуру, убирать ненужный функционал, а также упрощать структуру и семантику кода пока это совпадает с повышением его производительности, и улучшением читабельности. Управление сложностью является решающим фактором успешного развития движка в будущем. Поэтому я бы еще раз обратил внимание на пост товарища jimon'а где то в начале темы - там он расписывал о driven data. Это удачное решение потому что позволяет четко распределить обязанности между движком и редакторами. Задача движка воспроизводить контент на разных платформах, с минимальным вмешательством программиста. Задача редакторов предоставить функционал движка разработчикам игр в наиболее подходящей для данного проекта форме. Тем самым подход становится более декларативным - мы даем движку контент и говорим что делать, а не как делать. Движок становится проще, а редакторы гибче, к тому же я могу на каждый проект сделать свой набор редакторов, и делать их по мере необходимости. |
Ответ: Clear Engine (Понятный движок)
|
Ответ: Clear Engine (Понятный движок)
|
Ответ: Clear Engine (Понятный движок)
|
Ответ: Clear Engine (Понятный движок)
|
Ответ: Clear Engine (Понятный движок)
Цитата:
Картинка нормальная - визуальный дизайн помогает делать графику лучше, сам моделил? ЗЫ: Вроде где то в начале темы был вопрос о том как сделать размытие гаусса быстрей? Есть альтернатива - pingpong. Смысл в том что создаешь две текстуры (оптимальный вариант 128х128 и 64х64) и перерисовываешь несколько раз (около 18 ) туда-сюда, линейная фильтрация размывает изображение. Только еще стоит обратить внимание на смещение (в статье этого нет непочему-то): вот когда тебе надо перерисовать из одной текстуры в другую обычно используют смещение на пол пиксела, чтобы тексель в пиксель попадал и изображение не размывалось - так вот в данном случае как раз не нужно этого делать чтобы изображение больше смазывалось, только оно будет постепенно уезжать вниз-вправо, поэтому его можно компенсировать через каждые 2 прохода (я так делал) или сразу после всех проходов. Вот я сам буквально на днях делал размытие для блума в двух вариантах - гаусс (горизонтальный/вертикальный) с ядром в 7 семплов и текстурами 128х128 и вот такой пингпонг - разница почти не заметна, а выйгрышь по скорости на слабых платформах будет. Недостаток пингпонга: если изображение стратает большим количеством горизонтальных и вертикальных контрастных линий то будет заметна пикселизация, увеличение количества проходов ситуацию не спасет, и вообще пингпонг очень консервативен - если изменить разрешение таргетов/текстур или изменить кол-во проходов то изображение в большинстве случаев только хуже становится. Однако из источника выше говорят что даже в crysis использовали - очень хорошо настроено было. |
Ответ: Clear Engine (Понятный движок)
Цитата:
|
Ответ: Clear Engine (Понятный движок)
Модельки мои
|
Ответ: Clear Engine (Понятный движок)
Цитата:
|
Ответ: Clear Engine (Понятный движок)
Цитата:
|
Ответ: Clear Engine (Понятный движок)
Цитата:
Но вобщем смысл понял, буду разбираться в opengl, тогда в той статье все верно. В любом случае какой инструментарий предоставляется с тем и приходится работать... :( Кстати, d3d9 еще актуален? Например для xp или там для vista без сервис пака, если считать что у меня нет dx10, только 11 и 9? |
Ответ: Clear Engine (Понятный движок)
А все я разобрался :)
Да пиксел ( 0, 0 ) должен по идее указывать на координату 0.5f / width, 0.5f / heigth, а он на самом деле указывает на 0.0f, 0.0f, так что он по верхнему левому углу позиционируется. |
Ответ: Clear Engine (Понятный движок)
Вложений: 2
Запилил видео где бегают курочки
http://rutube.ru/video/e6a77187383e3...12ca90dafdbcb/ На саму модель потратил около 4х часов (( lowpoly, учусь пока код для сцены в неск строк Код:
void ceMain(){ 4 часа еще на волка потратил |
Ответ: Clear Engine (Понятный движок)
Запилил моушены. Это заданный последовательный набор движений объекта на сцене. Впринципе не только объекта сцены, в моушен положить можно что угодно.
В сцене хранится MotionDispatcher, в нем можно создавать нити MotionThread, путем ручного создания или загрузки из xml файла. Все нити работают асинхронно. В каждой нити хранится список действий Motion, которые воспроизводятся поочереди, одно действие может хранить несколько в себе. К нити можно присвоить объект MotionObject, тогда он будет передаваться в контексте Motion. Пример: Я хочу что-бы волк шел потом шел и поворачивал, затем бил лапами и шел дальше, и так бесконечно. Как это сделать. По дефолту у нас нет реализации моушенов, их надо запилить. (в дальнейшем подумаю над стандартными) Код:
class MotionMove : public ceMotion, public ceMotionConstructor{ Все классы нужно зарегистрировать под каким-то именем я буду называть это имя класса в xml файле Код:
engine->scene()->motionDispatcher()->registerMotionConstructor("MotionMove", std::shared_ptr<MotionMove>(new MotionMove)); Теперь как загрузить нить. Пример xml файла Код:
<cet> Если наш моешен должен выполнять одновременно несколько действий, например ходьба и поворот, то нам в моушен нужно вложить несколько моушенов, причем атрибут together отвечает за то, как будут выполняться моушены, по очереди или сразу все. Теперь как загрузить этот файл в коде программы: Код:
m_motionThread = m_wolf->parentScene()->motionDispatcher()->loadMotionThread("wolf_motion.cet"); Ну как-то так |
Ответ: Clear Engine (Понятный движок)
Когда речь идёт о "простом" или "удобном" движке, то речь идёт о самом приятном и "гладком" пути обучения для программиста, и добавление абстракций подобных Motion, только усложняет этот процесс. Заместо того чтобы разраб изучал топик и сам начинал мыслить как разраб, разные решения пытаются предлагать всякие абстракции, типо помогая разрабу, на самом деле лишь сбивает и тормозит.
|
Ответ: Clear Engine (Понятный движок)
Цитата:
Цитата:
Цитата:
|
Ответ: Clear Engine (Понятный движок)
Цитата:
|
Ответ: Clear Engine (Понятный движок)
Цитата:
|
Ответ: Clear Engine (Понятный движок)
Цитата:
Код:
Animate (wolf, wolf_run) Наблюдал реализацию этой фишки в скриптовых движках, что мне кажется довольно удобным. Например, в первой Мафии такой скрипт выглядел бы так: Код:
label 1 Код:
IEnumerator loop() Специализированная версия waitов для анимаций в феноменально замороченной обёртке - не нужна. --- алсо, как в мафе, так и в юнити, нет реальной асинхронности у этих штук (ибо не нужно), виртуальная машина просто умеет не обновлять скрипт, пока условие не выполнено, чекая его время от времени. |
Ответ: Clear Engine (Понятный движок)
Не понимаю что мешает запилить тоже самое у меня, добавь нужный моушен в рантайме, в котором ты будешь крутить свои действия и все, и не обязательно к модели их привязывать, ты хоть каждые 5 сек сцены переключай, возможности не ограничиваются.
|
Ответ: Clear Engine (Понятный движок)
Смотри на вещи глазами нуба разраба. Разве он читая эти: motionContext, motionDispatcher, registerMotionConstructor и куча всего поймёт о чём идёт речь вообще, до того как сможет это использовать?
Посмотри на современные технологии, все технологии, железо, софт, да даже тупо электроника и быт - выживает только самое простое, почему? Да потому что простые вещи, проще понять и приступить к их использованию. Почему JavaScript самый популярный и используемый язык, который за несколько последних лет многократно увеличивает свою популярность? Потому что он тупо прост. Смотри на вещи нуба. Ты забываешь о том - что ты знаешь, другой и понятия не имеет. Следственно учитывай это когда пересматриваешь свои решения. Ты теряешься в мечтах о том как это "круто" и "что это может давть", но забываешь что нифига это не даст, т.к. и не дойдёт до этого. Подойди к разработке с другой стороны - рассмотри решение с точки зрения пользователя: как бы разраб хотел бы реализовывать поставленную задачу, сам или с использованием твоего решения, что твоё решение даёт - правила и фреймворк, или хелперы и свобода выбора между решениями, какой синтаксис и метод выражения - отдельные файлы, методы в коде, а может туулза. Продумай конечный результат сперва, затем поспи, проснись, и подумай снова, т.к. ты точно упустил тысячу других применений. И потом лишь приступай к разработке. Топик у тебя: Clear - понятный. Значит ты ставишь на первое место пользователя. Любой проект для успешного разраба, имеет политику которая влияет на методы и идеи при разработке - если ставишь на первое место разраба, так учитывай это при разработке, начинай с простого продумывания интерфейса для самого разраба, а потом с имплементации. |
Ответ: Clear Engine (Понятный движок)
Насчёт ожидания завершения действия.
Вот как сделано это в jQuery: foobar.animate(params, что-делать-после-завершения-анимации); На мой взгляд, очень просто этим пользоваться. Не знаю, правда, возможна ли подобная конструкция на С++ |
Ответ: Clear Engine (Понятный движок)
Цитата:
В C++ ты по сути можешь передать pointer на функцию (самый простой вариант?), если ещё lambda функции (подходят тут?) и anonymous функции (это по сути то что и есть в js). Да и не jQuery а java-script, т.к. этот паттерн с каллбэками был задолго до jQuery. Есть ещё promises паттерн, и использует chain'ы для выражения последовательности действий. Круто то что можно иметь динамично определяющуюся цепь анимаций: PHP код:
Как пример. Суть в том что есть цепь действий которой ты можешь манипулировать. Естественно такая цепь в данном примере имеет кучу недостатков, например в данном примере описан весь персонаж, и нету идеи отдельных частей анимации (морфинг и т.п.). Таким образом не решена проблема в том что когда персонаж в анимации бежит, анимация когда ударят не морфится. Но удобство в том что ты можешь добавлять в цепочку разные стейты, отменять их, и манипулировать по разному. Также дать разрабу возможность расширять цепочку и влиять на стейт прямым образом. Самый простой пример использования: PHP код:
По сути разраб может юзать такой фреймворк как угодно, используя chaining или не используя и менеджить это сам. Но главная суть в том что под этим фреймворком анимации должен быть прямой доступ к самой анимации - тупо менять кейфреймы и т.п. Чтобы разраб мог бы вообще сам это манипулировать. И даже с использованием данного фреймворка, дать разрабу возможность манипулировать напрямую нижним уровнем. Имея примитивные методы работы с костями, группами костей, установки кадра кости/группы - по сути самое примитивное, что должен иметь изначально разраб. Это даст ему возможность уже анимировать. Далее не теряя возможности иметь такой низкий уровень, добавляй слоёв, но таким образом что нижний слой об этом и не догадывается. И разраб уже сам выберет что ему по душе. |
Ответ: Clear Engine (Понятный движок)
Какие тут могут быть обсуждения синтаксиса? Делать для нубов значит делать GUI и никакого программирования!
Цитата:
|
Ответ: Clear Engine (Понятный движок)
|
Ответ: Clear Engine (Понятный движок)
Да сколько же вы будите путать Java и JavaScript уже?!!
|
Ответ: Clear Engine (Понятный движок)
Цитата:
В довесок к своим словам, я тебе покажу статистику на 2013, от github'а, котороые уж как никак, а имеют получше данные для статистики: http://adambard.com/blog/top-github-...r-2013-so-far/ И ещё одна картинка, с количеством вопросов (stackoverflow) и та же таблица популярности на гитхабе (горизонтально) ![]() Цитата:
|
Ответ: Clear Engine (Понятный движок)
Цитата:
это скорее говорит о том, что большинство кодеров - вебщики. |
Ответ: Clear Engine (Понятный движок)
Цитата:
Насчет github - там не адекват, потому что в том же googlecode противоположно другие, в каком-нибудь bitbucker третьи - они отражают только то что в одних сервисах удобней размещать проекты на одних языках, в других - на других. upd: Еще раз прочитал про TIOBE Цитата:
|
Ответ: Clear Engine (Понятный движок)
Цитата:
|
Часовой пояс GMT +4, время: 15:27. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot