Estou gerando um mapa de altura para cada quad no meu quadtree no openCL. A maneira como eu estava criando a imagem é a seguinte:
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);
Isso funciona bem, mas o principal problema é que, à medida que os quads ficam cada vez menores, o formato de 8 bits da imagem em buffer começa a causar problemas intoleráveis de "etapas", como visto abaixo:
Eu queria saber se havia uma maneira alternativa que eu poderia fazer isso?
Obrigada pelo tempo.
Respostas:
Você está usando filtragem de textura ao ler o mapa de altura? Eu esperaria que um filtro bilinear suavizasse um pouco as coisas.
Se você ainda precisar de mais precisão, altere o formato da imagem para algo como CL_UNORM_INT16 ou CL_FLOAT - consulte http://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/cl_image_format.html
Não tenho muita certeza de como você faz isso do Java.
fonte
cl_image_format
tem umimage_channel_data_type
membro que pode ser usado para especificar o formato de dados (por ex.CL_FLOAT
, etc)