Перейти вниз
graveman
graveman
Сообщения : 22
Дата регистрации : 2019-10-05
Откуда : Татарстан
https://coderdailynotes.wordpress.com

Собираю движок из всех ранее написанных частей Empty Собираю движок из всех ранее написанных частей

в Сб Окт 05, 2019 11:00 pm
Привет всем! Понимаю, что писать движки стало бессмысленно еще лет 10-15 назад. Сейчас -  это просто хобби.
Раньше начинал разработку множества проЭктов и забрасывал. За годы забил хард мусором написал всякие вспомогательные вещи в разном стиле кода и с разной структурой проектов.
Настало время собрать этот зоопарк в одну библиотеку под более-менее единым стилем оформления кода. Чтобы, наконец, начать писать гребаный движок на этой основе.
Но стиль кода надо сначала разработать.

Эпс, сбылась твоя мечта! Теперь можно свободно обсуждать движки и самые сумасшедшие бзики и подходы проганья, не боясь воплей троллей и хейтеров. Ведь ты теперь здесь можешь их сдувать, просто лишь перданув в плед  Very Happy  .


Последний раз редактировалось: graveman (Вс Окт 06, 2019 12:28 am), всего редактировалось 2 раз(а)
graveman
graveman
Сообщения : 22
Дата регистрации : 2019-10-05
Откуда : Татарстан
https://coderdailynotes.wordpress.com

Собираю движок из всех ранее написанных частей Empty Re: Собираю движок из всех ранее написанных частей

в Сб Окт 05, 2019 11:10 pm
Желательно бы создать ветку по движкописанию.
graveman
graveman
Сообщения : 22
Дата регистрации : 2019-10-05
Откуда : Татарстан
https://coderdailynotes.wordpress.com

Собираю движок из всех ранее написанных частей Empty Re: Собираю движок из всех ранее написанных частей

в Вс Окт 06, 2019 1:29 pm
Начинаю детально изучать книги Луны, Адамса и движки Urho3D, Nebula2 Device, Irrlicht и Catmother. Попутно буду писать свои книги по геймдеву.
Admin
Admin
Admin
Сообщения : 48
Дата регистрации : 2019-08-31

Собираю движок из всех ранее написанных частей Empty Re: Собираю движок из всех ранее написанных частей

в Пн Окт 07, 2019 4:29 pm
Ясно.

Кстати, тема перемещена в, как раз созданный по такому случаю, раздел "Проекты" Arrow
graveman
graveman
Сообщения : 22
Дата регистрации : 2019-10-05
Откуда : Татарстан
https://coderdailynotes.wordpress.com

Собираю движок из всех ранее написанных частей Empty Re: Собираю движок из всех ранее написанных частей

в Сб Окт 19, 2019 10:46 am
Дабы несколько разбавить общее кислое настроение эпсилона и мое, забацал статью для понимания структуры данных "Дерево".
graveman
graveman
Сообщения : 22
Дата регистрации : 2019-10-05
Откуда : Татарстан
https://coderdailynotes.wordpress.com

Собираю движок из всех ранее написанных частей Empty Re: Собираю движок из всех ранее написанных частей

в Сб Окт 19, 2019 5:08 pm
Подправил проект дерева узлов. Можешь потестить. Я потестил, нашел ошибку, исправил. В доке NodeBase написано как использовать. Если будет непонятно, напишу как использовать. Знаешь, зае..ался я с ним. Вроде как готово. Дальше делаю "свинью на танке".
graveman
graveman
Сообщения : 22
Дата регистрации : 2019-10-05
Откуда : Татарстан
https://coderdailynotes.wordpress.com

Собираю движок из всех ранее написанных частей Empty Re: Собираю движок из всех ранее написанных частей

в Вс Окт 20, 2019 9:03 pm
Пописал экспортер. Как-то всрато в блендере сделан экспорт текстурных координат, что сводит на нет всю прелесть использования техники индексирования вершин.
Admin
Admin
Admin
Сообщения : 48
Дата регистрации : 2019-08-31

Собираю движок из всех ранее написанных частей Empty Re: Собираю движок из всех ранее написанных частей

в Пн Окт 21, 2019 9:06 pm
graveman пишет:забацал статью для понимания структуры данных "Дерево".
1) Возможно, тебе стоит добавить в профиль ссылку на свой сайт ( https://coderdailynotes.wordpress.com );
2) Прочёл статью. В процессе чтения возникли следующие мысли:
Спойлер:

Как известно для анимации персонажа используется технология скелетной анимации
Пропущена запятая после "известно".




Другая функция дерева состоит в том, чтобы дать возможность использовать одну 3D-сетку для нескольких экземпляров игровых объектов
Термин "3D-сетку", на мой взгляд, труден для восприятия. Может заменить это слово на более простое в понимании "3D-модель"?




Конечно, это упрощенное описание, но суть оно передает.
Ты случайно не из числа избегающих букву "ё"? А то у тебя "упрощенное" без неё.




Необязательно, чтобы узел имел список дочерних узлов.
Лишняя запятая.




В пункте "Как программно представить дерево?" не указана разница между вариантами представления. Возможно она слишком очевидна, и я придираюсь, но возможно её всё же стоит расписать.




При уничтожении узла (стирании его из памяти), сначала нужно удалить узел из дерева.
Может не "удалить", а "отцепить"/"исключить"?
3) Можно разместить эту твою статью на моём форуме? Естественно, с указанием авторства и ссылки на первоисточник. (Правда, смущает, что там указана аж целая лицензия, и я не уверен, что до конца понял, что именно нужно указывать на случай просто копипасты и на случай возможных последующих правок: вроде авторство, ссылку на первоисточник; вроде всё.)

graveman пишет:Подправил проект дерева узлов. Можешь потестить.
15 замечаний(спойлер):
1) https://github.com/graveman82/Zavod3DHelperLib/blob/master/DataStructs/HierNode.h#L22
Вроде как пропущено описание для ErrorReason;

2) https://github.com/graveman82/Zavod3DHelperLib/blob/master/DataStructs/HierNode.h#L28
Не_ошибка: в конце "kER_CYCLING," бессмысленная запятая;

3) https://github.com/graveman82/Zavod3DHelperLib/blob/master/DataStructs/HierNode.h#L56
В приватной секции все комменты через "\\", а в публичной -- через "\\\". Потерян 1 слеш?

4) https://github.com/graveman82/Zavod3DHelperLib/blob/master/DataStructs/HierNode.h#L61
У атрибута "HierNode* parent_;" нет описания;

5) А что за пустые комментарии в определениях методов, начиная с 71 строки)? https://github.com/graveman82/Zavod3DHelperLib/blob/master/DataStructs/HierNode.h#L71

6) Какой смысл ставить "const" в объявлении методов?

7) https://github.com/graveman82/Zavod3DHelperLib/blob/master/DataStructs/HierNode.cpp
В самом начале файла, комментарий не в... забыл название, а гуглить лень... короче в обычном формате, а нужно как в хедере этого ресурсного файла;

8) В https://github.com/graveman82/Zavod3DHelperLib/blob/master/DataStructs/HierNode.cpp#L2 указано имя файла "HierNode.cpp", но в "HierNode.h" имя файла не указано...

9) https://github.com/graveman82/Zavod3DHelperLib/blob/master/DataStructs/HierNode.cpp#L33
"Перед вызовом операции необходимо, чтобы указатели на дочерние узлы где-то были сохранены." -- запятая должна быть перед словом "необходимо", а не после него;

10) И вообще, в HierNode.cpp почти нет ни одного комментария к определению метода;

11) https://github.com/graveman82/Zavod3DHelperLib/blob/master/DataStructs/NodeBase.h#L23
"Для использования этого класса, создайте производный класс и реализуйте в нем метод UpdateCachedData(). Например:" -- запятая не нужна;

12) https://github.com/graveman82/Zavod3DHelperLib/blob/master/DataStructs/NodeBase.h#L30
Не_ошибка: ну там, нет отступа между "\\" и последующим текстом;

13) https://github.com/graveman82/Zavod3DHelperLib/blob/master/DataStructs/NodeBase.h#L67
"virtual void UpdateCachedData(unsigned long dirtyBitIndex) = 0;" -- странный синтаксис, либо я чего-то не догоняю, либо имелось ввиду "... unsigned long dirtyBitIndex = 0);";

14) https://github.com/graveman82/Zavod3DHelperLib/blob/master/DataStructs/NodeBase.h#L70
Лишний пробел после имени метода;

15) https://github.com/graveman82/Zavod3DHelperLib/blob/master/DataStructs/NodeBase.h#L81
Возможна ошибка: "return (flags_ & (1ul << dirtyBitIndex));" пытается return'уть unsigned long, которое при конвертировании в bool тупо отбрасывает старшие байты. Нужно: "return (1ul &  (flags_ >> dirtyBitIndex));";

16) https://github.com/graveman82/Zavod3DHelperLib/blob/master/DataStructs/NodeBase.cpp#L44
Лишний пробел после имени метода.

graveman пишет:Можешь потестить.
Как-нибудь потом.

graveman пишет:Если будет непонятно, напишу как использовать.
Угу, малопонятно. Ты даже не придерживаешься единой терминологии.


P.S.: Я не кислый -- просто немного не до форума. К тому же, стараюсь держаться по-админски, поэтому стараюсь избегаю написания бессмысленной мусорной фигни.

P.P.S.: Кстати, в соседней статье "Инициализация Direct3D9 в приложении", глаз зацепил фразу "Из SDK ясно только, что 5-й параметр MultiSampleType описывает технику мультисэмплинга. Обычно именно пользователь задает уровень мультисэмплинга в расширенных настройках видео. А выбор пользователя нужно отобразить на значение перечислимого типа D3DMULTISAMPLE_TYPE.".
Поясняю: при попытке использования мультисэмплинга при инициализации DX9, я столкнулся с тем, что не все "уровни мультисэмплинга" поддерживаются моей видеокартой, хотя в играх могу выбрать любой (вплоть до 16х). Т.е. когда игрок выбирает уровень мультисэмплинга, для движка его выбор носит чисто рекомендательный характер.
+
"В pQualityLevels нужно передать указатель на беззнаковое длинное целое число, в которое будет записано число уровней качества мультисэмплинга."
Это значение используется только для немаскированного режима (когда MultiSampleQuality == D3DMULTISAMPLE_NONMASKABLE). Не знаю, на кой так было изголяться. Для стандартных режимов QualityLevels всегда равно нулю.
graveman
graveman
Сообщения : 22
Дата регистрации : 2019-10-05
Откуда : Татарстан
https://coderdailynotes.wordpress.com

Собираю движок из всех ранее написанных частей Empty Re: Собираю движок из всех ранее написанных частей

в Сб Окт 26, 2019 7:57 pm
Admin пишет:
1) Возможно, тебе стоит добавить в профиль ссылку на свой сайт
Сделано!
Admin пишет:
2) Прочёл статью. В процессе чтения возникли следующие мысли
Поправил.
Admin пишет:
Конечно, это упрощенное описание, но суть оно передает.
Ты случайно не из числа избегающих букву "ё"? А то у тебя "упрощенное" без неё.
Да, я не пользуюсь буквой "ё", хотя ничего против нее не имею. Просто откуда-то привычка появилась. Букву "ё" же как-то раньше часто на "е" заменяли, типа она не везде поддерживается. Ну как-то от этого корни растут.
Admin пишет:
Необязательно, чтобы узел имел список дочерних узлов.
Лишняя запятая.
Меня в школе всегда учили, что перед подчинительными союзами ставить запятую. "Необязательно", если не ошибаюсь - это главное предложение, состоящее из одного слова. Я не прав?
Admin пишет:
3) Можно разместить эту твою статью на моём форуме? Естественно, с указанием авторства и ссылки на первоисточник. (Правда, смущает, что там указана аж целая лицензия, и я не уверен, что до конца понял, что именно нужно указывать на случай просто копипасты и на случай возможных последующих правок: вроде авторство, ссылку на первоисточник; вроде всё.)
Да, валяй, просто укажи источник и все!
graveman
graveman
Сообщения : 22
Дата регистрации : 2019-10-05
Откуда : Татарстан
https://coderdailynotes.wordpress.com

