HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Флуд > Заметки на полях
Разработка С++ совместимой виртуальной машины
Страницы (9): « Первая ... « 5 6 7 8 [9]   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
 Дядя Миша
who said meow?

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 30249
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
FiEctro писал:
А что может быть субъективного в этих простых операциях?

Как бы ни было просто, всегда найдётся тот, кто скажет "нипанятнааа".

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 211949

Старое сообщение 07-12-2022 06:52
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 11275
Возраст: 31

Рейтинг



Дядя Миша
Так, а что может быть непонятного в одной функции? Нет, ну если там помимо этого нужно ещё городить огород, то да.

Кстати вопрос немного не по теме, но всё же я хочу спросить тебя, по поводу парентов в халфе и спирите, почему с ними были такие трудности? Я насколько помню адекватно работающие паренты ты реализовал уже в ксашмоде только когда уже перенес его на ксашдвижок. Халфа не умеет работать с локальными пространствами? Интересен этот исторический момент.

И какова архитектура дочерних объектов будет в новом движке? Можно фрактально теже ротатабли друг в друга вложить?

__________________
Иван Топорышкин пошел на охоту,
С ним пудель пошел, перепрыгнув забор,
Иван, как бревно провалился в болото,
А пудель в реке утонул, как топор.

Отредактировано FiEctro 07-12-2022 в 07:20

Сообщить модератору | | IP: Записан
Сообщение: 211950

Старое сообщение 07-12-2022 07:18
- За что?
 Дядя Миша
who said meow?

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 30249
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
FiEctro писал:
почему с ними были такие трудности?

Исторически преобразования пространства это тежолые матричные вычисления, компьютеры тогда не тянули, вот и не делали.
Я помню когда-то форк квейка на плейстейшон вита доделывал, решил ему замутить корректную трассу об ротатабли, ессно матричную. Так фпс после моей доработки упал вдвое

Цитата:
FiEctro писал:
Я насколько помню адекватно работающие паренты ты реализовал уже в ксашмоде только когда уже перенес его на ксашдвижок.

Так физика была в движке зашита, а без переделки физики получались сплошные костыли. Можно было бы заморочиться и сделать адекватные паренты в халфе, просто из спортивного интереса, Ксерокс кажется делал в Хеткрап Френзи.

Цитата:
FiEctro писал:
И какова архитектура дочерних объектов будет в новом движке? Можно фрактально теже ротатабли друг в друга вложить?

Вложенность есть иллюзия на самом-то деле. Под вложенностью понимается некоторый уровень наследования. Ну например, что дочерние объекты будут:
1. видны вместе с родительским
2. будут наследовать перемещения родительского объекта
3. будут удалены одновременно с родительским объектом
Какие еще условия можно тут унаследовать?
Наследование можно сделать через пространство имён так же как в С++, например. Это для доступа к таким объектам. Этот вопрос будет решаться во время создания редактора.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 211951

Старое сообщение 07-12-2022 08:07
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 11275
Возраст: 31

Рейтинг



Цитата:
Дядя Миша писал:
Исторически преобразования пространства это тежолые матричные вычисления, компьютеры тогда не тянули, вот и не делали.


Ну с костями же это всё работает, и для скелеталки это даже в халфе работало. Чем она отличаются от всех остальных объектов?

Цитата:
Дядя Миша писал:
Какие еще условия можно тут унаследовать?


Позиция, угол, скейл.

Цитата:
Дядя Миша писал:
Наследование можно сделать через пространство имён так же как в С++, например. Это для доступа к таким объектам. Этот вопрос будет решаться во время создания редактора.


В Юнити есть ещё такой прикол как префабы, это по сути отдельная сцена с объектами, которую ты можешь вставлять внутрь другой сцены. В том числе распаковывать префаб в обычные объекты сцены с учетом всех трансформаций что ты применял для префаба.

__________________
Иван Топорышкин пошел на охоту,
С ним пудель пошел, перепрыгнув забор,
Иван, как бревно провалился в болото,
А пудель в реке утонул, как топор.

Отредактировано FiEctro 07-12-2022 в 09:03

Сообщить модератору | | IP: Записан
Сообщение: 211952

Старое сообщение 07-12-2022 08:55
- За что?
(_-=ZhekA=-_)
Житель форума

Дата регистрации: Jan 2006
Проживает: Москва
Сообщений: 3663
Возраст: 35

Рейтинг



Цитата:
FiEctro писал:
это по сути отдельная сцена с объектами, которую ты можешь вставлять внутрь другой сцены.

В UE4 можно создать уровень в котором можно создавать еще уровни, типа слои, например, у нас есть основной левел и в нем еще несколько отдельных левелов с освещением, коллизией, звуками, и так далее

__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.

http://button.moddb.com/download/medium/125531.png

Сообщить модератору | | IP: Записан
Сообщение: 211953

