|
05.12.2013, 18:35
|
#136
|
Мастер
Регистрация: 12.01.2009
Сообщений: 979
Написано 388 полезных сообщений (для 631 пользователей)
|
Ответ: Clear Engine (Понятный движок)
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
18.12.2013, 00:35
|
#137
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: Clear Engine (Понятный движок)
Новые картинки работаю над проектом, волки воруют кур, нужно их остановить )) При разработке игры проще разрабатывать движок )
Очень много поменялось в концепции, убралась абстракция видеодрайвера, теперь модель сама знает как себя рисовать (конкретно реализованая для конкретного рендера), меньше виртуальных функций.. Объект ядра теперь синглтон.. Постпроцесс и шейдеры описываются скриптами в виде xml файлов, вобщем нет смысла рассказывать, я могу еще 100 раз все переделать. Буду выкладывать наработки просто, в дальнейшем скомпилю более-менее нармальный движок для всех платформ, запилю доку и выложу кому интересно. Движок конечно не убийца Юнити, но думаю делать на нем что-либо на плюсах будет удобно =)
На картинках диффуз + лайтмап + AO + [GLOW]
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо pozitiffcat за это полезное сообщение:
|
|
18.12.2013, 01:18
|
#138
|
Мастер
Регистрация: 12.01.2009
Сообщений: 979
Написано 388 полезных сообщений (для 631 пользователей)
|
Ответ: Clear Engine (Понятный движок)
При разработке игры проще разрабатывать движок )
|
Показатель неюзабельности движка - это нужно исправлять.
Картинка нормальная - визуальный дизайн помогает делать графику лучше, сам моделил?
ЗЫ: Вроде где то в начале темы был вопрос о том как сделать размытие гаусса быстрей? Есть альтернатива - pingpong. Смысл в том что создаешь две текстуры (оптимальный вариант 128х128 и 64х64) и перерисовываешь несколько раз (около 18 ) туда-сюда, линейная фильтрация размывает изображение. Только еще стоит обратить внимание на смещение (в статье этого нет непочему-то): вот когда тебе надо перерисовать из одной текстуры в другую обычно используют смещение на пол пиксела, чтобы тексель в пиксель попадал и изображение не размывалось - так вот в данном случае как раз не нужно этого делать чтобы изображение больше смазывалось, только оно будет постепенно уезжать вниз-вправо, поэтому его можно компенсировать через каждые 2 прохода (я так делал) или сразу после всех проходов. Вот я сам буквально на днях делал размытие для блума в двух вариантах - гаусс (горизонтальный/вертикальный) с ядром в 7 семплов и текстурами 128х128 и вот такой пингпонг - разница почти не заметна, а выйгрышь по скорости на слабых платформах будет. Недостаток пингпонга: если изображение стратает большим количеством горизонтальных и вертикальных контрастных линий то будет заметна пикселизация, увеличение количества проходов ситуацию не спасет, и вообще пингпонг очень консервативен - если изменить разрешение таргетов/текстур или изменить кол-во проходов то изображение в большинстве случаев только хуже становится. Однако из источника выше говорят что даже в crysis использовали - очень хорошо настроено было.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
18.12.2013, 10:39
|
#139
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: Clear Engine (Понятный движок)
При разработке игры проще разрабатывать движок )
|
Тут я полностью согласен. При разработке всплывают реальные задачи а не абстрактные модели( которые в большинстве движков реализованы криво ).
__________________
|
(Offline)
|
|
18.12.2013, 11:07
|
#140
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: Clear Engine (Понятный движок)
Модельки мои
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
18.12.2013, 13:30
|
#141
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Clear Engine (Понятный движок)
вот когда тебе надо перерисовать из одной текстуры в другую обычно используют смещение на пол пиксела, чтобы тексель в пиксель попадал и изображение не размывалось - так вот в данном случае как раз не нужно этого делать чтобы изображение больше смазывалось
|
это в неправославном dx координата указывает на центр текселя, поэтому надо смещать. в гл-е же по умолчанию координата указывает на верхний левый угол текселя поэтому смещать ничего ненадо.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
|
|
18.12.2013, 14:12
|
#142
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Clear Engine (Понятный движок)
это в неправославном dx координата указывает на центр текселя, поэтому надо смещать
|
к слову, в дх10-11 уже не надо
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо Mr_F_ за это полезное сообщение:
|
|
18.12.2013, 15:05
|
#143
|
Мастер
Регистрация: 12.01.2009
Сообщений: 979
Написано 388 полезных сообщений (для 631 пользователей)
|
Ответ: Clear Engine (Понятный движок)
это в неправославном dx координата указывает на центр текселя, поэтому надо смещать.
|
Подожди, если бы указывала в центр, тогда как раз не надо было бы смещать, потому что дискретная экранная координата пиксела соответствовала бы центру тексела рисуемой текстуры. В d3d9 текстурная координата ( 0, 0 ) указывает в верхний левый угол текселя, поэтому и надо смещать на центр текселя. Или ты имеешь ввиду что в opengl экранные координаты смещены?
Но вобщем смысл понял, буду разбираться в opengl, тогда в той статье все верно.
В любом случае какой инструментарий предоставляется с тем и приходится работать...
Кстати, d3d9 еще актуален? Например для xp или там для vista без сервис пака, если считать что у меня нет dx10, только 11 и 9?
|
(Offline)
|
|
18.12.2013, 15:24
|
#144
|
Мастер
Регистрация: 12.01.2009
Сообщений: 979
Написано 388 полезных сообщений (для 631 пользователей)
|
Ответ: Clear Engine (Понятный движок)
А все я разобрался
Да пиксел ( 0, 0 ) должен по идее указывать на координату 0.5f / width, 0.5f / heigth, а он на самом деле указывает на 0.0f, 0.0f, так что он по верхнему левому углу позиционируется.
|
(Offline)
|
|
19.12.2013, 15:34
|
#145
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: Clear Engine (Понятный движок)
Запилил видео где бегают курочки
http://rutube.ru/video/e6a77187383e3...12ca90dafdbcb/
На саму модель потратил около 4х часов (( lowpoly, учусь пока
код для сцены в неск строк
void ceMain(){
ceCateye::createCateye("render", 800, 480);
auto lightmapProgram = ceCateye::instance()->scene()->loadProgram("lightmapambient.cep");
//ceCateye::instance()->scene()->setPostProcessor("glow.cpe");
ceCateye::instance()->scene()->camera()->setPosition(55, 30, -20);
ceCateye::instance()->scene()->camera()->setRotation(25, -70, 0);
auto L_lm = ceCateye::instance()->scene()->loadModel("L_lm.cex");
auto lightmap = ceCateye::instance()->scene()->loadTexture("L_sm.jpg");
auto ambientmap = ceCateye::instance()->scene()->loadTexture("L_lm.jpg");
L_lm->setTexture(lightmap, ceModel::TextureLightmap);
L_lm->setTexture(ambientmap, ceModel::TextureAmbient);
L_lm->setProgram(lightmapProgram);
ceCateye::instance()->scene()->addTask(std::shared_ptr<Chicken>(new Chicken(6, 0, 3, 1, 25)));//код курицы - на основе состояний, 2 сек ходит 1 сек клюёт еще с десяток строк
ceCateye::instance()->scene()->addTask(std::shared_ptr<Chicken>(new Chicken(12, 0, 6, 1.5, -60)));
ceCateye::instance()->scene()->addTask(std::shared_ptr<Chicken>(new Chicken(12, 0, 2, 2.0, 60)));
ceCateye::instance()->start();
}
UPD:
4 часа еще на волка потратил
Последний раз редактировалось pozitiffcat, 20.12.2013 в 00:33.
|
(Offline)
|
|
Эти 7 пользователя(ей) сказали Спасибо pozitiffcat за это полезное сообщение:
|
|
24.12.2013, 00:23
|
#146
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: Clear Engine (Понятный движок)
Запилил моушены. Это заданный последовательный набор движений объекта на сцене. Впринципе не только объекта сцены, в моушен положить можно что угодно.
В сцене хранится MotionDispatcher, в нем можно создавать нити MotionThread, путем ручного создания или загрузки из xml файла. Все нити работают асинхронно. В каждой нити хранится список действий Motion, которые воспроизводятся поочереди, одно действие может хранить несколько в себе. К нити можно присвоить объект MotionObject, тогда он будет передаваться в контексте Motion.
Пример:
Я хочу что-бы волк шел потом шел и поворачивал, затем бил лапами и шел дальше, и так бесконечно. Как это сделать.
По дефолту у нас нет реализации моушенов, их надо запилить. (в дальнейшем подумаю над стандартными)
class MotionMove : public ceMotion, public ceMotionConstructor{
public:
// при загрузки из файла движок будет сам создавать нужный моушен
std::shared_ptr<ceMotion> createMotion(){
return std::shared_ptr<MotionMove>(new MotionMove);
}
// перезагрузка класса в этом методе
void setParams(const std::string ¶ms){
m_moveDistance = atof(params.c_str());
}
// само действие
bool doMotion(const std::shared_ptr<ceMotionContext> &motionContext, double frameTime){
// из контекста получаем объект и двигаем
std::static_pointer_cast<ceModel>(motionContext->motionObject())->moveForward(frameTime);
m_moveDistance -= frameTime;
return m_moveDistance > 0;
}
private:
float m_moveDistance;
};
И в том же духе остальные действия, которые будут в игре.
Все классы нужно зарегистрировать под каким-то именем я буду называть это имя класса в xml файле
engine->scene()->motionDispatcher()->registerMotionConstructor("MotionMove", std::shared_ptr<MotionMove>(new MotionMove));
// register any classes
Все, с регистрацией классов покончено, впринципе можно создать личную библиотеку моушенов и юзать в любом своем приложении.
Теперь как загрузить нить.
Пример xml файла
<cet>
<motion class="MotionChangeAnimation" params="1;10;1;10" />
<motion class="MotionMove" params="9" />
<motion together="1">
<motion class="MotionMove" params="3" />
<motion class="MotionRotate" params="-160;3" />
</motion>
<motion class="MotionChangeAnimation" params="11;20;0;10" />
<motion class="MotionWaitFinishModelAnimation" params="" />
<motion class="MotionRestart" params="" />
</cet>
Видно, что мы создаем моушен, имя класса это то имя с которым мы зарегистрировали, строка параметров будет передаваться при перезагрузке класса, а именно в setParams, там мы его ручками парсим
Если наш моешен должен выполнять одновременно несколько действий, например ходьба и поворот, то нам в моушен нужно вложить несколько моушенов, причем атрибут together отвечает за то, как будут выполняться моушены, по очереди или сразу все.
Теперь как загрузить этот файл в коде программы:
m_motionThread = m_wolf->parentScene()->motionDispatcher()->loadMotionThread("wolf_motion.cet");
m_motionThread->setMotionObject(m_wolf);
m_motionThread->setListener(this);
Тут загружается сама нить, после того как она загружена моушены начнут сразу работать. Важно задать объект для контекста так как мы хотим его в дальнейшем использовать, и последнее нить умеет возвращать callback'и.
Ну как-то так
|
(Offline)
|
|
24.12.2013, 00:48
|
#147
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Clear Engine (Понятный движок)
Когда речь идёт о "простом" или "удобном" движке, то речь идёт о самом приятном и "гладком" пути обучения для программиста, и добавление абстракций подобных Motion, только усложняет этот процесс. Заместо того чтобы разраб изучал топик и сам начинал мыслить как разраб, разные решения пытаются предлагать всякие абстракции, типо помогая разрабу, на самом деле лишь сбивает и тормозит.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо moka за это полезное сообщение:
|
|
24.12.2013, 00:59
|
#148
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Clear Engine (Понятный движок)
В сцене хранится MotionDispatcher, в нем можно создавать нити MotionThread, путем ручного создания или загрузки из xml файла. Все нити работают асинхронно.
|
std::static_pointer_cast<ceModel>(motionContext->motionObject())
|
Все классы нужно зарегистрировать
|
Асинхронные нити, контексты, регистрировать классы? Ради того чтобы моделька лапами подрыгала? Да ты издеваешься, специально придумал самую мудрёную конструкцию, чтобы юмористически контрастировала с названием твоего движка? :D
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо Mr_F_ за это полезное сообщение:
|
|
24.12.2013, 09:08
|
#149
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: Clear Engine (Понятный движок)
Сообщение от moka
Когда речь идёт о "простом" или "удобном" движке, то речь идёт о самом приятном и "гладком" пути обучения для программиста, и добавление абстракций подобных Motion, только усложняет этот процесс. Заместо того чтобы разраб изучал топик и сам начинал мыслить как разраб, разные решения пытаются предлагать всякие абстракции, типо помогая разрабу, на самом деле лишь сбивает и тормозит.
|
не ну, стандартная библиотека моушенов естественно будет, лучше так чем никак
|
(Offline)
|
|
24.12.2013, 09:11
|
#150
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: Clear Engine (Понятный движок)
Сообщение от Mr_F_
Асинхронные нити, контексты, регистрировать классы? Ради того чтобы моделька лапами подрыгала? Да ты издеваешься, специально придумал самую мудрёную конструкцию, чтобы юмористически контрастировала с названием твоего движка? :D
|
а как ты еще предлагаешь решить эту задачу. Когда будет стандартная библиотека, достаточно будет двух строчек кода, для загрузки и привязки к объекту, для сложных вещей программист будет сам регистрировать моушены
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:29.
|