![]() |
Ответ: [TrueHorror] - разработка
Цитата:
Немного посидев на юнити, привык к подобному использованию объектов гуи, типа кнопок и прочего. Код:
if( Button( blablabla ) == blablabla ) и немного все прикинув, сделал у себя в двиге также. Создается std::queue для каждого типа объектов( изображение( квад с текстурой ), текст ). Вызывая соотвествующую функцию ( Button, Image ) параметры объекта помещаются в соответствующую очередь, а затем после рендеринга основной геометрии выводятся на экран при общей матрице проекции и стейтах. После очередь очищается. Правильно ли я уловил идею что используют в юнити? |
Ответ: [TrueHorror] - разработка
Цитата:
Думай в первую очередь о простоте кода, ты его для людей пишешь, а не для компьютеров. А для оптимизации выполнения будет достаточно критические участки грамотно написать - это меньше 5% кода наверняка. |
Ответ: [TrueHorror] - разработка
Цитата:
|
Ответ: [TrueHorror] - разработка
Цитата:
|
Ответ: [TrueHorror] - разработка
Цитата:
|
Ответ: [TrueHorror] - разработка
Цитата:
|
Ответ: [TrueHorror] - разработка
Цитата:
|
Ответ: [TrueHorror] - разработка
Цитата:
Дело в том что я уже попробовал писать игру на скриптах. Для этого я завернул все функции движка в луа-обертки, и получилось так что я пишу всю игру на луа. То есть в экзешнике запускается луа виртуальная машина и все выполняется на ней. Но блин, какой смысл писать на луа, когда то же можно написать на си? Гибкость изменения скриптов без перекомпиляции? Сейчас, когда движок отделен от игры, скорость компиляции+линковки игровой части 0,57 сек. Кароч приведи весомые аргументы использования скриптов в маленьком игровом проекте. По поводу опций компилятора. Нужно ли для движка выключить поддержку исключений( в движке не использую их )? Тут довольно хорошие доводы в пользу отключения . |
Ответ: [TrueHorror] - разработка
Цитата:
Цитата:
1. Я пытался сделать универсальный движок. 2. Как следствие пытался сделать максимально гибкий API. ИМХО, проблема заключалась в неправильном понимании движка. Я его считал еще одним уровнем абстракции и обобщения более низкоуровневого функционала. На самом деле движок должен выполнять более конкретные задачи. Сейчас я считаю что делать универсальный движок в корне неверное решение - для этих целей есть UDK, Unity3D и прочие решения. Лучше определиться с парой-тройкой игр (или одной большой игрой), которые собираешься делать и исходить из того что нужно для этой игры. Не пытаться делать что то еще "на всякий случай" - только то что необходимо. Как следствие отсюда можно легко обнаружить что весь предполагаемый гибкий функционал движка превращается в вполне понятный жесткий последовательный набор действий, для воспроизведения/рендера игровой медии. Таким образом никаких мега гибких API как в тех же библиотеках dxsdk вообще не нужно. Если правильно подобрать набор тулз для запланированных проектов, можно в целом обойтись только ими и минимальными возможностями скриптинга. Для более сложных случаев возможно потребуется написать библиотеку с игровыми кодами. Для маленького игрового проекта движок не нужен вообще - используй функционал dx напрямую из игровых кодов. |
Ответ: [TrueHorror] - разработка
Появился вопрос про правильную организацию рендеринга. Алгоритм описывать долго, поэтому код( unordered_map<IDirect3DTexture9*,vector<Mesh*>> g_meshes )
Код:
for( auto groupIterator = g_meshes.begin(); groupIterator != g_meshes.end(); ++groupIterator ) Код:
g_device->SetTexture( 0, A ); Каждый меш отрисовываем всеми источниками света с аддитивным блендингом. Есть какие либо замечания\поправки\баги в алгоритме? |
Ответ: [TrueHorror] - разработка
Группировать по текстуре, шейдерам, эффектам это правильно. Но вот рисовать что-то более одного раза без особой на то причины - странно. Нельзя заранее определить какие источники света действуют на примитив и список с ними передать в пиксельный шейдер, который сразу сложит результат яркости для каждого пикселя? Еще посмотри deferred shading - необязательно сразу освещение целиком в screen space переводить, но кое что оттуда можно полезное взять, например методы локализации источников света.
|
Ответ: [TrueHorror] - разработка
Цитата:
Код:
if( !LightIntersectsMesh( mesh, light )) Цитата:
|
Ответ: [TrueHorror] - разработка
Цитата:
|
Ответ: [TrueHorror] - разработка
Цитата:
Цитата:
|
Ответ: [TrueHorror] - разработка
Цитата:
|
Часовой пояс GMT +4, время: 04:47. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot