Ru/Adding a dynamic sky to your mod: Difference between revisions
(Updating and rephrasing parts of this article) |
m (Multipage removal) |
||
| (3 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
{{ | {{LanguageBar|title = Добавление динамического неба в ваш мод}} | ||
{{cleanup|Перевод можно было сформулировать лучше}} | {{cleanup|Перевод можно было сформулировать лучше}} | ||
[[File:Dynamic Sky.jpg|500px|thumb|right|Динамичное небо]] | [[File:Dynamic Sky.jpg|500px|thumb|right|Динамичное небо]] | ||
| Line 14: | Line 15: | ||
{{note|Если вы не знаете как компилировать шейдеры или еще не работали с ними в {{src|4}}, рекомендуется сначала прочитать и осмыслить эти статьи: | {{note|Если вы не знаете как компилировать шейдеры или еще не работали с ними в {{src|4}}, рекомендуется сначала прочитать и осмыслить эти статьи: {{L|Shader Authoring|Разработка шейдеров}} & {{L|Source_SDK_2013:_Your_First_Shader|Ваш первый шейдер}}}} | ||
== Реализация == | == Реализация == | ||
| Line 114: | Line 115: | ||
// | // | ||
int idx = 0; | int idx = 0; | ||
for (i = nPhi - | for ( i = 0; i < nPhi - 1; ++i ) | ||
{ | { | ||
for (j = | for ( j = 0; j < nTheta; ++j ) | ||
{ | { | ||
idx = nTheta * i + j; | idx = nTheta * i + j; | ||
meshBuilder.Index(idx | meshBuilder.Index( idx ); | ||
meshBuilder.AdvanceIndex(); | meshBuilder.AdvanceIndex(); | ||
meshBuilder.Index(idx); | meshBuilder.Index( idx + nTheta ); | ||
meshBuilder.AdvanceIndex(); | meshBuilder.AdvanceIndex(); | ||
} | } | ||
| Line 131: | Line 132: | ||
// a connecting triangle. | // a connecting triangle. | ||
// | // | ||
if (i < nPhi - 2) | if ( i < nPhi - 2 ) | ||
{ | { | ||
meshBuilder.Index(idx); | meshBuilder.Index( idx + nTheta ); | ||
meshBuilder.AdvanceIndex(); | meshBuilder.AdvanceIndex(); | ||
meshBuilder.Index( | meshBuilder.Index( ( i + 1 ) * nTheta ); | ||
meshBuilder.AdvanceIndex(); | meshBuilder.AdvanceIndex(); | ||
} | } | ||
| Line 183: | Line 184: | ||
Хорошо, а сейчас нам нужно сделать наше динамическое небо доступным через {{hammer|4}}. | Хорошо, а сейчас нам нужно сделать наше динамическое небо доступным через {{hammer|4}}. | ||
Для этого вам понадобиться пользовательский | Для этого вам понадобиться пользовательский {{L|FGD|fgd}} файл. | ||
{{CodeBlock|lines=22|src=skydome.fgd|<nowiki>@include "halflife2.fgd" | {{CodeBlock|lines=22|src=skydome.fgd|<nowiki>@include "halflife2.fgd" | ||
| Line 224: | Line 225: | ||
Создайте карту с сущностью {{code|select=all|env_skydome}} и вот оно! Теперь в вашем моде должно быть динамическое небо. | Создайте карту с сущностью {{code|select=all|env_skydome}} и вот оно! Теперь в вашем моде должно быть динамическое небо. | ||
{{ACategory|Modding}} | |||
{{ACategory|Tutorials}} | |||
Latest revision as of 03:02, 12 July 2024
Эта статья покажет вам как реализовать динамическое небо в вашем
Source 2013 моде.
Требования
- Умение компилировать шейдеры.
- Умение компилировать решения.
Реализация
Прежде чем что-то делать, нам нужно скачать файлы. Они внутри zip-архива.
Когда вы загрузите zip-файл, извлеките файлы из shaders в: ![]()
src/materialsystem/stdshaders/, а файлы из code в: ![]()
src/game/
Откройте ![]()
src/game/client/client_base.vpc
Перейдите к строке $File "$SRCDIR\game\client\c_vote_controller.cpp" и под ней добавьте:
Далее откройте ![]()
src/game/server/server_base.vpc и под $File "$SRCDIR\game\server\vote_controller.cpp" добавьте:
И после этого, пересоберите свое ![]()
games.sln решение.
Теперь мы можем перейти к реализации кода отрисовки.
Код отрисовки
Сначала нам нужно отредактировать код клиента для динамического неба.
Откройте ![]()
src/game/client/view.cpp
В функции void CViewRender::Init( void ), под m_ModulateSingleColor.Init( "engine/modulatesinglecolor", TEXTURE_GROUP_OTHER ); добавьте:
Теперь откройте ![]()
src/game/client/viewrender.h
И под функцией void SetWaterOverlayMaterial( IMaterial *pMaterial ) добавьте:
Найдите CMaterialReference m_UnderWaterOverlayMaterial; и под этим добавьте:
Теперь нам нужно создать купол. Чтобы сделать это, откройте ![]()
src/game/client/viewrender.cpp
Под #include "sourcevr/isourcevirtualreality.h" добавьте:
Под функцией void CViewRender::DrawViewModels( const CViewSetup &view, bool drawViewmodel ) добавьте:
Теперь для включения и отключения отрисовки вам нужно перейти к функции void CRendering3dView::DrawWorld( float waterZAdjust ) и
выше unsigned long engineFlags = BuildEngineDrawWorldListFlags( m_DrawFlags ); добавить:
Шейдеры
stdshader_dx9_30.txt и убедитесь, что в вашем stdshader_dx9_30.txt файле есть только skydome_ps30 и skydome_vs30, чтобы ускорить компиляцию шейдеров (НЕ ЗАБУДЬТЕ ОЧИСТИТЬ stdshader_dx9_20b.txt)А теперь откройте ![]()
game_shader_dx9_base.vpc
И под $File "screenspace_general.cpp" добавьте:
Скомпилируйте шейдер динамического неба и пересоберите ваше решение.
Хорошо, а сейчас нам нужно сделать наше динамическое небо доступным через
Hammer.
Для этого вам понадобиться пользовательский fgd файл.
Заключение
Теперь вам нужна последняя деталь и это - материал.
Перейдите в вашу директорию ![]()
materials и создайте поддиректорию с названием ![]()
shaders
После этого, создайте файл ![]()
skydome.vmt и вставьте это внутрь:
Создайте карту с сущностью env_skydome и вот оно! Теперь в вашем моде должно быть динамическое небо.