Я наткнулся на странную проблему в vuforia. Когда я запрашиваю изображение с камеры с помощью CameraDevice.GetCameraImage (mypixelformat), возвращаемое изображение переворачивается боком и поворачивается на 180 градусов. Из-за этого, чтобы получить нормальное изображение, мне нужно сначала повернуть изображение, а затем перевернуть его вбок. Я использую простой итерационный подход по пикселям изображения и их изменение. Этот подход очень плох с точки зрения производительности. код:
Texture2D image;
CameraDevice cameraDevice = Vuforia.CameraDevice.Instance;
Vuforia.Image vufImage = cameraDevice.GetCameraImage(pixelFormat);
image = new Texture2D(vufImage.Width, vufImage.Height);
vufImage.CopyToTexture(image);
Color32[] colors = image.GetPixels32();
System.Array.Reverse(colors, 0, colors.Length); //rotate 180deg
image.SetPixels32(colors); //apply rotation
image = FlipTexture(image); //flip sideways
//***** THE FLIP TEXTURE METHOD *******//
private Texture2D FlipTexture(Texture2D original, bool upSideDown = false)
{
Texture2D flipped = new Texture2D(original.width, original.height);
int width = original.width;
int height = original.height;
for (int col = 0; col < width; col++)
{
for (int row = 0; row < height; row++)
{
if (upSideDown)
{
flipped.SetPixel(row, (width - 1) - col, original.GetPixel(row, col));
}
else
{
flipped.SetPixel((width - 1) - col, row, original.GetPixel(col, row));
}
}
}
flipped.Apply();
return flipped;
}
Чтобы улучшить производительность, я хочу каким-то образом запланировать эти пиксельные операции на графическом процессоре, я слышал, что можно использовать вычислительный шейдер, но я не знаю, с чего начать. Может кто-нибудь, пожалуйста, помогите мне написать те же операции в вычислительном шейдере, чтобы что графический процессор может с ними справиться, спасибо !.