繁体   English   中英

"金属核心图像内核采样"

[英]Metal Core Image Kernel Sampling

我编写了以下测试内核来了解 Metal Core Image Shaders 中的采样。 我想要实现的是以下。 inputImage 边界(范围)之外的任何像素都应该是黑色的,其他像素应该像往常一样是 inputImage 的像素。 但是我没有看到所需的输出,所以我对采样器在着色器中的工作方式的理解有问题。 获取inputImage的世界坐标没有简单的方法,只有destination支持世界坐标。 这是我的代码。

extern "C" float4 testKernel(coreimage::sampler inputImage, coreimage::destination dest)
 {
  float2 inputCoordinate = inputImage.coord();
  float4 color = inputImage.sample(inputCoordinate);
  float2 inputOrigin = inputImage.origin();
  float2 inputSize = inputImage.size();
  float2 destCoord = dest.coord();

   if (inputCoordinate.x * inputSize.x < destCoord.x || inputCoordinate.y * inputSize.y > destCoord.y) {
       return float4(0.0, 0.0, 0.0, 1.0);
   }


   return color;
}

我认为问题在于与dest.coord()<\/code>的比较,因为这也会根据当前正在处理的像素而变化。

如果您只想检查当前是否在inputImage<\/code>范围之外进行采样,您可以简单地执行以下操作:

if (inputCoordinate.x < 0.0 || inputCoordinate.x > 1.0 ||
    inputCoordinate.y < 0.0 || inputCoordinate.y > 1.0) {
    return float4(0.0, 0.0, 0.0, 1.0);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM