Поиск сообщества
Показаны результаты для тегов 'setobjectmaterial'.
Найдено: 3 результата
-
Официальная тема на SA-MP форуме: http://forum.sa-mp.com/showthread.php?t=582490 Всем привет, я не буду подробно объяснять что и для чего это, вся информация есть по ссылке сверху, просто скажу, что я адаптировал Texture Studio под CR-MP 0.3e. Скачать: Texture Studio (CR-MP 0.3e) (1).rar Примечания: Текущая версия TS для CR-MP 0.3e очень нестабильна и имеет куча проблем, со временем я попытаюсь выпустить более стабильную версию. Авторство: Авторы и разработчики Texture Studio: Pottus, Crayder. Разработчик адаптации для CR-MP 0.3e: я (Владимир Сергеенко/JoKeR_2020).
- 14 ответов
-
- 12
-
- fs
- setobjectmaterial
- (и ещё 4 )
-
Доброго времени суток. В этом примере я расскажу, как сделать ретекстур объектов. Для начала скачиваем программу Map Editor Цель работы: Научиться пользоваться функцией SetObjectMaterial. Прямая ссылка на источник на wiki SetObjectMaterial Переходим к практике. Открываем Map Editor, ставите объект, куда захотите и какой хотите, в моем случае - киоск (ID: 4638). Помечено галочками - что собрался ретекстурить. Текстура в моем случае будет ID: 4442 (гараж). Жмем на киоск 2 раза и откроется окно: Видим Model Textures Где написано Material: ... - индексы у нас их 10, придется подбирать индекс/ы, я уже подобрал - 10 (Material: 10 split: 10 Tex: brusch). Открываем .txd объекта, у которого будем брать текстуру и копируем название текстуры. В моем случае - будет самая первая текстура (gar_wall1) объекта гаража (4442): Для того, чтобы открыть текстуры объекта, скачиваем эту программу TXD Workshop Теперь всё основное у нас есть. Переходим к заключению. Открываем ваш GM (gamemode) и переходим в паблик OnGameModeInit. В любое место этого коллбэка вставляем: new- переменная объекта (назвать можно по-разному) переменная = CreateDynamicObject(4638, -343.51, 433.54, 11.70, 0.00, 0.00, 0.00); - объект киоска SetDynamicObjectMaterial(вставляем переменную, индекс (в моем случае это 10-ый), ид объекта у которого брали текстуру (в моем случае - гараж), "название текстуры гаража (gen_garages)", "название текстуры (в моем случае (gar_wall1)", по умолчанию здесь оставляем значение - 0); Выходит у нас так: new kiosk; kiosk = CreateDynamicObject(4638, -343.51, 433.54, 11.70, 0.00, 0.00, 0.00); SetDynamicObjectMaterial(kiosk, 10, 4442, "gen_garages", "gar_wall1", 0); Наглядный пример работоспособности: На этом всё, Господа, советую почитать сабж от SHOROOP'a - Почему не стоит злоупотре######ть изменением материалов (нюансы SetObjectMaterial) (http://cr-mp.ru/forum/topic/15110-pochemu-ne-stoit-zloupotrebliat-izmeneniem-mat/) P.S: на крышу киоска не обращайте внимание - стоит мод - зима SHOROOP'a. Остальные вопросы, касающиеся этому сабжу - задавайте здесь.
-
FAQ Почему не стоит злоупотреблять изменением материалов (нюансы SetObjectMaterial)
SHOROOP опубликовал теме в Мануалы/Уроки
Поскольку в настоящий момент обрели популярность работы с использованием функций замены текстур SetObjectMaterial(), считаю нужным расставить точки над i и оповестить о нескольких нюансах работы этой функции. Для начала - немного теоретической части для общего понимания механизма рендера движком моделей, и начнем с рендера SA без учета мультиплеера. Как многим известно, информация о моделях и их расположении подгружается движком из IDE (Item DEfinition file) и IPL (Item PLacement file) соответственно. Более того, масштабные модели имеют низкополигональную версию - LOD, который отрисовывается раньше основной модели и перестает отрисовываться при достижении нужного радиуса рендера. Соответственно, механика процесса такова: - игрок попал в зону отрисовки LOD: отрисовывается LOD. - игрок из зоны отрисовки LOD переходит в зону основного рендера: LOD выгружается из памяти и в рендере более не участвует до следующего вызова, рендерится основная модель. - игрок из зоны рендера основной модели переходит в зону рендера LOD: основная модель выгружается из памяти, рендерится LOD. - игрок выходит из зоны рендера LOD: LOD выгружается из памяти и в рендере не участвует. Созданные сервером объекты LOD не рендерят - серверу неоткуда брать информацию о нужном LOD. Поэтому схема упрощается: - игрок попал в зону основного рендера: рендерится основная модель. - игрок из зоны рендера основной модели выходит: основная модель выгружается из памяти (учитывая наличие стримера: оригинальная схема модели не выгружает, но жестко лимитирует их количество, выделяя память специально для них). Как можно заметить, без необходимости модель не занимает места в ОЗУ, тем самым экономя ресурсы. Основная проблема SetObjectMaterial (и производных, SetObjectMaterialText, к примеру) - она НЕ ВЫГРУЖАЕТ модель из ОЗУ. Схема рендера получается неполной: - игрок попал в зону основного рендера: рендерится основная модель. - игрок из зоны рендера основной модели выходит: основная модель НЕ ВЫГРУЖАЕТСЯ из памяти, загаживая стек. Стек не бесконечен. В случае SA максимально возможное количество используемой ОЗУ колеблется в районе 1.6ГБ. В случае переполнения стека движок пытается обратиться к участку памяти, доступа к которому у него нет, вследствие чего клиент падает с ошибкой, именуемой в народе "С++". Чрезмерное использование SetObjectMaterial еще больше увеличивает шансы выхода за пределы стека. Посему один небольшой совет: используйте функцию только там, где это действительно необходимо. К слову, корректно эта функция не работает даже на свежем SA:MP 0.3.7. Disclaimer: - использование данного материала без явного разрешения автора запрещено; - использование данного материала без явного указания автора, даже при его явном согласии, запрещено. От автора: я бы предложил закрепить в шапке, но это уже на усмотрение остальных.- 3 ответа
-
- 15
-
- SetObjectMaterial
- crmp
- (и ещё 5 )