gpt4 book ai didi

ios - 苹果又打破纹理投影了吗?

转载 作者:行者123 更新时间:2023-11-29 10:25:14 25 4
gpt4 key购买 nike

在 iOS 8 中,Metal 中的 float 划分存在问题,阻止了正确的纹理投影,which I solved .

今天我发现 iOS 9 上的纹理投影又坏了,虽然我不确定为什么。

在 CPU(使用 OpenCV)和 GPU 上扭曲纹理的结果是不一样的。如果你运行 this example app,你可以在你的 iPhone 上看到(已经包含针对 iOS 8 的修复)来自 iOS 9。

预期 CPU 变形为红色,而 Metal 完成的 GPU 变形为绿色,因此它们重叠的地方为黄色。理想情况下,您不应看到绿色或红色,而只会看到黄色阴影。

你能:

  • 确认您这一端存在问题;
  • 对任何可能出错的地方提出任何建议?

着色器代码是:

struct VertexInOut
{
float4 position [[ position ]];
float3 warpedTexCoords;
float3 originalTexCoords;
};

vertex VertexInOut warpVertex(uint vid [[ vertex_id ]],
device float4 *positions [[ buffer(0) ]],
device float3 *texCoords [[ buffer(1) ]])
{
VertexInOut v;
v.position = positions[vid];

// example homography
simd::float3x3 h = {
{1.03140473, 0.0778113901, 0.000169219566},
{0.0342947133, 1.06025684, 0.000459250761},
{-0.0364957005, -38.3375587, 0.818259298}
};

v.warpedTexCoords = h * texCoords[vid];
v.originalTexCoords = texCoords[vid];

return v;
}

fragment half4 warpFragment(VertexInOut inFrag [[ stage_in ]],
texture2d<half, access::sample> original [[ texture(0) ]],
texture2d<half, access::sample> cpuWarped [[ texture(1) ]])
{
constexpr sampler s(coord::pixel, filter::linear, address::clamp_to_zero);
half4 gpuWarpedPixel = half4(original.sample(s, inFrag.warpedTexCoords.xy * (1.0 / inFrag.warpedTexCoords.z)).r, 0, 0, 255);
half4 cpuWarpedPixel = half4(0, cpuWarped.sample(s, inFrag.originalTexCoords.xy).r, 0, 255);

return (gpuWarpedPixel + cpuWarpedPixel) * 0.5;
}

最佳答案

不要问我为什么,但如果我将扭曲坐标乘以 1.00005 或任何接近 1.0 的数字,它就是固定的(除了非常小的细节)。请参阅示例应用程序存储库中的最后一次提交。

关于ios - 苹果又打破纹理投影了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32750713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com