Сайт Doom Power
 ПоискПоиск  ДумерыДумеры ВходВход
Обсуждение технологий маппинга в гздум 1, 2, 3, 4, 5  След.
   Список разделов - Местечко Мапперов и Моддеров - Обсуждение технологий маппинга в гздум
Автор Сообщение
M@@@H!aK
- Corporal -
Next rank: (= Corporal =) after 27 messages
113

Сообщение Отправлено: 18.08.06 06:50:47

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



Первая тема: как пользоваться HiByte.

Зачем это надо? Чтобы использовать 3D - полы, нужны тэги. Причем возможно, довольно много тэгов. Но тэг сектора с 3d - полом прописывается в аргументах линии, на которой навешан special - Sector_Set3dFloor, а аргументы линий могут изменяться только в пределах от 0 до 255 (т.к. занимают один байт). 256 различных значений - это совсем не много, если делать большой навороченный проект. Особенно, если половина этих значений будет занята другими скриптами, special'ами и т.д.. Но есть решение этой проблемы - последний аргумент special'a Sector_Set3dFloor является старшим байтом тэга сектора, в котором мы хотим видеть 3d-пол.

Здесь возникает проблема - может быть, кто-то не знает, как этим старшим байтом пользоваться.

Чтобы не заморачиваться и не объяснять двоичную систему исчисления, раскидаю кратко: если под число отвести два байта, можно будет использовать значения от 0 до 65535. Байты в памяти идут подряд, поэтому один называется младшим, а второй - старшим. Как получается суммарное значение? Формула проста:
Значение = Младший_Байт + Старший_Байт * 256. Т.е. если в старшем байте стоит 0, то общее значение будет совпадать со значением младшего байта. Если в старшем байте стоит, к примеру, 16, а в младшем - 0, то общее значение тэга будет равно 16*256 = 4096.


Вывод: используя старший байт, получаем огромное количество дополнительных значений для тэгов секторов, в которых будет использоваться 3D - пол.


Value = LoByte + HiByte * 256
Ak-01
- Master Sergeant -
Next rank: (= Master Sergeant =) after 30 messages
470

Сообщение Отправлено: 18.08.06 09:27:44

Итак маньяк как всегда сказал дело причем важное. Люди! Делайте 3д полы в hiByte! Highbyte каждый получает в вечное пользование - лишние 256 тэгов для 3д полов никак не помешают. Настоятельно прошу именно их использовать и не тратить попусту драгоценные однобайтные тэги! Хайбайты всем членам комманды припишу красным в переписи.
doctor[iddqd]
-= DoomGod =-
451

Сообщение Отправлено: 18.08.06 09:52:11

ага, может кините где еще можно прочитать про 3д полы и как их делать с примерами
3EPHOEd
Lieutenant Colonel
Next rank: (Lieutenant Colonel) after 3 messages
1967

Сообщение Отправлено: 18.08.06 09:56:21

Ak-01

лишние 256

Лишние 65000+ Smile