Старое сообщение 07-12-2022 10:39
- За что?
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 11275
Возраст: 31

Рейтинг



Цитата:
(_-=ZhekA=-_) писал:
В UE4 можно создать уровень в котором можно создавать еще уровни, типа слои, например, у нас есть основной левел и в нем еще несколько отдельных левелов с освещением, коллизией, звуками, и так далее


Да у Юнити и УЕ примерно одинаковая логика, а в УЕ5 буквально с Юнити интерфейс слизали. Я когда зашел, даже офигел, сначала думал что не разберусь, а потом почти с набегу даже поимпортировал ресурсы, собрал небольшую сцену. Сразу видно хотят переманить к себе Юнитистов, и надо сказать у них хорошо получается.

__________________
Иван Топорышкин пошел на охоту,
С ним пудель пошел, перепрыгнув забор,
Иван, как бревно провалился в болото,
А пудель в реке утонул, как топор.

Отредактировано FiEctro 07-12-2022 в 11:02

Сообщить модератору | | IP: Записан
Сообщение: 211954

Старое сообщение 07-12-2022 11:01
- За что?
(_-=ZhekA=-_)
Житель форума

Дата регистрации: Jan 2006
Проживает: Москва
Сообщений: 3663
Возраст: 35

Рейтинг



Цитата:
FiEctro писал:
а в УЕ5 буквально с Юнити интерфейс слизали.

Почти сразу с ue4 пересел на ue5 и до сих пор матерюсь на новый дизайн редактора... Ппй какой не удобных после четверки... Но уже почти привык )))

Цитата:
FiEctro писал:
Да у Юнити и УЕ примерно одинаковая логика

Хз, я юнити даже не запускал )

__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.

http://button.moddb.com/download/medium/125531.png

Сообщить модератору | | IP: Записан
Сообщение: 211955

Старое сообщение 07-12-2022 11:23
- За что?
 Дядя Миша
who said meow?

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 30249
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
FiEctro писал:
Ну с костями же это всё работает, и для скелеталки это даже в халфе работало

Ну ты сравнил стек костей, который в кэш помещался для еденичного объекта и хаотично разбросанные по всей памяти.

Цитата:
FiEctro писал:
В Юнити есть ещё такой прикол как префабы, это по сути отдельная сцена с объектами, которую ты можешь вставлять внутрь другой сцены

Я эту фишку придумал ещё в нулевые. Думаю это что-то такое самоочевидное.

Цитата:
FiEctro писал:
Позиция, угол, скейл.

А зачем скейл наследовать? Приведи пример.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 211957

Старое сообщение 07-12-2022 11:54
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 11275
Возраст: 31

Рейтинг



Цитата:
Дядя Миша писал:
А зачем скейл наследовать? Приведи пример.


А зачем скейл наследуют кости? Ну например чтобы одновременно скейлить дочерние объекты с разным скейлом. Чем сидеть высчитывать отдельно для каждого. Можно ещё такие желеподобные штуки делать физические (софтбоди), и тоже их скейлить так удобно, поскольку они состоят из нескольких ригидбоди с джоинтами.

В Юнити кстати скелеталка это обычные игровые объекты с иерархией, т.е. к любой кости можно свободно прикрепить скрипт, объект, или вообще вытащить эту кость на сцену из иерархии. Ну или даже дополнить скелет новыми косточками прямо в самом редакторе Юнити, например чтобы добавить ИК контролеры.

Цитата:
Дядя Миша писал:
Ну ты сравнил стек костей, который в кэш помещался для еденичного объекта и хаотично разбросанные по всей памяти.


А родитель разве не единичный объект? Как он по памяти хаотично разбросан может быть? Я думал все объекты хранятся в каком то едином массиве чтобы по ним легко можно было поиск делать. Особенно это актуально для сохранений и ченжлевелов.

__________________
Иван Топорышкин пошел на охоту,
С ним пудель пошел, перепрыгнув забор,
Иван, как бревно провалился в болото,
А пудель в реке утонул, как топор.

Отредактировано FiEctro 07-12-2022 в 13:55

Сообщить модератору | | IP: Записан
Сообщение: 211969

Старое сообщение 07-12-2022 13:40
- За что?
 Дядя Миша
who said meow?

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 30249
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
FiEctro писал:
Как он по памяти хаотично разбросан может быть?

Каждый объект в той же халфе - это отдельный маллок, т.к. их размеры отличаются. Вот в кваке, там да, был единый гигантский массив.
Но я не только об этом. Кости в одной функции считались и массив там умещался в кэше, причём считался только для объектов, которые видны игроку.
А физика с парентами считалсь бы всегда и везде для всего мира.

Цитата:
FiEctro писал:
Ну например чтобы одновременно скейлить дочерние объекты с разным скейлом.

