From 52c9da08eda9fbde0fa085554a241b85475339b1 Mon Sep 17 00:00:00 2001 From: xiangsilian Date: Tue, 13 Jan 2026 08:12:46 +0800 Subject: [PATCH] save code --- app/src/main/assets/shaders/bg.vert | 4 ++++ app/src/main/assets/shaders/bg.vert.spv | Bin 2008 -> 2472 bytes app/src/main/assets/shaders/texture.vert | 4 ++++ app/src/main/assets/shaders/texture.vert.spv | Bin 2540 -> 3036 bytes .../main/java/com/hmwl/face_sdk/InitArg.java | 5 ++++- .../com/inewme/uvmirror/MakeupActivity.kt | 2 +- .../java/com/inewme/uvmirror/MotionManager.kt | 4 +++- vulkan/FaceApp.cpp | 2 ++ vulkan/FaceApp.h | 6 +++++- vulkan/main.cpp | 2 ++ 10 files changed, 25 insertions(+), 4 deletions(-) diff --git a/app/src/main/assets/shaders/bg.vert b/app/src/main/assets/shaders/bg.vert index da07cd8..4d90fb5 100644 --- a/app/src/main/assets/shaders/bg.vert +++ b/app/src/main/assets/shaders/bg.vert @@ -45,6 +45,8 @@ layout(push_constant) uniform PushConstants { float radius; float ux; float uy; + float offset_x; + float offset_y; } pushConstants; @@ -55,6 +57,8 @@ void main() { // 获取顶点位置 vec2 position = positions[gl_VertexIndex]; position = position * pushConstants.zoom; + position.x = position.x + (pushConstants.offset_x/480); + position.y = position.y + (pushConstants.offset_y/480); // 设置输出位置(Vulkan使用不同的坐标系) gl_Position = vec4(position, 0.0, 1.0); diff --git a/app/src/main/assets/shaders/bg.vert.spv b/app/src/main/assets/shaders/bg.vert.spv index c90eeddfae2f360861477f806ed17c42664c177e..d26a9d5a60f97719f94268d6f76577814a0a78df 100644 GIT binary patch literal 2472 zcmai#%~BIl5QPU~f{KEOfIo&cih|X;??7|3-N?yqP@7bu{PNZ zE0fbRQ!u)`R78Z+EkD*V$!^)Nb3QN0OI9Q){cG3$L*%qrNnTpW3EB37rXTu26F98 zj_c29-}|S2?zJFXJt$QhaU0+hADo5F+LrM;BAmNLxL*%9`~zAfkJuL7v$k2N`FqPg zoqAtAvTPGe8A2mFy063Tms{bz^KpS@lIfa35!&W&;3}$0i%8}cEj)iOC>PQVAM>n=;@Gz)vGM{=&0M(hdw5>Q{Cgq+002Z0C19s9LsCG?se47fA+ywiDOvtQJi zdk}j_H)jU9_y2_0S@HON!iU)CISCl|B1wmF+2X_4zs>Z zO82~<1@pfvtxaP2W_0G=nTL7p#A2R!-$zczXGj)i(>T}=>R8myjK%g?&pXWOSdz|y z|5Q7CVxbqE&RysWIP$W4qaJj4#HD|aCD_;9ot`*M+Ywf9Sey2e zyqNc830!PT5@wg2d=t+kd^fxsInm*hlbLxXv6*3>m|=XGnUVwyj@7vCaAK|KjQ(3+ H|D5CxREVRT delta 749 zcmX|8+b%;<5S`tlH`REM(58qIL0fmF^nz4U(ial(CL)|j6H%&?K9GJxvp<4Y@!%Ug zc=s3m0*STG+1ox@ojq&T%$}LPjr&)J$dVrw0O=bb0!8}T^3?~E*16(bH{)x47%0BZQnf4n#kN=0>l zAgvR@z3v#uIRrySl!ZTt`#hk4arg_cjFX$>sIWGNF=7h3EG!>nyl8w5N{)3|V+r7) zeodt71zC*51}w!`zgK`hw?i(6`N?kraRbY3!DnIemMa*Jyydoy#^<6k#4&b2vM7r% ziJ*|2?Rr;#hw7@Nli}BH8I7`$MIZ{CpfOIiY&e*IZpCoiykLT=jJ0rtW4`ta<_Goq}+sw*!G#iG=;OfP`xO{VY zxo=@t-Nqi&Y%)CVcI|urge;5AV)_SwuTWj|Q?Y%tmE^To&HSXDacd1`x=iUna8v5$|O3|CT zYp0ig-@a4cs&^&ty=>>3?Jf4;yqh07?H|4E;Jlx$d~?3jD)TRacQ-|-o-AR3{pPDPY$fcu zj&VBo3GTwY>L<|Z><#23`R!AztpWB9^_9Pru)h~_+8<#bLc%WgPUW;emTcP1e}vuq z5$|2!WvSL?q8b_U+vMRsfZ zos4sXzF|3Qy~pmI%6T@izeRFU>oPiPM*le!Z4tkKZm;4o>>nh(tW_`Gr(E#%VV*^H z-^w+_x?H;2FPt%3MPeTVvZ?-NJ^iQ1Fs#>q!cIdhz5e-Sa~ zDI{{dl=!Ig3fMZn&+vH_UH*6SSobwV&NusO;$BBLm$s-kjUM&vN337i&nCNXJ!-v) zE+758jcz}_|L{47E+74zN0+Pia{+8FZBg$Xbo;TM{fPB5ud{m}(S9SH=}O|*_PCkE z4Y4^t!x)7oT1)CBzfvM|Xbx?fOKcS)Q1hp2Xs` zmyQgv>5&zuQ&cSlHTdHq&|cA)Xi>B-O6xDB`;Qzm@<{q1;}^D?n_Ie(i4oKyQF2D_ zdfr~x2%13{y@L&J1hrz=hA>~A(P)u zLZ;H~NRDHWbG=j!S_*72GQwJ44`mdlJ0@sDwM zbXICceWQ;Y_`AB*hlsx?esiS|`NDJd>fxu#hqz1B4o;obuw2>IZ5XwF4k};ho?+Cx z8cManW&YG$Lqqd|Ua=V|^za*W-xBB-JSXw;se~IWd^BWOyOdgHJ zNaov2&W3p+6T46UxkuCs;=&Jzqfc4UpyHD!GPMWT&5Q+PX!}^6`zpy!q$l;>&*{>uwUvnya$)0B8>#D3c8h=aVKn>=g|$m|jr zc|3JGWSbMaMZ6hpJMWMq2b;e__y(|L2l%bG9ic{k^N{DI=jQunZx-ZDuaVJ_&sh;W zQII9JeGUWXki$>ChOS?Po}DQ=Y*0Kq1O0FqzX{l)<4y7dvwY5r2V0gs^UsRd8TJAj z`aUAcitO!C@%VvTOfZXiT|6=0C?@_lMPMAmZixr$5EWHXPWQM7TXgIWb&wakb4SE} zkr!_wV~?I0&xqIqW=|f>`=JONnf}g-=&$AQ$YHt;u*VJ~FSDC-7_+xrpNPjFd-UY` zTe(ojyok54Ay;+)%yL~4-=6ETFz|OS_Z9JA-RdBOKMgIXES&*>+ diff --git a/app/src/main/java/com/hmwl/face_sdk/InitArg.java b/app/src/main/java/com/hmwl/face_sdk/InitArg.java index ac6f41d..634c0b1 100644 --- a/app/src/main/java/com/hmwl/face_sdk/InitArg.java +++ b/app/src/main/java/com/hmwl/face_sdk/InitArg.java @@ -8,7 +8,8 @@ public class InitArg { public float g; public float b; public float radius; - + public float offset_x; + public float offset_y; public String toJson() { try { JSONObject jsonObject = new JSONObject(); @@ -18,6 +19,8 @@ public class InitArg { jsonObject.put("g", g); jsonObject.put("b", b); jsonObject.put("radius", radius); + jsonObject.put("offset_x", offset_x); + jsonObject.put("offset_y", offset_y); return jsonObject.toString(); } catch (Exception e) { e.printStackTrace(); diff --git a/example/src/main/java/com/inewme/uvmirror/MakeupActivity.kt b/example/src/main/java/com/inewme/uvmirror/MakeupActivity.kt index 87217eb..b94d2c9 100644 --- a/example/src/main/java/com/inewme/uvmirror/MakeupActivity.kt +++ b/example/src/main/java/com/inewme/uvmirror/MakeupActivity.kt @@ -19,7 +19,7 @@ class MakeupActivity : FaceActivity() lateinit var motionMgr: MotionManager private var updateJob: Job? = null override fun onCreate(savedInstanceState: Bundle?) { - motionMgr = MotionManager(this, 10, 1.5f, 0f,0f,1f,240f) + motionMgr = MotionManager(this, 10, 1.5f, 0f,0f,1f,240f, 200f, -200f) super.onCreate(savedInstanceState) // 启动一个生命周期感知的协程, 每10ms 调用一次,可以通过update 来处理业务的逻辑 updateJob = lifecycleScope.launch { diff --git a/example/src/main/java/com/inewme/uvmirror/MotionManager.kt b/example/src/main/java/com/inewme/uvmirror/MotionManager.kt index 56a68c4..3036b60 100644 --- a/example/src/main/java/com/inewme/uvmirror/MotionManager.kt +++ b/example/src/main/java/com/inewme/uvmirror/MotionManager.kt @@ -16,7 +16,7 @@ import java.io.InputStreamReader class MotionManager { var faceActivity:FaceActivity - constructor(activity: FaceActivity, fps: Int, z: Float, r: Float, g: Float, b: Float, radius: Float) { + constructor(activity: FaceActivity, fps: Int, z: Float, r: Float, g: Float, b: Float, radius: Float, offset_x:Float, offset_y: Float) { faceActivity = activity val initArg = InitArg().apply { action_fps = fps @@ -25,6 +25,8 @@ class MotionManager { this.g = g this.b = b this.radius = radius + this.offset_x = offset_x; + this.offset_y = offset_y; } activity.SetInitArg(initArg.toJson()) existMotions = readMotionsFromAssets(activity, "pic/motion_data_ex.json") diff --git a/vulkan/FaceApp.cpp b/vulkan/FaceApp.cpp index dbf54e3..0f58589 100644 --- a/vulkan/FaceApp.cpp +++ b/vulkan/FaceApp.cpp @@ -1377,6 +1377,8 @@ void FaceApp::SetInitArg(const char* arg) pushConstants.g = _initArg.g; pushConstants.b = _initArg.b; pushConstants.radius = _initArg.radius; + pushConstants.offset_x = _initArg.offset_x; + pushConstants.offset_y = _initArg.offset_y; } void FaceApp::drawFrame(long long frameTime) diff --git a/vulkan/FaceApp.h b/vulkan/FaceApp.h index da49e53..266b8cd 100644 --- a/vulkan/FaceApp.h +++ b/vulkan/FaceApp.h @@ -42,8 +42,10 @@ struct InitArg float g; float b; float radius; + float offset_x; + float offset_y; //Motion motion; - NLOHMANN_DEFINE_TYPE_INTRUSIVE(InitArg, action_fps, zoom, r, g, b, radius); + NLOHMANN_DEFINE_TYPE_INTRUSIVE(InitArg, action_fps, zoom, r, g, b, radius, offset_x, offset_y); }; @@ -55,6 +57,8 @@ struct PushConstants { float radius = 240; float ux = 0; float uy = 0; + float offset_x = 0; + float offset_y = 0; }; using Callback = std::function; diff --git a/vulkan/main.cpp b/vulkan/main.cpp index 602e03b..c9a0400 100644 --- a/vulkan/main.cpp +++ b/vulkan/main.cpp @@ -154,6 +154,8 @@ int main() { init_arg.g = 0; init_arg.b = 0; init_arg.radius = 240; + init_arg.offset_x = 100; + init_arg.offset_y = -100; string json_str = json(init_arg).dump();