dr_kop
В ресурснике что я сделал лежит тестовая какрта где можно глянуть избушку сделанную 3Д этажами с наклонной крышей, так же еще пару мелочей.
Far]ASTS[
- Warrant Officer -
Next rank: (= Warrant Officer =) after 78 messages
912

Сообщение Отправлено: 18.08.06 09:57:52

http://csi.jino-net.ru/wiki/index.php/Sector_Set3DFloor
M@@@H!aK
- Corporal -
Next rank: (= Corporal =) after 27 messages
113

Сообщение Отправлено: 22.08.06 05:39:54

Итак, следующая глава обсуждения технологий: добавление 3d-моделей.

В общем, все просто, если модель у вас уже есть в формате md2/md3. О том, как этого добиться, если модель в другом формате (в частности, в формате 3ds), я расскажу чуть позже. Сначала скажу, как собсна, вставить модель в гоззо.

Модели в гоззо привязываются, во-первых, к Actor'ам из декорейта, а во-вторых - к конкретным фреймам этих акторов. Описание используемых 3d-моделей находится в lump'е modeldefs, синтаксис такой:

Для моделей MD2:

Model <ActorName>
{
Path <"path">
Model <model index> <"model file">
Skin <model index> <"skin file">
Scale <X scale> <Y scale> <Z scale>

Frame <XXXX> <X> <model index> <"frame name">
}

Для моделей MD3:

Model <ActorName>
{
Path <"path">
Model <model index> <"model file">
Skin <model index> <"skin file">
Scale <X scale> <Y scale> <Z scale>

FrameIndex <XXXX> <X> <model index> <frame number>
}

Расшифровка параметров:

<"ActorName"> Имя класса actor'а, к которому привязывается модель
<"path"> Путь к файлу с моделью в zip/pk3
<"model file"> Имя файла с моделью в zip/pk3 (файл дожен располагаться в директории, указанной в path
<"skin file"> Имя файла со скином модели (файл имеет любой формат - bmp, pcx, png и т.д.)
<X, Y and Z scale> Масштабирование модели по осям

<model index> Можно одному кадру (frame) назначить до четырех моделей.
Если вы используете только одну, поставьте 0
<XXXX> Спрайт, который заменяется моделью (например, POSS)
<X> Кадр данного спрайта, который заменяется моделью (например, А)
<"frame name"> Имя кадра в модели MD2
<frame number> Номер кадра в модели MD3

Модели формата md2/md3 могут содержать несколько кадров анимации; в MD2 кадр имеет имя, а в MD3 только нумеруется. GZDoom понимает изображения (насколько я понял из экспериментов) любых форматов и глубины цвета (то же касается не только моделей, но и текстур). Но в случае скинов для моделей у меня не получилось использовать изображение размером 256х256. Зато 128х128 вполне корректно прочиталось. Видимо, скины 256х256 считаются уже текстурами высокого разрешения, и их нужно прописывать в lump'е hirestex. Но об этом потом. Пример использования модели:

Model BloodHound
{
Path "models/bloodhound"
Model 0 "bloodhound.md2"
Skin 0 "bloodhound.pcx"
Scale 1.0 1.0 1.0

Frame BHND A 0 "walk01"
Frame BHND B 0 "walk02"
Frame BHND C 0 "walk03"
Frame BHND D 0 "walk04"
}

Это значит, что в архиве есть папка models\bloodhound, а в ней лежит сама модель и скин к ней. Замещаются четыре спрайта BHNDA.. BHNDB.. BHNDC.. и BHNDD..
Tomcat[DST]
= UAC Gunner =
Next rank: (- Corporal -) after 10 messages
100

Сообщение Отправлено: 22.08.06 12:12:24

Вопрос такой - прорисовываются ли модели в софтверном режиме? У меня хроническая лажа с OpenGL.
Ak-01
- Master Sergeant -
Next rank: (= Master Sergeant =) after 30 messages
470

Сообщение Отправлено: 23.08.06 19:39:19

Еще вопрос
1. Как можно подгонять текстуры пола/потолка (в частности поворачивать их)
2. как можно скриптом сделать скролл на миддл текстуру линии с определенным тэгом в указанном направлении
M@@@H!aK
- Corporal -
Next rank: (= Corporal =) after 27 messages
113

Сообщение Отправлено: 24.08.06 05:19:13

Tomcat: В софтверном режиме не прорисовываются ни модели, ни 3д-полы, ни динамик лайты, ни текстуры высокого разрешения. Кроме того, в режиме Gl GZDoom поддерживает текстуры любых графических форматов (по крайней мере, true color'ные bmp'хи я в него вставлял), так вот эти текстурки в софтварном режиме просто исчезают.

AK:
1) Есть спешалы Sector_SetRotation, Sector_SetCeilingScale, Sector_SetFloorScale, Sector_SetCeilingPanning, Sector_SetFloorPanning. Прописываешь их в open скрипте и все.

2) Линии назначаешь тэг, потом в скрипте используешь функцию SetLineSpecial на эту линию и устанавливаешь один из скроллирующих спешалов.

Синтаксис:



SetLineSpecial (int lineid, int special [, int arg0 [, int arg1 [, int arg2 [, int arg3 [, int arg4]]]]])

LineID - Тэг линии
Special - Номер спешала
Arg.. - Аргументы



185 : Sector_SetRotation (tag, floor-angle, ceiling-angle)

Tag - тэг сектора
Floor-Angle, Ceiling-Angle - углы поворота текстуры потолка и пола, от 0 до 359




Sector_SetFloorPanning (tag, u-int, u-frac, v-int, v-frac) (а также все остальные вышеперечисленные)

Tag - тэг сектора
U-Int - целая часть по горизонтали
U-Frac - дробная часть по горизонтали
V-Int - целая часть по вертикали
V-Frac - дробная часть по вертикали

Итоговое значение растяжения/смещения по горизонтали: U-Int+0.01*U-Frac
Итоговое значение растяжения/смещения по вертикали: V-Int+0.01*V-Frac
M@@@H!aK
- Corporal -
Next rank: (= Corporal =) after 27 messages
113

Сообщение Отправлено: 24.08.06 05:34:04

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

DECAL THING - это наше все!

Кровь делаем с помощью decaldef (см. wiki, что это такое, или могу здесь объяснить, если надо). Не забываем проставлять decal id при описании новых декалей. Дальше ставим на карте рядом с какой-нибудь стеночкой decal thing, прописываем в аргументах нужный decal id и радуемся - только что стеночка была чистой и аккуратной, а теперь по ней медленно и красиво стекает жуткое кровавое пятно.