Очевидно речь идёт не об абсолютном масштабе, а об относительном.
Т.е. исходный скейл у дочерних объектов может быть каким угодно, но если к родительскому будет применено его изменение, то и к дочерним тоже. Это да.

Цитата:
FiEctro писал:
В Юнити кстати скелеталка это обычные игровые объекты с иерархией

Это еще с третьего дуума пошло Кармак был первым это придумал.

Цитата:
FiEctro писал:
А родитель разве не единичный объект?

Всё относительно. Родитель может быть и чьим-то дочерним объектом одновременно.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 211971

Старое сообщение 07-12-2022 14:16
-
 Дядя Миша
who said meow?

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 30249
Нанёс повреждений: 392 ед.

Рейтинг



Я вот как-то не задумывался, а теперь, так сказать столкнулся. Если мы объявляем статичный динамический массив внутри класса, очевидно, что его размер будет объявлен позднее, т.к. мы не можем проинициализировать этот массив прямо внутри класса. Однако функция, которая будет обращаться к этому массиву может находиться внутри тела класса. До тех пор пока она просто обращается к массиву никаких проблем не возникает. Но если мы попытаемся применить sizeof к такому вот оператору, то...
Проиллюстрирую на примере

C++ Source Code:
1
#define ARRAYSIZE( p )		(sizeof( p ) / sizeof( p[0] ))
2
struct test_t
3
{
4
  const char	*name;
5
  int		value;
6
};
7
 
8
class CArrayTest
9
{
10
public:
11
  static test_t	m_entries[];
12
public:
13
  void Test( void )
14
  {
15
    Msg( "arraysize: %d\n", ARRAYSIZE( m_entries ));
16
  }
17
};
18
 
19
test_t CArrayTest :: m_entries[] =
20
{
21
  { "Test1", 1 },
22
  { "Test2", 2 },
23
  { "Test3", 3 },
24
};

Дело в том, как вы знаете, что sizeof срабатывает по месту вставки, немедленно. А у нас массив-то ещё непроинициализирован!!!! А функция, где его размер должен быть взят находится ВЫШЕ, чем инициализация массива, хотя бы потому, что С++ не позволяет инициализировать массивы, принадлежащие классу внутри его тела. Даже если это статичные массивы. Ну вот нельзя и всё тут. Таким образом, когда мы берём размер m_entries, он у нас равен []. И получаем ошибку
Цитата:
error C2070: illegal sizeof operand

Решение заключается в том, чтобы вынести функцию вычисления размера массива после, собственно, его инициализации. То есть вот так:
C++ Source Code:
1
#define ARRAYSIZE( p )		(sizeof( p ) / sizeof( p[0] ))
2
class CArrayTest
3
{
4
public:
5
  static test_t	m_entries[];
6
public:
7
  void Test( void );
8
};
9
 
10
test_t CArrayTest :: m_entries[] =
11
{
12
  { "Test1", 1 },
13
  { "Test2", 2 },
14
  { "Test3", 3 },
15
};
16
 
17
void CArrayTest :: Test( void )
18
{
19
  Msg( "arraysize: %d\n", ARRAYSIZE( m_entries ));
20
}

Этот вариант компилируется без проблем. Но мне стало любопытно. А может быть некоторые компиляторы настолько продвинутые, что используют подобие deferred sizeof? Проверьте пожалуйста первый вариант на различных компиляторах, как они себя поведут.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 212021

Старое сообщение 10-12-2022 07:42
-
 Дядя Миша
who said meow?

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 30249
Нанёс повреждений: 392 ед.

Рейтинг



Пришла мне в голову вот какая идея. Всем известно что занулять класс с виртуальными методами при помощи memset нельзя - будет сплошной вылет, да и только. Не избежал этой участи и мой язык, хотя он конечно вылетает с помощью своих встроенных средств, а основное приложение продолжает свою работу. Но тем не менее. Какие у нас могут быть выходы из положения?

В целом моё предложение отдаёт парадигмой разработчиков компилятора GCC, поэтому хочу с вами посоветоваться. Итак, компилятор, допустим видит, что вызвали мемсет, зануляющий класс извнутри:

C++ Source Code:
1
Foo :: Foo()
2
{
3
  memset( this, 0, sizeof( *this ));
4
}

Он конечно будет ориентироваться не по ключевому слову this, а по началу указателя и размеру зануляемых данных. Но выловить подобный вызов элементарно. Итак, какие у нас варианты:

1. если в классе есть виртуальные методы - вывести варнинг, что будет бида
2. автоматически сдвинуть указатель на начало пользовательских данных
3. ничего не делать, как MSVC и как оно сейчас
4. свой вариант?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 212556

Старое сообщение 31-01-2023 15:31
-
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 10:12. Новая тема    Ответить
Страницы (9): « Первая ... « 5 6 7 8 [9]   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Флуд > Заметки на полях
Разработка С++ совместимой виртуальной машины
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2022