Собираю движок из всех ранее написанных частей Empty Re: Собираю движок из всех ранее написанных частей

в Сб Окт 26, 2019 8:45 pm
Поправил код согласно некоторым замечаниям.
Правки замечаний по коду:
Admin пишет:
2) https://github.com/graveman82/Zavod3DHelperLib/blob/master/DataStructs/HierNode.h#L28
Не_ошибка: в конце "kER_CYCLING," бессмысленная запятая;
Пофиг. Я обычно так делаю на случай, если потом надо будет добавлять данные, чтобы не нажимать клавишы запятой и Enter.
Admin пишет:
3) https://github.com/graveman82/Zavod3DHelperLib/blob/master/DataStructs/HierNode.h#L56
В приватной секции все комменты через "\\", а в публичной -- через "\\\". Потерян 1 слеш?
Публичная секция - это интерфейс, которым пользуется пользователь класса и эти комментарии для него он может сгенерировать через доксиген в справку, если захочет. Комментарии в приватной секции - для меня и тех, кто любит копаться и разбираться или модифицировать код. Он не должен входить в общую документацию, для чего он не должен цепляться доксигеном.
Admin пишет:
5) А что за пустые комментарии в определениях методов, начиная с 71 строки)? https://github.com/graveman82/Zavod3DHelperLib/blob/master/DataStructs/HierNode.h#L71
Я решил развиваться в плане кодстайла и пытался использовать кодстайл движка Nebula Device 2. Только когда прочитал твое сообщение, мне в голову закралась мысль, что эти комментарии были сгенерированы в какой-то программе. Так согласен - пустые доксигеновские комменты лучше в будущем не ставить. Сейчас мне убирать их лень, потому что придется смотреть, не удалил ли я чего лишнего по невнимательности.
Admin пишет:
6) Какой смысл ставить "const" в объявлении методов?
Чувак, тебя ждет книга Липмана! const в объявлении (и в определении метода тогда он тоже должен присутствовать) говорит о том, что данный метод не должен изменять значения членов класса (что не мешает ему изменять значения, на которые указывают члены-указатели Wink ).
const вообще придуман программистами для облегчения своего труда, чтобы не следить за изменением того, что не должно быть изменено. Они нагрузили этой обязанностью компилятор.
Admin пишет:
7) https://github.com/graveman82/Zavod3DHelperLib/blob/master/DataStructs/HierNode.cpp
В самом начале файла, комментарий не в... забыл название, а гуглить лень... короче в обычном формате, а нужно как в хедере этого ресурсного файла;
Честно говоря я уже не помню почему, но исправлять лень. Обычно комменты в cpp-хах нужны чисто программисту, который собирается изменять код реализации.
А программисту-пользователю они не нужны. Думаю, отсюда корни растут.
Admin пишет:
Cool В https://github.com/graveman82/Zavod3DHelperLib/blob/master/DataStructs/HierNode.cpp#L2 указано имя файла "HierNode.cpp", но в "HierNode.h" имя файла не указано...
Лень думать, чтобы впихать имя файла в доксигеновский коммент. Там есть специальный тег для этого.
Admin пишет:
9) https://github.com/graveman82/Zavod3DHelperLib/blob/master/DataStructs/HierNode.cpp#L33
"Перед вызовом операции необходимо, чтобы указатели на дочерние узлы где-то были сохранены." -- запятая должна быть перед словом "необходимо", а не после него;
Не согласен, запятые нужно ставить перед союзом.
Admin пишет:
10) И вообще, в HierNode.cpp почти нет ни одного комментария к определению метода;
В реализации комментарии не обязательны.
Admin пишет:
13) https://github.com/graveman82/Zavod3DHelperLib/blob/master/DataStructs/NodeBase.h#L67
"virtual void UpdateCachedData(unsigned long dirtyBitIndex) = 0;" -- странный синтаксис, либо я чего-то не догоняю, либо имелось ввиду "... unsigned long dirtyBitIndex = 0);";
Чисто виртуальная функция абстрактного класса. Данный синтаксис говорит, что метод должен быть реализован в производном классе и что нельзя создавать экземпляры этого класса, а только производных классов.
Admin пишет:
15) https://github.com/graveman82/Zavod3DHelperLib/blob/master/DataStructs/NodeBase.h#L81
Возможна ошибка: "return (flags_ & (1ul << dirtyBitIndex));" пытается return'уть unsigned long, которое при конвертировании в bool тупо отбрасывает старшие байты. Нужно: "return (1ul &  (flags_ >> dirtyBitIndex));";
Дельное замечание. Как-то я долго искал причину глюка. Тоже причина оказаласт в конвертировании типов разного размера.

Admin пишет:
graveman пишет:Если будет непонятно, напишу как использовать.
Угу, малопонятно. Ты даже не придерживаешься единой терминологии.
Когда напишу производный класс - класс узла сцены, то покажу тебе и ты тогда сможешь предложить как мне понятнее объяснить другим как пользоваться и разобрать непонятные места.

Admin пишет:
[sub]P.S.: Я не кислый -- просто немного не до форума. К тому же, стараюсь держаться по-админски, поэтому стараюсь избегаю написания бессмысленной мусорной фигни.
А я был кислый в будни из-за работы (не хочу вдаваться в подробности).

Про мультисэмплинг я, чесс говоря толком ни хрена не знаю. Просто при описании был этот параметр и нужно было хоть что-то написать о нем. Я пока не пользуюсь мультисэмплингом. Но как руки дойдут - поправлю статью.
graveman
graveman
Сообщения : 22
Дата регистрации : 2019-10-05
Откуда : Татарстан
https://coderdailynotes.wordpress.com

Собираю движок из всех ранее написанных частей Empty Re: Собираю движок из всех ранее написанных частей

в Сб Окт 26, 2019 8:49 pm
Экспортер по части узлов сцены, координат, нормалей, uv-координат вершин и полигонов закончен. Осталось разобраться с материалами (ну цвет там, имя файла текстуры и пр.). Потом потестить нужно.Целую неделю угрохал на обдумывание алгоритма. Мозги в кашу.
Admin
Admin
Admin
Сообщения : 48
Дата регистрации : 2019-08-31

Собираю движок из всех ранее написанных частей Empty Re: Собираю движок из всех ранее написанных частей

в Сб Окт 26, 2019 10:10 pm
graveman пишет:Меня в школе всегда учили, что перед подчинительными союзами ставить запятую. "Необязательно", если не ошибаюсь - это главное предложение, состоящее из одного слова. Я не прав?
Не знаю -- у меня по русскому была двойка Razz Very Happy
Просто уже привык, что все кругом безграмотные (даже хуже меня, а ведь это у меня были двойки(!) ), и уже на автомате постоянно поправляю. В общем, выдал интуитивно_верный ответ... и я обычно редко ошибаюсь... Кстати, можешь попробовать проверить в MS Word'е.
Попробовал нагуглить насчёт запятых перед "чтобы", но максимум нагуглилось мутное http://www.bolshoyvopros.ru/questions/2455399-nuzhna-li-zapjataja-pered-chtoby.html .
Кстати, мне кажется, что одного "Необязательно" для целого предложения как-то маловато... Типа полная форма должна звучать так: "Это есть необязательно"? Как-то не звучит...

