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Д).
 ? У меня такое впечатление, что ты изучал не мод для ХЛ(Ксаш), а новый движок(Ксаш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'