Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 05.12.2013, 18:35   #136
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 979
Написано 388 полезных сообщений
(для 631 пользователей)
Ответ: Clear Engine (Понятный движок)


а чем хуже? всегда их юзаю как раз.
Они просто медленней по факту, вот тут замеряли:
http://www.gamedev.ru/code/articles/?id=4238

Вот еще на тему оптимизации:
http://www.xakep.ru/post/60145/?print=true

Также видел что simd можно юзать и на armv6 и выше.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Mr_F_ (05.12.2013)
Старый 18.12.2013, 00:35   #137
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Clear Engine (Понятный движок)

Новые картинки работаю над проектом, волки воруют кур, нужно их остановить )) При разработке игры проще разрабатывать движок )
Очень много поменялось в концепции, убралась абстракция видеодрайвера, теперь модель сама знает как себя рисовать (конкретно реализованая для конкретного рендера), меньше виртуальных функций.. Объект ядра теперь синглтон.. Постпроцесс и шейдеры описываются скриптами в виде xml файлов, вобщем нет смысла рассказывать, я могу еще 100 раз все переделать. Буду выкладывать наработки просто, в дальнейшем скомпилю более-менее нармальный движок для всех платформ, запилю доку и выложу кому интересно. Движок конечно не убийца Юнити, но думаю делать на нем что-либо на плюсах будет удобно =)


На картинках диффуз + лайтмап + AO + [GLOW]
(Offline)
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо pozitiffcat за это полезное сообщение:
FREE MAN (18.12.2013), KCEPOKC (27.12.2013), mr.DIMAS (18.12.2013), Samodelkin (18.12.2013)
Старый 18.12.2013, 01:18   #138
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 979
Написано 388 полезных сообщений
(для 631 пользователей)
Ответ: Clear Engine (Понятный движок)

При разработке игры проще разрабатывать движок )
Показатель неюзабельности движка - это нужно исправлять.

Картинка нормальная - визуальный дизайн помогает делать графику лучше, сам моделил?

ЗЫ: Вроде где то в начале темы был вопрос о том как сделать размытие гаусса быстрей? Есть альтернатива - pingpong. Смысл в том что создаешь две текстуры (оптимальный вариант 128х128 и 64х64) и перерисовываешь несколько раз (около 18 ) туда-сюда, линейная фильтрация размывает изображение. Только еще стоит обратить внимание на смещение (в статье этого нет непочему-то): вот когда тебе надо перерисовать из одной текстуры в другую обычно используют смещение на пол пиксела, чтобы тексель в пиксель попадал и изображение не размывалось - так вот в данном случае как раз не нужно этого делать чтобы изображение больше смазывалось, только оно будет постепенно уезжать вниз-вправо, поэтому его можно компенсировать через каждые 2 прохода (я так делал) или сразу после всех проходов. Вот я сам буквально на днях делал размытие для блума в двух вариантах - гаусс (горизонтальный/вертикальный) с ядром в 7 семплов и текстурами 128х128 и вот такой пингпонг - разница почти не заметна, а выйгрышь по скорости на слабых платформах будет. Недостаток пингпонга: если изображение стратает большим количеством горизонтальных и вертикальных контрастных линий то будет заметна пикселизация, увеличение количества проходов ситуацию не спасет, и вообще пингпонг очень консервативен - если изменить разрешение таргетов/текстур или изменить кол-во проходов то изображение в большинстве случаев только хуже становится. Однако из источника выше говорят что даже в crysis использовали - очень хорошо настроено было.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pozitiffcat (18.12.2013)
Старый 18.12.2013, 10:39   #139
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: Clear Engine (Понятный движок)

При разработке игры проще разрабатывать движок )
Тут я полностью согласен. При разработке всплывают реальные задачи а не абстрактные модели( которые в большинстве движков реализованы криво ).
__________________

(Offline)
 
Ответить с цитированием
Старый 18.12.2013, 11:07   #140
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Clear Engine (Понятный движок)

Модельки мои
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Samodelkin (18.12.2013)
Старый 18.12.2013, 13:30   #141
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Clear Engine (Понятный движок)