graveman пишет:тебя ждет книга Липмана! const в объявлении (и в определении метода тогда он тоже должен присутствовать) говорит о том, что данный метод не должен изменять значения членов класса (что не мешает ему изменять значения, на которые указывают члены-указатели Wink ).
const вообще придуман программистами для облегчения своего труда, чтобы не следить за изменением того, что не должно быть изменено. Они нагрузили этой обязанностью компилятор.
Липмана читать лень. Можешь пересказать, какой смысл делать константной целый метод? Типа чисто синтаксический сахар?
+
Кстати, нагуглилось https://ru.stackoverflow.com/questions/9318/Константные-методы :
mutable и const представляют собой прекрасный пример искусственных трудностей языка C++. И вообще - использование getter'ов и setter'ов не лучший тон. В том плане, что их не нужно делать на любую переменную внутри класса. Уж лучше ясные функции, которые делают само действие, чтобы логика работы была внутри класса. К тому же, часть параметров можно задавать при конструировании объекта (экземпляра класса). Вот как-то так. – gecube 4 апр '11 в 15:13
graveman
graveman
Сообщения : 22
Дата регистрации : 2019-10-05
Откуда : Татарстан
https://coderdailynotes.wordpress.com

Собираю движок из всех ранее написанных частей Empty Re: Собираю движок из всех ранее написанных частей

в Чт Окт 31, 2019 8:10 pm
Запилил около 50% кода узла с трансформацией. Нашел, что необходим интерфейс изменения отдельно координат x,y,z и соответственно углов и масштабных компонент, а не всех сразу.
Прислал бы демку, да уже устал - надо же и dll-ки от mingw прикладывать - влом лезть а папку и вспоминать, какие из них нужны. В демке два куба: красный и разноцветный. Повороты красного куба (yaw, pitch, roll) могут изменяться с клавиатуры. Теперь операции с матрицами спрятаны и вместо них интуитивно понятный интерфейс.
Перспективы. Можно создать производный класс, в котором прописать меш. Вместо кучи глобальных матриц и функций, получаем ноды с мешами и методы трансформации можно будет вызвать прямо из них, чтобы не вспомнать в какую функцию какую матрицу передать и прочий мозготреш.
Admin
Admin
Admin
Сообщения : 48
Дата регистрации : 2019-08-31

Собираю движок из всех ранее написанных частей Empty Re: Собираю движок из всех ранее написанных частей

в Пт Ноя 01, 2019 2:17 pm
Ясно.
graveman
graveman
Сообщения : 22
Дата регистрации : 2019-10-05
Откуда : Татарстан
https://coderdailynotes.wordpress.com

Собираю движок из всех ранее написанных частей Empty Re: Собираю движок из всех ранее написанных частей

в Ср Ноя 06, 2019 7:24 am
В очередной раз замораживаю работу над движком и пересаживаюсь на Unity, облачившись в геймдизайнера и 3D художника. Больше обсуждать нечего.
Admin
Admin
Admin
Сообщения : 48
Дата регистрации : 2019-08-31

Собираю движок из всех ранее написанных частей Empty Re: Собираю движок из всех ранее написанных частей

в Пт Ноя 08, 2019 7:08 am
А меня всё ещё колбасит, так что уже который день не могу найти силы заняться форумом. Так что с таким ленивым админом... подумываю удалить этот бессмысленный форум.

Юнити -- это хорошо: какашка в мире дерьма, зато уже рабочая... Хотя... как мы до такого докатились? Sad
Спонсируемый контент

Собираю движок из всех ранее написанных частей Empty Re: Собираю движок из всех ранее написанных частей

Вернуться к началу
Права доступа к этому форуму:
Вы можете отвечать на сообщения