diff --git a/app/src/main/assets/bak_demo0.png b/app/src/main/assets/bak_demo0.png new file mode 100644 index 0000000..c306a61 Binary files /dev/null and b/app/src/main/assets/bak_demo0.png differ diff --git a/app/src/main/assets/bak_demo0_ex.png b/app/src/main/assets/bak_demo0_ex.png new file mode 100644 index 0000000..e8e1067 Binary files /dev/null and b/app/src/main/assets/bak_demo0_ex.png differ diff --git a/app/src/main/assets/demo0.png b/app/src/main/assets/demo0.png index c306a61..d2ea20e 100644 Binary files a/app/src/main/assets/demo0.png and b/app/src/main/assets/demo0.png differ diff --git a/app/src/main/assets/demo0_ex.png b/app/src/main/assets/demo0_ex.png index e8e1067..89f9719 100644 Binary files a/app/src/main/assets/demo0_ex.png and b/app/src/main/assets/demo0_ex.png differ diff --git a/app/src/main/assets/shaders/texture.frag b/app/src/main/assets/shaders/texture.frag index 1ae7ff1..e7a447d 100644 --- a/app/src/main/assets/shaders/texture.frag +++ b/app/src/main/assets/shaders/texture.frag @@ -6,27 +6,28 @@ layout (binding = 2) uniform sampler2D samplerColor_ex; layout (location = 0) in vec2 inUV; layout (location = 1) in vec3 inNormal; + layout (location = 0) out vec4 outFragColor; void main() { - vec4 color = texture(samplerColor, inUV); - vec4 color_ex = texture(samplerColor_ex, inUV); + vec4 color = texture(samplerColor, inUV); + vec4 color_ex = texture(samplerColor_ex, inUV); - vec3 N = normalize(inNormal); + vec3 N = normalize(inNormal); // 计算与 (0,0,1) 的点乘 float ndot = dot(N, vec3(0.0, 0.0, -1.0)); - // 保证结果 >= 0 + // 保证结果 >= 0 ndot = max(ndot, 0.0); // 重新映射ndot值,让中间2/3部分进行融合 // 当ndot在[0.166, 0.833]范围内时进行混合,两端保持不变 float blendFactor; - if (ndot < 0.166) { + if (ndot < 0.266) { blendFactor = 0.0; // 完全使用color_ex - } else if (ndot > 0.833) { + } else if (ndot > 0.733) { blendFactor = 1.0; // 完全使用color } else { // 在中间2/3部分进行平滑过渡 @@ -41,5 +42,7 @@ void main() vec4 blendedColor = mix(color_ex, color, blendFactor); - outFragColor = blendedColor; + outFragColor = blendedColor; + +// outFragColor = vec4(1, 0, 0, 1); } \ No newline at end of file diff --git a/app/src/main/assets/shaders/texture.frag.spv b/app/src/main/assets/shaders/texture.frag.spv index 097507d..f93e19b 100644 Binary files a/app/src/main/assets/shaders/texture.frag.spv and b/app/src/main/assets/shaders/texture.frag.spv differ diff --git a/vulkan/Application.cpp b/vulkan/Application.cpp index 1afe375..4749ecf 100644 --- a/vulkan/Application.cpp +++ b/vulkan/Application.cpp @@ -737,10 +737,6 @@ void Application::createTexture(VkDevice device, VkPhysicalDevice physicalDevice void Application::processWithVulkan(uint8_t* data, int width, int height, int rowStride, size_t dataSize, Texture& out_texture, bool srgb) { - if(!isInited()) - { - return; - } std::unique_lock lock(mtx); if (out_texture.image == VK_NULL_HANDLE) { diff --git a/vulkan/FaceApp.cpp b/vulkan/FaceApp.cpp index 5c7dc78..34cd891 100644 --- a/vulkan/FaceApp.cpp +++ b/vulkan/FaceApp.cpp @@ -28,8 +28,11 @@ void ReceiveFacePoint(float* pos, int pointCount, int width, int height) void TextureLoadProcessWithVulkan(uint8_t* data, int width, int height, int rowStride, size_t dataSize) { - Texture& tex_bg = FaceApp::Get()->tex_bg; - FaceApp::Get()->processWithVulkan(data, width, height, rowStride, dataSize, tex_bg, false); + if(FaceApp::Get()->isInited()) + { + Texture& tex_bg = FaceApp::Get()->tex_bg; + FaceApp::Get()->processWithVulkan(data, width, height, rowStride, dataSize, tex_bg, false); + } } bool FaceApp::LoadOBJ(const std::string& filename,