Я генерирую карту высот для каждого квада в своем квадродереве в openCL. То, как я создавал изображение, выглядит следующим образом:
DataBufferInt dataBuffer =
(DataBufferInt)img.getRaster().getDataBuffer();
int data[] = dataBuffer.getData();
//img is a bufferedimage
inputImageMem = CL.clCreateImage2D(
context, CL_MEM_READ_WRITE | CL_MEM_USE_HOST_PTR,
new cl_image_format[]{imageFormat}, size, size,
size * Sizeof.cl_uint, Pointer.to(data), null);
Это работает нормально, но основная проблема заключается в том, что по мере того, как четырехугольники становятся все меньше и меньше, 8-битный формат буферизованного изображения начинает вызывать недопустимые проблемы с «переходом», как показано ниже:
Мне было интересно, есть ли альтернативный способ сделать это?
Спасибо за время.
Ответы:
Используете ли вы фильтрацию текстур при чтении карты высот? Я ожидаю, что билинейный фильтр немного сгладит.
Если вам все еще нужна более высокая точность, измените формат изображения на что-то вроде CL_UNORM_INT16 или CL_FLOAT - см. Http://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/cl_image_format.html.
Я не совсем уверен, как вы делаете это с Java, хотя.
источник
cl_image_format
имеетimage_channel_data_type
член, который может использоваться для указания формата данных (например,CL_FLOAT
и т. д.)