Ich generiere eine Höhenkarte für jedes Quad in meinem Quadtree in openCL. Ich habe das Bild folgendermaßen erstellt:
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);
Dies funktioniert in Ordnung, aber das Hauptproblem ist, dass das 8-Bit-Format des gepufferten Bildes, wenn die Quads immer kleiner werden, unerträgliche "Schritt" -Probleme verursacht, wie unten dargestellt:
Ich habe mich gefragt, ob es einen alternativen Weg gibt, dies zu tun.
Danke für die Zeit.
Antworten:
Verwenden Sie beim Lesen der Höhenkarte eine Texturfilterung? Ich würde erwarten, dass ein bilinearer Filter die Dinge ein wenig glätten würde.
Wenn Sie immer noch eine bessere Genauigkeit benötigen, ändern Sie das Bildformat in CL_UNORM_INT16 oder CL_FLOAT - siehe http://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/cl_image_format.html
Ich bin mir nicht ganz sicher, wie Sie das mit Java machen.
quelle
cl_image_format
hat einimage_channel_data_type
Mitglied, das verwendet werden kann, um das Datenformat anzugeben (z. B.CL_FLOAT
usw.)