PDA

View Full Version : ESPORTARE UNA TEXTURE


TheDoctor1984
20-10-2011, 15:35
Salve a tutti, sto richiedendo il vostro aiuto perchè ho un problema alquanto importante!!

Ho realizzato attraverso la classe shapedTexture3D di Java3D il rendering con una texture realizzata leggendo uno stack di 128 immagini e creando poi la geometria per visualizzarlo all'interno di un Canvas.

Il mio problema è quello di esportare la texture planare dal modello ottenuto poichè NON ho la texture da applicare al modello cubico (che va fatta molto semplicemente con i metodi di set descritti ampiamente da tutte le parti quando si parla di java3D) ma ho la necessità di effettuare proprio il procedimento inverso.

Il mio dubbio è: esiste una funziona che già fa questo?? E' possibile mai che non è stata implementata alcuna funzione del tipo tra le librerie di Java?

Spero che qualcuno mi sappia dire qualcosa in merito.

Grazie mille.

Freaxxx
20-10-2011, 15:50
procedimento inverso in che senso?

le texture sono sempre 2D, il modello di mappatura è una interpretazione di come ogni pixel dell'immagine 2D debba essere posizionato sul modello 3D, non c'è molto altro da dire.

TheDoctor1984
20-10-2011, 16:09
Premetto che sto manipolando da poco l'ambiente 3D e tutto da autodidatta..quindi mi scuso se scrivo corbellerie...:D

Il discorso è che ho un volume come quello che troverai in allegato e dovrei estrarre la tessitura planare come se fosse un planisfero. Ovviamente so che si tratta sempre di immagini 2D ma dovrei estrarre proprio questa immagine che è stata applicata con il metodo clamp() come ti riporto sotto..

Spero mi sappia chiarire questi dubbi che ho..
e grazie intanto per l'interessamento!

private void clamp()
{
ImageComponent3D pArray = new ImageComponent3D(2, xDim, yDim, zDim);

ColorSpace colorSpace = ColorSpace.getInstance(1000);

ComponentColorModel colorModel = new ComponentColorModel(colorSpace, true, false, 3, 0);
WritableRaster raster = colorModel.createCompatibleWritableRaster(xDim, yDim);
BufferedImage bImage = new BufferedImage(colorModel, raster, false, null);
byte byteData[] = ((DataBufferByte)raster.getDataBuffer()).getData();
Vector4f color4f = new Vector4f(color.x, color.y, color.z, 1.0F);
for(int z = 0; z < zDim; z++)
{
int index = 0;
for(int y = 0; y < yDim; y++)
{
for(int x = 0; x < xDim; x++)
{
double data = double3d[x][y][z];
if(data < clampedMin)
{
data = clampedMin;
}
if(data > clampedMax)
{
data = clampedMax;
}
double scale = (data - clampedMin) / (clampedMax - clampedMin);
Vector4f v = new Vector4f(color4f);
v.scale((float)scale);
byteData[index++] = (byte)(int)(255F * v.x);
byteData[index++] = (byte)(int)(255F * v.y);
byteData[index++] = (byte)(int)(255F * v.z);
byteData[index++] = (byte)(int)(255F * v.w);
}

}

pArray.set(z, bImage);
}


Texture3D texture3D = new Texture3D(1, 6, xDim, yDim, zDim);
texture3D.setImage(0, pArray);

texture3D.setEnable(true);
texture3D.setMinFilter(3);
texture3D.setMagFilter(3);
texture3D.setBoundaryModeS(2);
texture3D.setBoundaryModeT(2);
texture3D.setBoundaryModeR(2);
getAppearance().setTexture(texture3D);

removeAllGeometries();
generateGeometryX(xDim);
generateGeometryY(yDim);
generateGeometryZ(zDim);
}