X86Jumps Опубликовано 27 августа, 2017 Поделиться Опубликовано 27 августа, 2017 (изменено) В ходе попытки сделать простой aimbot возникли вопросы того, как рисует сцену движок как я написал тут, я наше матрицу, которую передают во все vertex shader (всегда c1 регист) вопрос вот в чем, если все объекты расположены в разных позициях имеют свою матрицу трансформации, то как же они правильно располагаются? вот например такая матрица Цитата 1.66 0.00 0.16 0.16 0.00 2.99 0.00 0.00 0.27 0.01 -0.99 -0.99 86.18 -374.67 -651.33 -635.32 вот шейдер Скрытый текст // // Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111 // // Parameters: // // float4 CBROPTest__packed0; // float4 CBSkinning__packed0; // float4 CBVertexDisplacement2__packed0; // float4 CBVertexDisplacement__packed0; // float4 CBVertexDisplacement__packed1; // sampler2D SSClampLinear__tVtxDisplacement; // sampler2D SSPoint__tMatrixMap; // sampler2D SSWrapLinear__tVtxDispMask; // float4 __tMatrixMap__invsize; // float4 __tVtxDisplacement__invsize; // float2 fScreenHalfPixelOffset; // row_major float4x4 fViewProj; // // // Registers: // // Name Reg Size // ------------------------------- ----- ---- // fViewProj c1 4 // CBROPTest__packed0 c5 1 // fScreenHalfPixelOffset c6 1 // CBSkinning__packed0 c7 1 // __tMatrixMap__invsize c8 1 // CBVertexDisplacement__packed0 c9 1 // CBVertexDisplacement__packed1 c10 1 // __tVtxDisplacement__invsize c11 1 // CBVertexDisplacement2__packed0 c12 1 // SSPoint__tMatrixMap s0 1 // SSClampLinear__tVtxDisplacement s1 1 // SSWrapLinear__tVtxDispMask s2 1 // vs_3_0 def c0, 2, -1, 32768, -0 def c13, 0.125, 1, 0, 3 dcl_position v0 dcl_normal v1 dcl_tangent v2 dcl_binormal v3 dcl_2d s0 dcl_2d s1 dcl_2d s2 dcl_position o0 dcl_color o1.xy dcl_texcoord o2 add r0.x, c9.x, v3.x frc r0.x, r0.x mul r0.x, r0.x, c9.z mov r0.yzw, c13.xxyz texldl r0, r0, s1 add r0.y, c12.x, v3.y frc r0.y, r0.y mul r1.x, r0.y, c12.z mov r1.y, c13.x mov r0.zw, c13 mad r1.xy, c11, r0.zwzw, r1 mov r1.zw, -c0.xyyw texldl r1, r1, s1 mul r2, -c0.yyww, v3.xyxx texldl r2, r2, s2 mul r0.y, r2.x, c12.y mul r0.z, r2.x, c9.y mul r0.y, r0.y, r1.x mad r0.x, r0.x, r0.z, r0.y mov r1.zw, -c0.w mul r0.y, c0.z, v0.w frc r0.z, r0.y add r0.y, -r0.z, r0.y mad r2.x, r0.y, c7.x, c7.y mov r3.xyw, c0 mul r2.yzw, -r3.xyww, c7.z mad r1.xy, c8, -r3.ywzw, r2 texldl r1, r1, s0 mad r0.yzw, v1.xxyz, c0.x, c0.y dp3 r4.y, r1, r0.yzww mad r3.xy, c8, r3_abs.xwzw, r2 texldl r2, r2, s0 mov r3.zw, -c0.w texldl r3, r3, s0 dp3 r4.z, r3, r0.yzww dp3 r4.x, r2, r0.yzww nrm r5.xyz, r4 mad r4, v2, c0.x, c0.y dp3 r6.y, r1, r4 dp3 r6.z, r3, r4 dp3 r6.x, r2, r4 nrm r4.xyz, r6 mul r0.yzw, r5.xyzx, r4.xzxy mad r0.yzw, r4.xyzx, r5.xzxy, -r0 mad r4.xyz, r4, c10.x, r5 mul r0.yzw, r4.w, r0 mad r0.yzw, r0, c10.y, r4.xxyz nrm r4.xyz, r0.yzww mad r5, v0.xyzx, -c0.yyyw, -c0.wwwy dp4 r1.y, r1, r5 dp4 r1.z, r3, r5 dp4 r1.x, r2, r5 mad r0.xyz, r4, r0.x, r1 mul r1, r0.y, c2 mad r1, r0.x, c1, r1 mad r0, r0.z, c3, r1 add r0, r0, c4 mad o0.x, c6.x, -r0.w, r0.x mad o0.y, c6.y, r0.w, r0.y add o0.z, r0.z, c5.z mov o0.w, r0.w mov o1.xy, r0.zwzw mov o2, v3.xyxy // approximately 75 instruction slots used (12 texture, 63 arithmetic) ну их очень много, но все похожие я сделал такой Скрытый текст row_major float4x4 WorldViewProj : WORLDVIEWPROJ; struct VS_OUTPUT { float4 Pos : POSITION; }; VS_OUTPUT main(float4 inPos : POSITION ) { VS_OUTPUT Out; Out.Pos = mul(inPos, WorldViewProj ); return Out; }; компилится в такое Скрытый текст Microsoft (R) Direct3D Shader Compiler 9.29.952.3111 Copyright (C) Microsoft Corporation 2002-2009. All rights reserved. // // Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111 // // fxc /Tvs_3_0 C:\tmp\test.hlsl // // // Parameters: // // row_major float4x4 WorldViewProj; // // // Registers: // // Name Reg Size // ------------- ----- ---- // WorldViewProj c0 4 // vs_3_0 dcl_position v0 dcl_position o0 mul r0, c1, v0.y mad r0, v0.x, c0, r0 mad r0, v0.z, c2, r0 mad o0, v0.w, c3, r0 // approximately 4 instruction slots used проверял через Nvidia NSight 4.1, мои линии рисуются где то не понятно где (ошибок в вызовах методов pDevice нет) потом поняв что не получается решил перемещать объект простой (например спрей) в точку которую хочу, у меня есть координаты игрока, партнера, камеры еще вектора, подумал если я буду перемещать то хотя бы наглядно пойму что я делал не так при aimbot я нашел место где создается объект спрея, но понять как он создается пока не очень понял я знаю что в игре в архивах есть файлы lot, в которых встречаются строки типа такой cSetInfoItem.....uItem.........H.......uWp1173 в файле заметок по игре у меня был адрес, где он обрабатывает эти файлы, ставил бряк перед вызовом и менял содержимое после получалось что спавнился другой объект но жесткий тот сдох, я там многое потерял по памяти что то восстановил ...чтоб не тратить много времени решил пока просто перемещать уже расставленый предмет нашел коллекцию объеков uItem, правда каждый раз тот спрей на сцене под разным номером пока вручную придется (ну или проверять позицию что она не нулевая, просто придется по всему списку пройтись сначала и найти по определенному классу его) Игра рисует сцену раза 3 4 сначала просто, потом кажется определяет глубину, потом освещенность меши игроков разбиты по частям список bone mapping я находил вроде, трансформацию тоже (но туда пока не лез) Изменено 27 августа, 2017 пользователем X86Jumps Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения