HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Xash3D (https://hlfx.ru/forum/forumdisplay.php?forumid=14)
-- Простейшая физика (https://hlfx.ru/forum/showthread.php?threadid=1679)
Отправлено Frest 10-01-2009 в 05:54:
Простейшая физика
У меня к вам вопрос, когда я изучал ваш мод, и его исходники.Я прочитал лог (history.txt), и обнаружил в нем такой текст "+добавлена простейшая физика".Этот текст очень удивил меня в том как вы смогли добавить физику в такой движок.Изучив я обнаружил physic.dll.Поняв что этот файл используете для физики.Когда я узнал что физика находиться в исходниках, я немедленно решил их изучить.Я обнаружил следующее:
defs.c
C++ Source Code:
4 | .vector old_origin; // interpolated values |
9 | .vector m_pcentre[3]; // current centre of mass |
20 | .vector absmin, absmax; |
defs.c
C++ Source Code:
MOVETYPE_PHYSIC // phys simulation |
C++ Source Code:
physic.c
C++ Source Code:
1 | //======================================================================= |
2 | // Copyright XashXT Group 2008 © |
3 | // physic.c - test game physic |
4 | //======================================================================= |
6 | void misc_physbox ( void ) |
8 | precache_model ("models/box.mdl"); |
10 | pev->solid = SOLID_BOX;a |
11 | pev->movetype = MOVETYPE_PHYSIC; |
12 | setmodel (pev, "models/box.mdl"); |
15 | void misc_barrel( void ) |
17 | string name = "models/barrel2.mdl"; |
19 | precache_model( name ); |
21 | pev->solid = SOLID_CYLINDER; //test |
22 | pev->movetype = MOVETYPE_PHYSIC; |
23 | setmodel (pev, name ); |
26 | void misc_sphere( void ) |
28 | string name = "models/nexplode.mdl"; |
30 | precache_model( name ); |
32 | pev->solid = SOLID_SPHERE; //test |
33 | pev->movetype = MOVETYPE_PHYSIC; |
34 | setmodel (pev, name ); |
37 | void item_healthkit( void ) |
39 | pev->model = "models/w_medkit.mdl"; |
41 | precache_model( pev->model ); |
43 | pev->solid = SOLID_MESH; |
44 | pev->movetype = MOVETYPE_PHYSIC; |
45 | setmodel (pev, pev->model ); |
48 | void func_physbox( void ) |
51 | pev->solid = SOLID_MESH; |
52 | pev->movetype = MOVETYPE_PHYSIC; |
53 | setmodel (pev, pev->model ); |
Странно, но больше я ничего не нашел.Как на таком могла работать физика?
Я решил позаимствовать ими, и скопировал все в свой мод под движок Half-Life 1.Было очень много ошибок.Более чем за час я исправил все ошибки.Немного изменил структуру файла physic.c (поменял на physic.cpp) добавив его в проект.Я сделал его как Base Entity.Чтобы в редакторе я мог создать энтитью, которая и являлась physic.Во время компиляции ошибок не наблюдалось.Я ждал...
И тут когда компиляция прошла успешно, я запустил свой мод (через ярлык).И сразу в меню выскочила ошибка об hl.exe, и игра вылетела.Я подумал что это из-за того что я не добавил physic.dll в папку мода, но все равно бесполезно.
Прошу помочь в решении проблемы.
Заранее благодарен
Отправлено Ku2zoff 10-01-2009 в 06:49:
Frest ты не забыл прилинковать physic.dll? Я так думаю, что его следует загрузить, как fmod.dll, например, грузится, загрузить все его функции(используй программку dependency walker(C:\Program Files\Microsoft Visual Studio\COMMON\Tools\DEPENDS.EXE)чтобы просматривать функции дллок). Но лучше, я думаю, забей на это. Слишком много возни, и ради чего? Можно прекрасно обойтись без физики и рэгдоллов.
З.Ы. Кстати, а что за версию Ксаша ты смотрел
? У меня такое впечатление, что ты изучал не мод для ХЛ(Ксаш), а новый движок(Ксаш3Д).
Отправлено Дядя Миша 10-01-2009 в 09:29:
Цитата:
У меня к вам вопрос, когда я изучал ваш мод, и его исходники
Ты не мод изучал, а движок. Вся интеракция скрыта от простого пользователя, наружу торчит только этот самый MOVETYPE_PHYSIC.
В самом ксаше запусти карту phystest, чтобы посмотреть на работу физики.
Добавлено 10-01-2009 в 12:29:
Да и еще - physic.dll это не только newton, но еще и 200 килобайт собственного кода.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Frest 10-01-2009 в 09:51:
Ku2zoff Это все на деле XashXT beta048.
Дядя Миша Я прошлом году ещё смотрел этот phystest.Получается секрет физики в движке и его код закрыт (как и у HLFX), вы мне его не дадите.Значит придется не создавать физику :\
Дядя Миша Вопросы:
1. Как ты написал физику?
2. Где найти нужную информацию,учебники для создания физики в игре?
3. Очень хорошие советы по коддингу (которые помогли также тебе).
Заранее благодарен! 
Отправлено Дядя Миша 10-01-2009 в 10:55:
Цитата:
Получается секрет физики в движке и его код закрыт
13 февраля выйдет Xash3D beta 0.56 и я подумываю о том, чтобы вынести физику в пользовательские дллки - потому что мне лень создавать различные физ.объекты, которые могли бы придумать пользователи.
Правда не факт что успею это сделать.
1. никакого секрета тут нет - взял и написал.
2. подобной информации, применительно к Quake-движкам я не нашел нигде. Дело в том, что в Quake-движках (к коим относится и Half-Life) мир повернут относительно дефолтных координат как минимум два раза на 90 градусов. Из-за этого возникают известные проблемы с передачей координат туда и обратно. Как эту проблему решали в Valve - можно посмотреть в исходниках украденной бетки hl2. Кое-что я почерпнул оттуда.
3. Мне помог исключительно 5 летний опыт кодинга, а не какие-то там советы.
Я могу выложить исходник physic.dll но толку от этого не будет - он все равно привязан к своему формату карт, к компилятору bsp, распихан равномерно по всему движку и просто так вставить это в халфу не выйдет.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Jumpdaphuckup! 10-01-2009 в 14:42:
Frest в лучшем случае у тебя на это уйдет год работы. Нужно ли тебе это?
__________________
avtobus zekov
Отправлено Дядя Миша 10-01-2009 в 15:03:
Jumpdaphuckup! кстати, а можно твою реализацию физики под Newton (у меня какой-то архивчик валяется), выложить во всеобщее пользование? Может кому и пригодится.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Frest 11-01-2009 в 01:40:
Jumpdaphuckup! надо подумать...
Дядя Миша ясно спасибо!
Выложи исходники physic.dll пожалуйста, а инструкция по использованию прилагается? 
Добавлено 11-01-2009 в 04:40:
я попробую как нить изменить весь образ physic.dll на его же основе.И ещё изучить 
Отправлено Дядя Миша 11-01-2009 в 08:49:
Цитата:
Выложи исходники physic.dll пожалуйста
physic.dll - это не сферический конь в вакууме. Он для своей работы хочет интерфейс более чем из 100 (ста) функций.
И если штук 30 из них можно заменить аналогами из винды и халфы, то остальные 70 заменить нельзя ничем и найти в сырцах других движков тоже невозможно, поскольку я писал их с нуля.
Во вторых - там чистая функциональщина, ни одного класса.
Куча указателей на функции и прочие сложные для понимания вещи.
Для человека, незнакомого с чистым Си это как оглоблей по загривку.
Наконец, даже если ты чуточку разберешься с кодом - он использует уникальный формат bsp, который сильно отличается от классического.
Не принципом работы, а методом доступа и хранения лумпов.
Таким образом изучение подобных исходников не влечет за собой ничего кроме разочарования.
На вот тебе для затравки самое важное из физического движка.
Если поймешь как это прикрутить к халфе - помогу в дальнейшем.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Frest 11-01-2009 в 09:03:
Спасибо!Учту твои слова.
Отправлено Jumpdaphuckup! 11-01-2009 в 20:33:
Цитата:
Дядя Миша писал:
кстати, а можно твою реализацию физики под Newton (у меня какой-то архивчик валяется), выложить во всеобщее пользование? Может кому и пригодится.
Ты сам-то понял что-то в тех огрызках бажного кода?
__________________
avtobus zekov
Отправлено Frest 12-01-2009 в 02:14:
Пока что я ничего не сделал(правда просто просмотрел).Просто вчера у меня не было времени занятся "тяжелой" работы, лучше начать с легких.
Отправлено Дядя Миша 12-01-2009 в 06:07:
Цитата:
Ты сам-то понял что-то в тех огрызках бажного кода?
Ну я их бережно храню на всякий случай 
Добавлено 12-01-2009 в 09:07:
Цитата:
Этот текст очень удивил меня в том как вы смогли добавить физику в такой движок
А что конкретно тебя удивило. не подскажешь?__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Frest 12-01-2009 в 09:56:
Дядя Миша я имел ввиду что удивило как вы добавили физику
а текст всего лишь оправдал это 
Добавлено 12-01-2009 в 12:56:
Скажите как мне репу свою поднять
а то не хочу как позорник с низкой репой, я все таки изменился, стал добропорядычным человеком, ни то что было в прошлом году 
Отправлено Дядя Миша 12-01-2009 в 16:27:
Цитата:
я имел ввиду что удивило как вы добавили физику
да я её и не добавил, считай. То что я сделал - это так, мелочь.
Для игры такая физика не годится.
Цитата:
Скажите как мне репу свою поднять
Пиши туторы, будь активным пользователем и само вырастет.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'