Chams за ценители
Chams за ценители.
Добре дошли измамник и chitmeykery. В тази тема, искам да покажа как се прави Chams, но акцентът на цялото не е как да го създаде, и как да се направи това "нестандартно". + От кода, който ще дам е да събира знания в създаването и triggerbota d3d Aimbot на, и ако не им липсва въображение, и това е нещо повече.
Естествено, че ще приемем, че вече сте направили една проста vallhak + Chams. Предизвикателството е да се прихване функция DrawIndexedPrimitive d3dx9.dll библиотека и определяне на данните за желаните модели, с това всичко, което знаете, така че да се опише целия процес няма да.
В каква ще бъде нашата необичайно Chams? И е, че с помощта на възможностите d3dx, ние ще привлече нашите модели не са просто боядисани цвят кредитно неизпълнение, но и с някакъв ефект.
По-конкретно, моя пример ще Chams vvide силует. За да направите това, което трябва да се използва шейдър, ако не знаете какво е, да намерите информация в интернет. След това с някакво основание, ще дам кода, можете да направите пожар Chams, лъчезарен, блясък, всичко, което влезе в главите ни, променяйки само кода на Shader, ползата, че те са написани на HLSL език много прилича на любимата си Б + +. Въпреки това, използването на шейдър доведа в Делфи, но не се притеснявайте, се пренаписват в C ++, цялата работа ще бъде много лесно, тъй като аз използвам само direktiks библиотека и C ++ всички функции също са описани.
Сега се опише алгоритъм.
1) Създаване на необходимите обекти ние d3dx: шейдъри, текстури, връх буфери. Texture ние трябва да го направи просто имаме нужда от мрежи. В конкретен пример, ние ще направи моделите на играчите. Vertex буфер, ние трябва да се наложи на него текстурата и показване на резултата. Texture също трябва да нещо да седне. И две шейдър, първият стандарт, който просто се излива цветови модел, втората с ефекта от нашия силует.
2) В DrawIndexedPrimitive, необходим модел въздаде на текстура (модел определя свой собствен начин, това е класическа - numvertices и primcount (броят на върховете, броят на примитиви)).
3) В EndScene прилага Shader за текстура, които направиха нашите модели. Shader ще си върши работата и ще намали средата на мрежите.
4) След това се направи teksuru над екрана. След изготвянето текстурата трябва да се почиства, в противен случай на екрана ще бъде неизвестен глупост.
Създаване на необходимите обекти.
d3ddev. GetDeviceCaps (капачки);
VERSPX1: = (inttostr (D3DSHADER_VERSION_MAJOR (капачки PixelShaderVersion)).);
VERSPX2: = (inttostr (D3DSHADER_VERSION_MINOR (капачки PixelShaderVersion)).);
STRASM: = "ps_ '+ VERSPX1 +" _ "+ VERSPX2 + # 13 +' Mov oC0, c0" + # 13; // това е кодът на първия Shader да запълни цвят мрежи, ако сте шокиран от тези символи не се притеснявайте, втората Shader пишем в HLSL
pixelshader: = нула;
ако D3DXASSEMBLESHADER (PCHAR (STRASM), дължина (strasm), нула. нула. 0, @ pshader. нула) = d3d_ok след това започва
d3ddev. CreatePixelShader (Pshader GetBufferPointer pixelshader..);
приключи;
pshader: = нула;
d3ddev. GetRenderTarget (0. backbuffer);
ако backbuffer <> нула тогава backbuffer. GetDesc (низходящо);
D3DDEV. CreateTexture (. Низходящо Ширина Низходящо Височина 1. D3DUSAGE_RENDERTARGET D3DFMT_A8R8G8B8 D3DPOOL_DEFAULT sil_texture NIL .......);
sil_texture. GetSurfaceLevel (0. rendersurface);
// шейдър силует, кодът е във файл t.fx
ако D3DXCompileShaderFromFile (pchar (ул + '\ t.fx "), нула. нула." основна ". pchar (" ps_' + VERSpx1 + '_' + VERSpx2), 0, @ pshader. нула. нула) = d3d_ok тогава
d3ddev. CreatePixelShader (pshader GetBufferPointer sil_ps ..);
d3ddev. CreateVertexBuffer (sizeof (TVertex2) * 4. 0. fvf2 D3DPOOL_MANAGED sil_vertex нула ...);
ет: = 0;
// определи модел
ако check_model1 (numvertices promcount.) след това ет: = 1
ако check_model2 (numvertices promcount.) след това ет: = 2
ако (ет> 0), след това започва
d3ddev. CreateStateBlock (D3DSBT_ALL pStateBlock.); // запазите текущите настройки renderstate. а дори и след преминаване на изхода правят на друго място, това се случва само глупости.
ако ет = 1 тогава започва
R: = 1; г: = 1; б: = 0;
приключи;
ако ет = 2 след това започва
R: = 0; г: = 1; б: = 1;
приключи;
d3ddev. getrenderstate (d3drs_zenable old_zenable.);
d3ddev. SetRenderTarget (0. rendersurface); // определя въздаде на текстура
d3ddev. SetRenderState (d3drs_zenable ifalse.); //
pixelvalue # 91; 0 # 93 ;: = R; pixelvalue # 91; 1 # 93 ;: = грам; pixelvalue # 91; 2 # 93 ;: = б; pixelvalue # 91; 3 # 93 ;: = 1;
d3ddev. SetPixelShader (pixelshader);
d3ddev. SetPixelShaderConstantF (0, @ pixelvalue 1.); // използвате първия Shader, за цвета на запълване. Ние ще се съхраняват в текстурата сенчести модели и на екрана нормално, че този метод може да се използва, за да цвят Aimbot без Chams.
резултат: = or_drawindexedprimitive (самостоятелно _Type BasevertexIndex Minvertexindex Numvertices Startindex Primcount ......);
/////
ако ет = 1 тогава започва
R: = 1; г: = 0; б: = 0;
приключи;
ако ет = 2 след това започва
R: = 0; г: = 1; б: = 0;
приключи;
d3ddev. SetRenderState (d3drs_zenable old_zenable.);
pixelvalue # 91; 0 # 93 ;: = R; pixelvalue # 91; 1 # 93 ;: = грам; pixelvalue # 91; 2 # 93 ;: = б; pixelvalue # 91; 3 # 93 ;: = 1;
d3ddev. SetPixelShader (pixelshader);
d3ddev. SetPixelShaderConstantF (0, @ pixelvalue 1.);
резултат: = or_drawindexedprimitive (самостоятелно _Type BasevertexIndex Minvertexindex Numvertices Startindex Primcount ......);
d3ddev. SetRenderTarget (0. oldrendersurface); // възстанови старото направи
d3ddev. SetPixelShader (oldpixelshader);
d3ddev. SetPixelShaderConstantF (0, @ oldpixelvalue 1.);
pStateBlock. прилага; // правят настройки са зададени.
pStateBlock: = нула;
приключи;
резултат: = or_drawindexedprimitive (самостоятелно _Type BasevertexIndex Minvertexindex Numvertices Startindex Primcount ......);
Написано такива protsedurku до изхода текстура шейдъри.
процедура draw_texture (х1 у1 x2 y2 единична. ... текстура idirect3dtexture9 ;. PS idirect3dpixelshader9.);
Var
Върхове. масив # 91; 0..3 # 93; на TVertex2;
pVertices. Pointer;
започвам
// връх структура
// fvf2 = D3DFVF_XYZRHW или D3DFVF_TEX1;
// TVertex2 = запис
// X, Y, Z, rhw: единичен;
// TU, телевизор: единичен;
// край;
ако d3ddev = нула след излизане;
ако sil_vertex = нула след излизане;
// комплект координати и връх текстура координати
върхове # 91; 0 # 93. х: = x1; върхове # 91; 0 # 93. Y: = y1; върхове # 91; 0 # 93. Z: = 0; върхове # 91; 0 # 93. rhw: = 1;
върхове # 91; 0 # 93. ТУ: = 0; върхове # 91; 0 # 93. ТВ: = 0;
върхове # 91; 1 # 93. х: = Х2; върхове # 91; 1 # 93. Y: = y1; върхове # 91; 1 # 93. Z: = 0; върхове # 91; 1 # 93. rhw: = 1;
върхове # 91; 1 # 93. ТУ: = 1; върхове # 91; 1 # 93. ТВ: = 0;
върхове # 91; 2 # 93. х: = x1; върхове # 91; 2 # 93. Y: = Y 2; върхове # 91; 2 # 93. Z: = 0; върхове # 91; 2 # 93. rhw: = 1;
върхове # 91; 2 # 93. ТУ: = 0; върхове # 91; 2 # 93. ТВ: = 1;
върхове # 91; 3 # 93. х: = Х2; върхове # 91; 3 # 93. Y: = Y 2; върхове # 91; 3 # 93. Z: = 0; върхове # 91; 3 # 93. rhw: = 1;
върхове # 91; 3 # 93. ТУ: = 1; върхове # 91; 3 # 93. ТВ: = 1;
Резултат: = sil_vertex. Lock (0. sizeof (TVertex2) * 4. pVertices 0.);
ако не бе успешно (Резултат) след излизане;
Преместване (върхове # 91; 0 # 93;, pVertices ^, sizeof (TVertex2) * 4);
sil_vertex. отключване;
d3ddev. CreateStateBlock (D3DSBT_ALL pStateBlock.);
d3ddev. SetPixelShader (NIL);
d3ddev. SetPixelShader (PS); // извайвам ни правоъгълник текстура и използването на шейдъри
d3ddev. SetTexture (0. текстура);
d3ddev. SetStreamSource (0. sil_vertex 0. sizeof (TVertex2).);
d3ddev. SetFVF (FVF2);
d3ddev. DrawPrimitive (D3DPT_trianglestrip 0. 2).
pStateBlock. прилага;
pStateBlock: = нула;
// начертаете квадрат, то е, че трябва да се почисти текстура
процедура DrawRect (х1 у1 x2 y2 число. ... г г б байт ...);
Var BarRect. D3DRECT; Кор. D3DCOLOR;
започвам
КР: = ((Ь) + ((ж) SHL 8) + ((R) SHL 16));
BarRect. x1: = x1; BarRect. Y1: = y1; BarRect. х2: = Х2; BarRect. y2: = Y 2;
ако d3ddev <> нула тогава d3ddev. Clear (1. @ BarRect D3DCLEAR_TARGET или D3DCLEAR_ZBUFFER Кор 0. 0 ...);
приключи;
draw_texture (0. 0. низходящо Ширина низходящо Височина sil_texture sil_ps .....); // изготвят текстурата
резултат: = or_endscene (самостоятелно);
// Почистваме teksturku
ако d3ddev <> нула след това да започне
d3ddev. GetRenderTarget (0. oldrendersurface);
d3ddev. SetRenderTarget (0. rendersurface);
drawrect (0. 0. низходящо Ширина низходящо Височина 0. 0. 0 ....);
d3ddev. SetRenderTarget (0. oldrendersurface);
приключи;
Тук той Shader силует код pishitsya по обичайния бележника, в този пример, t.fx на името на файла
// шейдър силует от Baunti
проби TextureSampler;
структура PixelInput
<
float2 TexCoord. TEXCOORD0;
>;
поплавък сума (float4 а)
се върне (а # 91; 0 # 93 + на # 91; 1 # 93 + на # 91; 2 # 93 + на # 91; 3 # 93);
>;
float4 основна (PixelInput вход). COLOR0
поплавък хх = 0.003; // ширина на силуета
float4 colorout;
float4 цвят = tex2D (... TextureSampler float2 (вход TexCoord х вход TexCoord у) ...);
float4 COLOR1 = tex2D (. TextureSampler float2 (вход TexCoord х + хх вход TexCoord у) .....);
float4 COLOR2 = tex2D (... TextureSampler float2 (вход TexCoord х - хх вход TexCoord у) ...);
float4 color3 = tex2D (... TextureSampler float2 (вход TexCoord х вход TexCoord у + хх) ...);
float4 color4 = tex2D (... TextureSampler float2 (вход TexCoord х вход TexCoord у - хх) ...);
colorout = цвят;
ако ((сума (COLOR1)> 0) (сума (цвят) == 0))
colorout = COLOR1;
>;
ако ((сума (COLOR2)> 0) (сума (цвят) == 0))
colorout = COLOR2;
>;
ако ((сума (color3)> 0) (сума (цвят) == 0))
colorout = color3;
>;
ако ((сума (color4)> 0) (сума (цвят) == 0))
colorout = color4;
>;
Ако някой е овладял всичко, което съм написал, аз предлагам в този спред, за шейдърите и снимки на екрани, аз бях все още се развива ефектът мини шейдър "стъкло", някой ще се интересуват мога да хвърлям.
Re: Chams за ценители.
Ето един шейдър, което аз наричам стъклото, има силует, а тя modelc пълноцветни с прозрачността. Как ще стане ясно, посочен в кода за шейдъри. Всичко това за дълго време, аз написах преди 5 месеца, но все пак вкара shaders'll се върне и ще се създаде нещо по-интересно и по-сложно.
// шейдър от Baunti
проби TextureSampler;
структура PixelInput
<
float2 TexCoord. TEXCOORD0;
>;
поплавък сума (float4 а)
<
се върне (а # 91; 0 # 93 + на # 91; 1 # 93 + на # 91; 2 # 93 + на # 91; 3 # 93);
>;
float4 основна (PixelInput вход). COLOR0
<
поплавък хх = 0.004;
float4 цвят = tex2D (... TextureSampler float2 (вход TexCoord х вход TexCoord у) ...);
float4 COLOR1 = tex2D (. TextureSampler float2 (вход TexCoord х + хх вход TexCoord у) .....);
float4 COLOR2 = tex2D (... TextureSampler float2 (вход TexCoord х - хх вход TexCoord у) ...);
float4 color3 = tex2D (... TextureSampler float2 (вход TexCoord х вход TexCoord у + хх) ...);
float4 color4 = tex2D (... TextureSampler float2 (вход TexCoord х вход TexCoord у - хх) ...);
float4 colorout = цвят;
ако ((сума (COLOR1)> 0) (сума (цвят) == 0))
<
colorout = COLOR1;
colorout # 91; 3 # 93 = 0.7;
>;
ако ((сума (COLOR2)> 0) (сума (цвят) == 0))
<
colorout = COLOR2;
colorout # 91; 3 # 93 = 0.7;
>;
ако ((сума (color3)> 0) (сума (цвят) == 0))
<
colorout = color3;
colorout # 91; 3 # 93 = 0.7;
>;
ако ((сума (color4)> 0) (сума (цвят) == 0))
<
colorout = color4;
colorout # 91; 3 # 93 = 0.7;
>;
Публикувано от Baunti [Трябва да се регистрирате и да не е блокиран от страна на потребителя да видите връзките да се регистрират в тази връзка]
Ето един шейдър, което аз наричам стъклото, има силует, а тя modelc пълноцветни с прозрачността. Как ще стане ясно, посочен в кода за шейдъри. Всичко това за дълго време, аз написах преди 5 месеца, но все пак вкара shaders'll се върне и ще се създаде нещо по-интересно и по-сложно.
// шейдър от Baunti
проби TextureSampler;
структура PixelInput
<
float2 TexCoord. TEXCOORD0;
>;
поплавък сума (float4 а)
<
се върне (а # 91; 0 # 93 + на # 91; 1 # 93 + на # 91; 2 # 93 + на # 91; 3 # 93);
>;
float4 основна (PixelInput вход). COLOR0
<
поплавък хх = 0.004;
float4 цвят = tex2D (... TextureSampler float2 (вход TexCoord х вход TexCoord у) ...);
float4 COLOR1 = tex2D (. TextureSampler float2 (вход TexCoord х + хх вход TexCoord у) .....);
float4 COLOR2 = tex2D (... TextureSampler float2 (вход TexCoord х - хх вход TexCoord у) ...);
float4 color3 = tex2D (... TextureSampler float2 (вход TexCoord х вход TexCoord у + хх) ...);
float4 color4 = tex2D (... TextureSampler float2 (вход TexCoord х вход TexCoord у - хх) ...);
float4 colorout = цвят;
ако ((сума (COLOR1)> 0) (сума (цвят) == 0))
<
colorout = COLOR1;
colorout # 91; 3 # 93 = 0.7;
>;
ако ((сума (COLOR2)> 0) (сума (цвят) == 0))
<
colorout = COLOR2;
colorout # 91; 3 # 93 = 0.7;
>;
ако ((сума (color3)> 0) (сума (цвят) == 0))
<
colorout = color3;
colorout # 91; 3 # 93 = 0.7;
>;
ако ((сума (color4)> 0) (сума (цвят) == 0))
<
colorout = color4;
colorout # 91; 3 # 93 = 0.7;
>;
Prompt pzhlst. И каква процедура да натиснете този код (за създаване на всички необходими)?
и защо играта се срива тук по тази линия Deviceinterface.SetPixelShader код (pixelshader);
Точно затова тук, в резултат на процедурата по :. = DrawIndexedPrimitiveNext (самостоятелно, _Type като IDirect3DDevice9 обслужва самостоятелно и не DrawIndexedPrimitiveNext ние пресичане (функция DrawIndexedPrimitiveCallback (Deviceinterface :? IDirect3DDevice9.)
По принцип, ако някой може, моля прочете целия код с списъка с променливи и процедури, а може би не бях прав да помогне на начинаещ стена хакерство моля ..
Тук е моят списък с глобални променливи, константи и типове:
Публикувано от arxlex [Трябва да се регистрирате и да не е блокиран от страна на потребителя да видите връзките да се регистрират в тази връзка]
Защо трябва сорс кода, всичко е написано в детайли. Просто прочетете внимателно. Primerchik много оригинално, но много спирачките. Има идея vpihat това чудо в живо?
Публикувано от arxlex [Трябва да се регистрирате и да не е блокиран от страна на потребителя да видите връзките да се регистрират в тази връзка]
Първа сделка с това:
Какво мислиш, че аз 3d устройство никога никога не е виждал. И този код вече е резултат от пръст, насочен към небето! Тъй като вече премина през всички варианти на кода и това творение и не работи.