MX_Master Posted June 12, 2011 Share Posted June 12, 2011 Недавно были добавлены новые клиентские функции для работы с DX прорисовкой. И я попытаюсь объяснить их функциональность на уровне понимания рядового скриптера. Функции dxDrawImage(Section) теперь умеют рисовать не только картинки из указанного файла, но и другие новые элементы, такие как текстуры, скрины экрана, шейдеры. А теперь все по порядку: dxCreateTexture создает текстуру (картинку) из указанного файла, чтобы потом её можно было юзать в dxDrawImage(Section) вместо пути к файлу картинки. Типы поддерживаемых картинок такие же как ранее были для dxDrawImage(Section), т.е. PNG, JPG, DDS, ... Эту текстуру также можно юзать и для GUI. dxCreateShader создает шейдер, проще говоря эффект (см. шейдеры). В параметрах нужно указать путь к .fx файлу. У шейдера можно менять параметры с помощью dxSetShaderValue. Для рядового скриптера сей факт означает, что теперь для разных картинок (текстур) можно создавать разные эффекты, например, эффект блюра, эффект движения каких-то частей текстуры, эффект маски, когда одна текстура является альфа каналом для другой текстуры. dxCreateFont создает собственный шрифт, чтобы его можно было юзать вместо названия стандартного шрифта в dxDraw, связанных с текстом. Стандартные шрифты остались, поэтому вместо элемента со шрифтом можно по прежнему юзать "default", "clear", "arial", ... (см. dxDrawText). Очень полезная функция для тех, кто хочет юзать свои уникальные шрифты в DX прорисовке. dxCreateScreenSource фактически создает в памяти скрин чистого GTASA экрана без MTASA прорисовок поверх него - без чата, гуя и прочих DX прорисовок. Далее этот скрин можно юзать как текстуру (картинку) для DX прорисовки или в шейдере для создания какого-то эффекта. Чтобы обновить этот, созданный в памяти скрин, можно заюзать dxUpdateScreenSource. dxGetMaterialSize вернет размеры текстуры созданной ранее с помощью dxCreateScreenSource или dxCreateTexture. Просто два целых числа - ширина и высота. dxCreateRenderTarget создает пустую текстуру, которую можно изменять, прорисовывая на ней какие-то другие элементы - текст, прямоугольники, линии, текстуры, шейдеры. Чтобы было понятней - это как отдельный контейнер, куда можно прорисовывать другие элементы, тем самым создавая собственную текстуру на лету. Далее эту скомбинированную текстуру можно рисовать уже на самом экране, переключив с помощью dxSetRenderTarget цель прорисовки с нашей новой готовой текстурки на экран. dxSetRenderTarget с помощью этой функции можно указывать, в какую текстуру в данный момент будут прорисовываться другие элементы. Если ничего не указать в параметрах, то прорисовка будет идти непосредственно на экран. --- для наглядности был создан ресурс, который позволяет визуально ощутить самые скромные возможности нового функционала. СКАЧАТЬ ТЕСТОВЫЙ РЕСУРС ( dxTest.zip ) --- вопросы приветствуются --- Если у кого-то есть рабочие примеры скриптов, демонстрирующих возможности этих функций, оставляйте их здесь (желательно сразу как ресурс с нужными файлами шрифтов/картинок/эффектов). Link to comment
Kernell Posted June 12, 2011 Share Posted June 12, 2011 Интересно, как свои шейдеры создавать? (Именно FX файл) P.S. createLight жаль не сделали. Link to comment
KagerA Posted June 13, 2011 Share Posted June 13, 2011 эх, читаете мысли, Kernell ='(. Неделю уже, эксперементируя с атмосферой раздумываю, как можно "скрасить" систему освещения. При некоторой комбинации градиента неба, погоды, времени суток и отсутсвующей к сожалению createLight с вощможностью указать радиус, форму, силу света, можно было бы сделать отличную Horror атмосферу со всякими фонариками и тд... я кстати не совсем понимаю, что даёт createShader. Как им пользоваться? Неужто можно, скажем шейдер плитки наложить на поверхность оО? dxDrawImage ведь не предусматривает таких сложных деформаций, максимумм поворот. Или этим просто можно добиться других "концентраций" цветов чтоли, например наложить определённый шейдер поверх экрана чтобы сделать игру в зелёных, скажем, тонах? Link to comment
MX_Master Posted June 13, 2011 Author Share Posted June 13, 2011 тема переименована в связи с изменением имен функций по теме - есть ShaderFX для 3дс макса ну вы попробуйте для начала что-то простое сшейдерить Link to comment
DakiLLa Posted June 13, 2011 Share Posted June 13, 2011 ccw жжёт. Сегодня добавил еще несколько dx-функций. Хотелось бы и о них узнать поподробнее от тех, кто в данный момент имеет возможность потестировать их на 1.1 ... Link to comment
MX_Master Posted June 17, 2011 Author Share Posted June 17, 2011 Итак, в первый пост внесёно человеко-понятное описания функционала новых средств для DX прорисовки. Также добавлен ресурс, который позволяет просмотреть новые возможности в действии. Link to comment
MX_Master Posted June 19, 2011 Author Share Posted June 19, 2011 createFont был разделен на dxCreateFont и guiCreateFont. Для guiCreateFont нет параметра bold. Link to comment
MX_Master Posted June 19, 2011 Author Share Posted June 19, 2011 После нескольких тестов я задумался над обычным фактом сокрытия кода шейдеров от любителей явной халявы (: И такой способ есть, т.к. dxCreateShader кушает скомпилированные файлы не хуже чем исходники. Скомпилить .fx файл можно с помощью одной утилиты fxc.exe из DirectX SDK. Link to comment
CrazyDude Posted June 19, 2011 Share Posted June 19, 2011 Надеюсь текстуры можно будет передавать через клиент-сервер-клиент (пробовал сейчас, не получается) Link to comment
Romanius Posted June 20, 2011 Share Posted June 20, 2011 чую скоро будет возможность использовать игровые движки с поддержкой луа. Link to comment
Antibird Posted June 20, 2011 Share Posted June 20, 2011 Надеюсь текстуры можно будет передавать через клиент-сервер-клиент (пробовал сейчас, не получается) В принципе с учетом появления "File functions" для клиентов в версии 1.1, передавать можно все, что угодно. Прочитать графику на сервере, переслать строку на клиент (по частям, если все сразу не влезет), создать файл, записать и сохранить как png. А потом уже использовать. Поправьте, если вру, но ведь не обязательно графику (и не только) прописывать в meta.xml, чтобы иметь возможность работать с ней, достаточно пути к файлу? Link to comment
MX_Master Posted June 20, 2011 Author Share Posted June 20, 2011 Поправьте, если вру, но ведь не обязательно графику (и не только) прописывать в meta.xml, чтобы иметь возможность работать с ней, достаточно пути к файлу? а ты проверь (: Link to comment
Antibird Posted June 20, 2011 Share Posted June 20, 2011 а ты проверь (: Не, не вру, работает. Предполагаю, кстати, что раньше клиентов обделили file функциями по соображениям безопасности. Но мы ведь за мирный атом, не так ли. P.S. Спасибо, MX_Master, что подробно расписал всю эту тему. Link to comment
MX_Master Posted June 20, 2011 Author Share Posted June 20, 2011 канешна за добро мы боремся ((: Link to comment
CrazyDude Posted June 20, 2011 Share Posted June 20, 2011 Надеюсь текстуры можно будет передавать через клиент-сервер-клиент (пробовал сейчас, не получается) В принципе с учетом появления "File functions" для клиентов в версии 1.1, передавать можно все, что угодно. Прочитать графику на сервере, переслать строку на клиент (по частям, если все сразу не влезет), создать файл, записать и сохранить как png. А потом уже использовать. Поправьте, если вру, но ведь не обязательно графику (и не только) прописывать в meta.xml, чтобы иметь возможность работать с ней, достаточно пути к файлу? Интересно, как ты прочитаешь текстуру от dxCreateScreenSource, тебе дается ведь только указатель на эту текстуру Link to comment
MX_Master Posted June 21, 2011 Author Share Posted June 21, 2011 он имел ввиду только передачу с сервера в клиент, а не обратно Link to comment
Antibird Posted June 21, 2011 Share Posted June 21, 2011 Именно. А было бы здорово иметь возможность сохранять подобные вещи в качестве скриншотов. Link to comment
MX_Master Posted June 21, 2011 Author Share Posted June 21, 2011 Фактически эти скрины создаются в памяти пока ты на серве находишься. Если выйти, то память от них очиститься должна. Но пока в игре, их можно посмотреть нужный скрин в любой момент просто как в галерее, выбрав его из пиктограмм. Допустим это полезно, если как админ следишь за кем-то и делаешь скрины в память, потом выбираешь нужный и именно его фоткаешь на диск (F12 чтоле или др. прогой). Но это тривиально. Самое главное предназначение dxCreateCsreenSource это создание полноэкранных эффектов. Допустим, с помощью шейдера мона сделать экран черно-белым или придумать более красочные эффекты, например, раздвоение картинки, ели игрок пьян. Ну или в зомби моде сделать зомби вижн экран, где силуэты игроков будут видны сквозь стены. Все это, стессна, шейдерные эффекты и вычисление положения на экране. Link to comment
MX_Master Posted July 7, 2011 Author Share Posted July 7, 2011 Опа, в дополнение к новым DX возможностям, ccw добавил новое событие - "onClientHUDRender", которое позволяет рисовать под HUD'ом самой игры. Это дает возможность создавать полноценные полноэкранные эффекты без участия в них HUD'a игры. Механизм прост - в этом событии фоткаем кадр всего экрана, юзаем его как текстуру в шейдере и рисуем этот шейдер. Link to comment
MX_Master Posted July 7, 2011 Author Share Posted July 7, 2011 Новые примеры шейдеров и новых функций в действии, можно просмотреть и скачать здесь - https://wiki.multitheftauto.com/wiki/Shader_examples Link to comment
_Vincent_ Posted July 7, 2011 Share Posted July 7, 2011 https://wiki.multitheftauto.com/images/b ... Screen.jpg михалков) Link to comment
MX_Master Posted July 7, 2011 Author Share Posted July 7, 2011 михалков) кому чё, а мне вспомнился Супер Марио но тут он без кепки Link to comment
Kernell Posted July 7, 2011 Share Posted July 7, 2011 Дааа... МТА Рулит)) Ещё Steep Parallax не хватает Link to comment
Arisu Posted July 8, 2011 Share Posted July 8, 2011 "onClientHUDRender" я джва года ждал такую фичу! Есть вопрос: при использовании сложных шейдеров типа bloom, будет ли это сказываться на производительности? Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now