HLFX.Ru Forum Страницы (13): « Первая ... « 4 5 6 7 [8] 9 10 11 12 » ... Последняя »
Показать все 188 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Флуд (https://hlfx.ru/forum/forumdisplay.php?forumid=11)
-- Заметки на полях (https://hlfx.ru/forum/showthread.php?threadid=5815)


Отправлено Дядя Миша 05-12-2022 в 16:42:

Цитата:
FiEctro писал:
Ну допустим если у нас такты физики считаются допустим фиксировано в 25фпс, а камера аттачится к такому объекту при нефиксированом фпс, это приведёт к подергиваниям

Ну ты в спирите небось аттачил разные камеры к разным объектам, ничего же не дёргалось?

Цитата:
FiEctro писал:
А если я хочу вызвать скрипт когда уже кадр отрисован?

Если ты вызываешь скрипт, когда кадр уже отрисован - ты его вызываешь на новом кадре

Цитата:
FiEctro писал:
Я про другое, вот допустим у тебя есть объект, он наследует класс ригидбоди, у которого например есть булева - ис кинематик. Так вот как мне её переключать?

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

Цитата:
FiEctro писал:
Т.е. будет некий init.cpp из которого вызываем все наши функции, правильно?

Ну там не совсем. Интерфейсы будут, как туда, так и оттуда.

Цитата:
FiEctro писал:
Самый простой пример - трасса из ориджина объекта, сталкивается с его собственным колайдером. Как это решить?

Ну а как решали в Кваке? Задвали хозяина. Трасса не коллидит со своим хозяином. А групповые коллизии через маску задаются, да это и в халфе было. И в физиксе оно так же.

Цитата:
FiEctro писал:
Для этого я передаю vector3 поворота кости головы прямиком в шейдер

Ты опять не понял. Не надо ничего передавать из игрового кода прямо в шейдер. Материал сам возьмёт любой параметр из объекта, по его имени тогда, когда посчитает нужным. Объясняю. Допустим ты в классе завёл какую-то переменную и туда сохранил чего тебе надо. Дальше ты в описании материала заводишь новый юниформ vec3 и пишешь слинковать его с entity->myCoolVariable; И всё, материал сам профетчит эту переменную из текущего объекта при условии что текущий объект будет иметь модель, у которой будет хотя бы один такой материал.
Тебе не надо будет внутри самого объекта заниматься какими-то бесконечными SetUniform, достаточно просто обновлять переменную.

Цитата:
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'


Отправлено XaeroX 05-12-2022 в 17:02:

Цитата:
Дядя Миша писал:

А что такое Гизмо?

Это босс казино из первого Fallout.
https://fallout.fandom.com/wiki/Gizmo

Добавлено 05-12-2022 в 12:02:

Там у него очень любопытная анимация смерти, жестокая и кровавая. Видимо, от этого и пошло выражение "рисовать Гизмо".

__________________

xaerox on Vivino


Отправлено FiEctro 05-12-2022 в 18:00:

Цитата:
Дядя Миша писал:
А что такое Гизмо?


Гизмо это всякие фигуры и линии в редакторе. Например визуализация триггеров, трассы или нормалей.


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


Хотелось полного контроля над такими вещами.

Цитата:
Дядя Миша писал:
А, да так же как в кваке. MOVETYPE, SOLID. Физдвижок не в скриптах, он неявно довлеет над ситуацией, а ты просто задаешь ему что симулировать и как. Классы - не наследуют никаких физических типов. Но каждому объекту можно задать любой тип симуляции, например.


Я не помню уже как в кваке. Но если можно без особых костылей, уже хорошо.

Цитата:
Дядя Миша писал:
Ты опять не понял. Не надо ничего передавать из игрового кода прямо в шейдер. Материал сам возьмёт любой параметр из объекта, по его имени тогда, когда посчитает нужным. Объясняю. Допустим ты в классе завёл какую-то переменную и туда сохранил чего тебе надо. Дальше ты в описании материала заводишь новый юниформ vec3 и пишешь слинковать его с entity->myCoolVariable; И всё, материал сам профетчит эту переменную из текущего объекта при условии что текущий объект будет иметь модель, у которой будет хотя бы один такой материал.
Тебе не надо будет внутри самого объекта заниматься какими-то бесконечными SetUniform, достаточно просто обновлять переменную.


Ну я так и думал, материал просто изменяет переменную в шейдере, а мы изменяем её в материале через скрипт.

Цитата:
Дядя Миша писал:
А что такое движковый таймер?


Ну вот ты вызвал функцию, и внутри неё тебе что то нужно вызвать допустим ровно через 10 секунд, независимо от фпс. Как в таком случае будет выглядеть код, без костылей вроде всяких циклов?

Цитата:
XaeroX писал:
Там у него очень любопытная анимация смерти, жестокая и кровавая. Видимо, от этого и пошло выражение "рисовать Гизмо".


Гизмо переводится буквально как ШТУКА.


А поддержка листов будет? https://metanit.com/sharp/tutorial/4.5.php
Да и вообще планируются какие нить фичи из шарпа? Было бы прикольно если ВМ хоть частично была с ним совместима.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Дядя Миша 05-12-2022 в 19:00:

Цитата:
XaeroX писал:
Это босс казино из первого Fallout.

А, крепкий хозяйственник.

Цитата:
FiEctro писал:
Например визуализация триггеров, трассы или нормалей.

Дебуг-отрисовка корочи. Отладочная визуализация.

Цитата:
FiEctro писал:

Хотелось полного контроля над такими вещами.

Чтобы дёргалось? О каком контроле речь?

Цитата:
FiEctro писал:
материал просто изменяет переменную в шейдере, а мы изменяем её в материале через скрипт.

Материал позволяет подключать новые переменные к шейдеру, какие угодно. У тебя же есть доступ к бета-тестированию, почитай документацию, там всё это подробно расписано.

Цитата:
FiEctro писал:
и внутри неё тебе что то нужно вызвать допустим ровно через 10 секунд, независимо от фпс

Ну а как тчинки в кваке работали? SetNextThink( 10.0f ); и вызов будет ровно через 10 секунд, независимо от фпс.

На самом деле я вообще не понимаю тех проблем, которые сами себе придумали авторы современных движков.

Добавлено 05-12-2022 в 21:57:

Цитата:
FiEctro писал:
А поддержка листов будет?

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

Добавлено 05-12-2022 в 22:00:

Цитата:
FiEctro писал:
Да и вообще планируются какие нить фичи из шарпа?

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 05-12-2022 в 20:02:

Цитата:
Дядя Миша писал:
В моём языке есть всего три базовых типа, int, float и string. А всё остальное пользователь создаёт самостоятельно.


Ну вот в этом и проблема, вместо того чтобы писать код игры, приходится писать какие то дурацкие структуры (в юнити например вопрос указателей и структур опущен, хоть они там и есть в полной мере как и в си++) и у каждого разраба они написаны по своему. Кто во что горазд короче, отсутсвует какая то стандартизация. Может я конечно С++ очень плохо знаю, но всё же всякие заготовленные объекты сильно облегчают задачу новичкам, да и читабельность кода. Хотелось бы услышать твоего совета по этой ситуации. Возможно в базовом скрипте будут какие то заготовки?

Добавлено 05-12-2022 в 23:02:

Цитата:
Дядя Миша писал:
Чтобы дёргалось? О каком контроле речь?


Порядок вызова и возможность синхронизации как с физикой, так и с обычным фпс, а так же возможность выполнить код как можно позже.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Дядя Миша 05-12-2022 в 20:15:

Цитата:
FiEctro писал:
Ну вот в этом и проблема, вместо того чтобы писать код игры, приходится писать какие то дурацкие структуры

Зачем? Я сам всё напишу и ротатаблю тоже. Будет несколько типовых заготовок-сценариев для различных игр.

Цитата:
FiEctro писал:
Порядок вызова и возможность синхронизации как с физикой, так и с обычным фпс

Обычно такой выбор не имеет смысла. Если это игровые объекты, они сихронизируются с серверным временем, если локальные - то с клиентским.

Цитата:
FiEctro писал:
возможность выполнить код как можно позже.

Еще в первой кваке были trigger_relay с возможностью задания любого времени действия. На одном из уровней, к примеру триггер срабатывал через несколько минут после старта.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 05-12-2022 в 20:46:

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


А с рендером и физикой?

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Дядя Миша 05-12-2022 в 21:04:

рендер - клиентское время, физика - серверное.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 06-12-2022 в 08:21:

Выяснилось жуткое. Сам я над этим никогда не задумывался, а тут вдруг внезапно понял. Вот казалось бы, если мы создаём объект дочернего класса через new, а результат кастуем к родительскому классу, что в этом такого особенного?
Пример

C++ Source Code:
1
class CBaseEntity
2
{
3
public:
4
  CBaseEntity() { Msg( "CBaseEntity ctor called\n" ); }
5
  ~CBaseEntity() { Msg( "CBaseEntity dtor called\n" ); }
6
  string_t	m_classname;
7
  vec3	m_origin;
8
};
9
 
10
class CInfoPoint : CBaseEntity
11
{
12
public:
13
  CInfoPoint() { Msg( "CInfoPoint ctor called\n" ); }
14
  virtual ~CInfoPoint() { Msg( "CInfoPoint dtor called\n" ); }
15
  string_t	m_target;
16
};

Этот класс мы пытаемся создать вот так
C++ Source Code:
1
CBaseEntity	*e;
2
 
3
e = new CInfoPoint;
4
delete e;

И шо бы вы думали? Получаем ошибку
Цитата:

error C2243: 'type cast' : conversion from 'class CInfoPoint *' to 'class CBaseEntity *' exists, but is inaccessible

Честно говоря я такой ошибки не получал примерно никогда вообще
Но ладно, мало ли. Может это на выражение new действует такое строгое условие, а если это сделать чуть ниже, то норм? Ок, видоизменяем код
C++ Source Code:
1
CBaseEntity	*e2;
2
CInfoPoint	*e;
3
 
4
e = new CInfoPoint;
5
e2 = e;
6
delete e;

И снова получаем ту же самую ошибку!
Цитата:

error C2243: 'type cast' : conversion from 'class CInfoPoint *' to 'class CBaseEntity *' exists, but is inaccessible

Странно. dynamic_cast в данном случае бесполезен, ведь мы идём вверх по иерархии, а не вниз. О чём компилятор честно предупреждает
Цитата:

dynamic_cast used to convert to inaccessible or ambiguous base; run-time test will fail ('class CInfoPoint *' to 'class CBaseEntity *')

Тогда нам нужен static_cast? И снова получаем ошибку
Цитата:

error C2243: 'static_cast' : conversion from 'class CInfoPoint *' to 'class CBaseEntity *' exists, but is inaccessible

Ну зараза, я тебя всё-таки победю! Через Си-шный каст
C++ Source Code:
1
CBaseEntity	*e2;
2
CInfoPoint	*e;
3
 
4
e = new CInfoPoint;
5
e2 = (CBaseEntity *)e;
6
delete e2;

И вот ошибка превращается в предупреждение
Цитата:

warning C4243: type cast conversion from 'class CInfoPoint *' to 'class CBaseEntity *' exists, but is inaccessible

На самом 4243 это и есть предупреждение, которое почему-то форсируется до ошибки.
Запускаем! Ну и получаем вот это

Добавлено 06-12-2022 в 11:17:

Иными словами - хотя у нас есть виртуальный деструктор, при принудительном кастовании указателя вверх там внутри ломается вообще всё. И деструктор CInfoPoint не вызывается, да еще и память повреждается.
Очуметь можно. Просто в Шоте это вполне себе законная конструкция.

Добавлено 06-12-2022 в 11:21:

Скорее всего подобное поведение происходит из-за возможности множественного наследования в С++, там каждый наследный класс имеет свою базу и свой уникальный указатель. Но когда множественного наследования нет, то и этой проблемы нет тоже. Кстати в Делфи аналогично.

__________________
My Projects: download page

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

Цитата:

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


Отправлено XaeroX 06-12-2022 в 14:43:

Цитата:
Дядя Миша писал:
И шо бы вы думали? Получаем ошибку

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

__________________

xaerox on Vivino


Отправлено Дядя Миша 06-12-2022 в 16:29:

XaeroX а оно по дефолту приватное разве?

Добавлено 06-12-2022 в 19:28:

Да, публичное наследование работает.

Добавлено 06-12-2022 в 19:29:

Но при условии, что в базовом объекте тоже объявлена vtable.

__________________
My Projects: download page

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

Цитата:

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


Отправлено XaeroX 06-12-2022 в 17:00:

Цитата:
Дядя Миша писал:
а оно по дефолту приватное разве?

Для классов по дефолту приватное, для структур по дефолту публичное.

__________________

xaerox on Vivino


Отправлено FiEctro 06-12-2022 в 17:21:

Цитата:
Дядя Миша писал:
Я сам всё напишу и ротатаблю тоже.


Насколько будет интуитивным управление трансформом, скейлом и ротейтом объектов? А так же преобразвания углой Эйлера в кватернионы и обратно. Ну и преобразования из локальных пространств в глобальные и наоборот.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Дядя Миша 06-12-2022 в 20:22:

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

Это всё очень субьективно.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 07-12-2022 в 06:01:

Цитата:
Дядя Миша писал:
Это всё очень субьективно.


А что может быть субъективного в этих простых операциях? Просто не превращать их в простыню кода для пользователя, а то ещё и матрицы считать заставишь

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Временная зона GMT. Текущее время 22:12. Страницы (13): « Первая ... « 4 5 6 7 [8] 9 10 11 12 » ... Последняя »
Показать все 188 сообщений этой темы на одной странице

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