вот когда тебе надо перерисовать из одной текстуры в другую обычно используют смещение на пол пиксела, чтобы тексель в пиксель попадал и изображение не размывалось - так вот в данном случае как раз не нужно этого делать чтобы изображение больше смазывалось
это в неправославном dx координата указывает на центр текселя, поэтому надо смещать. в гл-е же по умолчанию координата указывает на верхний левый угол текселя поэтому смещать ничего ненадо.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
pozitiffcat (18.12.2013), Samodelkin (18.12.2013)
Старый 18.12.2013, 14:12   #142
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Clear Engine (Понятный движок)

это в неправославном dx координата указывает на центр текселя, поэтому надо смещать
к слову, в дх10-11 уже не надо
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо Mr_F_ за это полезное сообщение:
HolyDel (19.12.2013), pozitiffcat (18.12.2013), Samodelkin (18.12.2013)
Старый 18.12.2013, 15:05   #143
Samodelkin
Мастер
 
Регистрация: 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
Samodelkin
Мастер
 
Регистрация: 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
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 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 часа еще на волка потратил
Миниатюры
Нажмите на изображение для увеличения
Название: chicken_td.png
Просмотров: 690
Размер:	49.9 Кб
ID:	19936  Нажмите на изображение для увеличения
Название: w.png
Просмотров: 678
Размер:	49.2 Кб
ID:	19938  

Последний раз редактировалось pozitiffcat, 20.12.2013 в 00:33.
(Offline)
 
Ответить с цитированием
Эти 7 пользователя(ей) сказали Спасибо pozitiffcat за это полезное сообщение:
ARA (19.12.2013), Arton (19.12.2013), FREE MAN (21.12.2013), mr.DIMAS (20.12.2013), Samodelkin (19.12.2013), SBJoker (19.12.2013), St_AnGer (19.12.2013)
Старый 24.12.2013, 00:23   #146
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 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 &params){
        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
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Clear Engine (Понятный движок)

Когда речь идёт о "простом" или "удобном" движке, то речь идёт о самом приятном и "гладком" пути обучения для программиста, и добавление абстракций подобных Motion, только усложняет этот процесс. Заместо того чтобы разраб изучал топик и сам начинал мыслить как разраб, разные решения пытаются предлагать всякие абстракции, типо помогая разрабу, на самом деле лишь сбивает и тормозит.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо moka за это полезное сообщение:
HolyDel (24.12.2013), Mr_F_ (24.12.2013)
Старый 24.12.2013, 00:59   #148
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Clear Engine (Понятный движок)

В сцене хранится MotionDispatcher, в нем можно создавать нити MotionThread, путем ручного создания или загрузки из xml файла. Все нити работают асинхронно.
std::static_pointer_cast<ceModel>(motionContext->motionObject())
Все классы нужно зарегистрировать
Асинхронные нити, контексты, регистрировать классы? Ради того чтобы моделька лапами подрыгала? Да ты издеваешься, специально придумал самую мудрёную конструкцию, чтобы юмористически контрастировала с названием твоего движка? :D
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо Mr_F_ за это полезное сообщение:
HolyDel (26.12.2013), moka (24.12.2013), Samodelkin (24.12.2013)
Старый 24.12.2013, 09:08   #149
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Clear Engine (Понятный движок)

Сообщение от moka Посмотреть сообщение
Когда речь идёт о "простом" или "удобном" движке, то речь идёт о самом приятном и "гладком" пути обучения для программиста, и добавление абстракций подобных Motion, только усложняет этот процесс. Заместо того чтобы разраб изучал топик и сам начинал мыслить как разраб, разные решения пытаются предлагать всякие абстракции, типо помогая разрабу, на самом деле лишь сбивает и тормозит.
не ну, стандартная библиотека моушенов естественно будет, лучше так чем никак
(Offline)
 
Ответить с цитированием
Старый 24.12.2013, 09:11   #150
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Clear Engine (Понятный движок)

Сообщение от Mr_F_ Посмотреть сообщение
Асинхронные нити, контексты, регистрировать классы? Ради того чтобы моделька лапами подрыгала? Да ты издеваешься, специально придумал самую мудрёную конструкцию, чтобы юмористически контрастировала с названием твоего движка? :D
а как ты еще предлагаешь решить эту задачу. Когда будет стандартная библиотека, достаточно будет двух строчек кода, для загрузки и привязки к объекту, для сложных вещей программист будет сам регистрировать моушены
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 04:33.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com