Несколько замечаний:

1) стандартные decal'ы gzdoom'а не снабжены тэгами, поэтому их выставить с помощью decal thing'а не получится (впрочем, я скопировал их в свой decaldef и присвоил им тэги).

2) Важна ориентация decal thing'а. Decal устанавливается на ближайшую стенку по направлению, противоположному направлению decal thing'a. Т.е. стрелка направления decal thing'а должна быть направлена от стены, на которой мы хотели бы видеть decal.

3) Естественно, кровищща - это только один из примеров использования decal thing'ов. Можно таким образом устанавливать прочие красивости - вроде табличек на стенах, всяких там трещинок и т.д.
nprotect
= 1st Lieutenant =
Next rank: (- 2nd Lieutenant -) after 11 messages
1239

Сообщение Отправлено: 24.08.06 08:05:10

M@@@H!aK :
Можно таким образом устанавливать прочие красивости - вроде табличек на стенах, всяких там трещинок и т.д

воооо! вот это здорово Very Happy я как то раньше и не думал, что с помощью декалдефов можно такие выкрутасы делать... а высота той же кровищи определяется z-heightом декал тфинга?
M@@@H!aK
- Corporal -
Next rank: (= Corporal =) after 27 messages
113

Сообщение Отправлено: 24.08.06 08:09:40

Именно.
Gucha
UAC Sergeant Major
Next rank: (Chief Petty Officer) after 41 messages
719

Сообщение Отправлено: 24.08.06 08:18:34

круто!
блин полазиешь по форуму стока новых фичек узнаешь

давайте ребята! побольше разных нововведений и уникальных наворотов суйте в вад!
пусть он станет самым лучшим в мире!
3EPHOEd
Lieutenant Colonel
Next rank: (Lieutenant Colonel) after 3 messages
1967

Сообщение Отправлено: 24.08.06 08:43:18

M@@@H!aK
А эти декалы случайно не затираются если ты стены пулями угваздаешь?
M@@@H!aK
- Corporal -
Next rank: (= Corporal =) after 27 messages
113

Сообщение Отправлено: 24.08.06 08:55:28

Кажись, не затираются - дырки от пуль поверх будут накладываться.
3EPHOEd
Lieutenant Colonel
Next rank: (Lieutenant Colonel) after 3 messages
1967

Сообщение Отправлено: 24.08.06 10:46:19

M@@@H!aK
Попробуй расстерлять в стену около 2000-3000-х тысячь пуль или выстрелов из плазмы.
M@@@H!aK
- Corporal -
Next rank: (= Corporal =) after 27 messages
113

Сообщение Отправлено: 24.08.06 11:02:09

А ты предполагаешь такую игровую ситуацию, когда в одной стене должно оказаться 2000-3000 дырок? Shocked Или это общее количество? (т.е. после того, как на мапе становится много-много декалей, "старые" начинают исчезать?)

В общем, это я предложил, как вариант. Старый проверенный способ "линия с текстурой на расстоянии 1 unit от стенки" все равно работает, только гемору больше.
Const
- Master Corporal -
Next rank: (= Master Corporal =) after 36 messages
254

Сообщение Отправлено: 24.08.06 12:39:01

"Именованые" скрипты
Сразу предупреждаю, эта техника не позволяет увеличить до бесконечности число возможных скриптов, она лишь делает код понятнее
Перед кодом скрипта (лично я такие определения пишу в самом начале) впишите
#define <имя> <номер скрипта>
далее при написании скрипта вместо номера используйте такое имя (script <имя> ...)
Примечания: 1. Имя скрипта не может содержать пробелы
2. Имя скрипта является константой равной номеру скрипта. Это позволяет использовать его при вызове функций.


Имена спецификаторов (но не функций) также являются константами равными номерам спецификаторов. Поэтому их можно использовать в качестве аргументов функций, например функции SetThingSpecial
3EPHOEd
Lieutenant Colonel
Next rank: (Lieutenant Colonel) after 3 messages
1967

Сообщение Отправлено: 24.08.06 14:22:49

M@@@H!aK

Или это общее количество? (т.е. после того, как на мапе становится много-много декалей, "старые" начинают исчезать?)

Да, я это и подозреваю.
Надо проверить.
Guest
= Warrant Officer =
Next rank: (- 1st Lieutenant -) after 42 messages
1028

Сообщение Отправлено: 24.08.06 15:30:40

3EPHOEd :
Да, я это и подозреваю.

Это так и есть. Очень хорошо видно на x.wad (не который порнуха, а который типа "оружейник").
3EPHOEd
Lieutenant Colonel
Next rank: (Lieutenant Colonel) after 3 messages
1967

Сообщение Отправлено: 24.08.06 15:50:16

Guest
И вот надо установить опытным путем пропадают ли наскриптенные декалы.
Ak-01
- Master Sergeant -
Next rank: (= Master Sergeant =) after 30 messages
470

Сообщение Отправлено: 24.08.06 21:00:24

На повестке вопрос:

Как сделать давилку из 3д пола
Const
- Master Corporal -
Next rank: (= Master Corporal =) after 36 messages
254

Сообщение Отправлено: 24.08.06 21:15:59

Какой-нибудь изворот с sector аction thing. Это позволит поймать момент попадания в зону давилки.
Таймер и бить скриптом или использовать обычную давилку.
Ak-01
- Master Sergeant -
Next rank: (= Master Sergeant =) after 30 messages
470

Сообщение Отправлено: 24.08.06 21:41:03

еще всеже не получилось скриптом скроллить миддл текстуру, а это нужно.
M@@@H!aK
- Corporal -
Next rank: (= Corporal =) after 27 messages
113

Сообщение Отправлено: 25.08.06 05:21:54

Ak-01 :
всеже не получилось скриптом скроллить миддл текстуру

Ты все правильно сделал? Т.е. скриптом назначил этой линии special, который скроллит текстуру в нужную сторону и правильно выставил аргументы (скорость и т.п.)? Тогда я не знаю, сам никогда не пробовал, надо подумать.
M@@@H!aK
- Corporal -
Next rank: (= Corporal =) after 27 messages
113

Сообщение Отправлено: 25.08.06 05:30:07

Итак, еще один пункт "саги о продвинутых технологиях".
3D-МОДЕЛИ

Для тех, кто заинтересовался возможностью использовать 3d-модели в гоззо, есть плагин для 3d Studio Max 6-7, позволяющий экспортировать модели в формат md3. Просто кладем скачанный файл в папку plugins и получаем в меню экспорта новый пункт: Quake III (md3). Как делать модели и текстурировать их - это слишком большая тема, чтобы приводить ее здесь. Скажу только пару замечаний:

1) не забываем, что фреймы в моделях md3 имеют только номер, поэтому вместо "frame" в modeldefs надо использовать "frameindex"

2) Для моделей формата md3 гоззо разрешает использовать текстуры 256х256

3) Если в качестве текстуры вы используете файл .bmp, то в modeldefs его расширение писать не нужно, только имя, например:

Model BloodHound
{
Path "models/bloodhound"
Model 0 "bloodhound.md2"
Skin 0 "bloodhound" // ЭТО означает, что имя файла со скином собаки "bloodhound.bmp"
Scale 1.0 1.0 1.0

Frame BHND A 0 "walk01"
Frame BHND B 0 "walk02"
Frame BHND C 0 "walk03"
Frame BHND D 0 "walk04"
}

4) При использовании большого количества моделей с большим количеством полигонов, гоззо начинает безбожно тормозить. Поэтому имеем меру (пример подтормаживания - мои потуги сделать медлаб. Там довольно высокополигональная модель комнатного растения, в холле их стоит много, замечено уменьшение fps)
Post
= Master Sergeant =
Next rank: (- Sergeant Major -) after 5 messages
555

Сообщение Отправлено: 25.08.06 11:08:05

Хм...Щща пойду , фигачить кое-какие модели в декорейт...
Шадоумен выкладывал моделпаки , и в одном из них есть охренительные стелажики *)))
Const
- Master Corporal -
Next rank: (= Master Corporal =) after 36 messages
254

Сообщение Отправлено: 25.08.06 13:16:02

Ak, насколько помню способ Маньяка работать не может, так как эти спецификаторы статические.
Пока есть такие идеи:
скриптом ставить анимированую текстуру
делать текстуру монитором камеры, смотрящей на скролл
поставить спереди абсолютно прозрачный скролл, а потом делать видимым
3EPHOEd
Lieutenant Colonel
Next rank: (Lieutenant Colonel) after 3 messages
1967

Сообщение Отправлено: 25.08.06 13:21:07

Costja
Да нет можно просто сектор толщиной в 1 юнит сделать и внем на стенке текстуру скролить.
Ak-01
- Master Sergeant -
Next rank: (= Master Sergeant =) after 30 messages
470

Сообщение Отправлено: 25.08.06 16:24:00

так насчет скролла вот тз на скрипт

надо сделать разъезжающиеся двери лифта. Полиобжект по понятным причинам отпадает - лифт ездить должен. Хотел сделать проволочные раздвигающиеся двери миддл текстурой - но нужен скролл.
Страница 1 из 5 Перейти наверх 1, 2, 3, 4, 5  След.
   Список разделов - Местечко Мапперов и Моддеров - Обсуждение технологий маппинга в гздум

© phpbb.com