Hallo
Ich brüte hier schon seit längerem an einem Java3D-Problem.
Meine Abschlussarbeit beschäftigt sich mit der 3D-Visualisierung und Manipulation von medizinischen Schichtbildern.
Ich möchte daher so einen Stapel von Schichtbildern mit Hilfe einer 3D-Texture dreidimensional darstellen.
Ich habe leider im Internet keine wirklich guten Quellen gefunden, die erklären, wie man 3D-Texturen erstellt und damit umgeht, daher werde ich im folgenden mein Problem grob umreissen, damit ihr mir eventuell ein paar gute Quellen empfehlen, oder vielleicht sogar selbst einige Tips geben könnt.
Ich habe bereits ein Array von n^2 BufferedImages im ARGB-Format, welche die Schichtenbilder enthalten (Höhe und Breite ebenfalls eine 2er Potenz). Ausserdem habe ich bereits einen Quader mit einem IndexedQuadArray erzeugt, wobei jede Kante einer Kante meines volumetrischen Bildes (das BufferedImage-Array) entspricht:
Point3f[] vertices = {
Point3f[] tex_coos = {
int[] indices=
IndexedQuadArray array =
new IndexedQuadArray(vertices.length,
array.setCoordinates(0, vertices);
array.setCoordinateIndices(0, indices);
array.setTextureCoordinates(0, tex_coos);
array.setTextureCoordinateIndices(0, indices);
Shape3D shape = new Shape3D(array);
Appearance app = new Appearance();
app.setTexture(...);
shape.setAppearance(app);
Okay.... soweit so gut, jetzt brauch ich aber die Methode:
Hab da schon ewig mit der Implementierung dieser Methode rumprobiert, aber ohne irgend welchen Erfolg. Hier ist die erste naive Implementierung von mir, die aber leider keine Resultate liefert:
public Texture3D createTexture3D(BufferedImage[] original){
Ich hoffe, dass einer von Euch in irgend einer Form mit 3D-Texturen hat (oder weiss wo genaueres steht ;-) ), denn irgendwie hab ich das Gefühl, dass ich mich da auf einem total falschem Weg befinde.
Ich brüte hier schon seit längerem an einem Java3D-Problem.
Meine Abschlussarbeit beschäftigt sich mit der 3D-Visualisierung und Manipulation von medizinischen Schichtbildern.
Ich möchte daher so einen Stapel von Schichtbildern mit Hilfe einer 3D-Texture dreidimensional darstellen.
Ich habe leider im Internet keine wirklich guten Quellen gefunden, die erklären, wie man 3D-Texturen erstellt und damit umgeht, daher werde ich im folgenden mein Problem grob umreissen, damit ihr mir eventuell ein paar gute Quellen empfehlen, oder vielleicht sogar selbst einige Tips geben könnt.
Ich habe bereits ein Array von n^2 BufferedImages im ARGB-Format, welche die Schichtenbilder enthalten (Höhe und Breite ebenfalls eine 2er Potenz). Ausserdem habe ich bereits einen Quader mit einem IndexedQuadArray erzeugt, wobei jede Kante einer Kante meines volumetrischen Bildes (das BufferedImage-Array) entspricht:
Point3f[] vertices = {
new Point3f(-0.5f,-0.5f,0.5f),
new Point3f(0.5f,-0.5f,0.5f),
new Point3f(0.5f,-0.5f,-0.5f),
new Point3f(-0.5f,-0.5f,-0.5f),
new Point3f(-0.5f,0.5f,0.5f),
new Point3f(0.5f,0.5f,0.5f),
new Point3f(0.5f,0.5f,-0.5f),
new Point3f(-0.5f,0.5f,-0.5f)
};new Point3f(0.5f,-0.5f,0.5f),
new Point3f(0.5f,-0.5f,-0.5f),
new Point3f(-0.5f,-0.5f,-0.5f),
new Point3f(-0.5f,0.5f,0.5f),
new Point3f(0.5f,0.5f,0.5f),
new Point3f(0.5f,0.5f,-0.5f),
new Point3f(-0.5f,0.5f,-0.5f)
Point3f[] tex_coos = {
new Point3f(0,0,0),
new Point3f(1.0f,0,0),
new Point3f(1.0f,0,1.0f),
new Point3f(0,0,1.0f),
new Point3f(0,1,0),
new Point3f(1.0f,1,0),
new Point3f(1.0f,1,1.0f),
new Point3f(0,1,1.0f),
};new Point3f(1.0f,0,0),
new Point3f(1.0f,0,1.0f),
new Point3f(0,0,1.0f),
new Point3f(0,1,0),
new Point3f(1.0f,1,0),
new Point3f(1.0f,1,1.0f),
new Point3f(0,1,1.0f),
int[] indices=
{3,2,1,0,4,5,6,7,1,2,6,5,0,1,5,4,3,0,4,7,2,3,7,6};
IndexedQuadArray array =
new IndexedQuadArray(vertices.length,
IndexedQuadArray.COORDINATES|IndexedQuadArray.TEXTURE_COORDINATE_3,
indices.length);
indices.length);
array.setCoordinates(0, vertices);
array.setCoordinateIndices(0, indices);
array.setTextureCoordinates(0, tex_coos);
array.setTextureCoordinateIndices(0, indices);
Shape3D shape = new Shape3D(array);
Appearance app = new Appearance();
app.setTexture(...);
shape.setAppearance(app);
Okay.... soweit so gut, jetzt brauch ich aber die Methode:
Texture3D create3DTexture(BufferedImage[] images)
Hab da schon ewig mit der Implementierung dieser Methode rumprobiert, aber ohne irgend welchen Erfolg. Hier ist die erste naive Implementierung von mir, die aber leider keine Resultate liefert:
public Texture3D createTexture3D(BufferedImage[] original){
ImageComponent3D component = new ImageComponent3D(ImageComponent.FORMAT_RGBA,
texture.setEnable(true);
texture.setMinFilter(Texture.BASE_LEVEL_LINEAR);
texture.setMagFilter(Texture.BASE_LEVEL_LINEAR);
texture.setBoundaryModeS(Texture.CLAMP);
texture.setBoundaryModeT(Texture.CLAMP);
texture.setBoundaryModeR(Texture.CLAMP);
return texture
}original, true, false);
texture = new Texture3D(Texture.BASE_LEVEL, Texture.RGBA,original[0].getWidth(), original[0].getHeight(),original.length);
texture.setImage(0, component);texture.setEnable(true);
texture.setMinFilter(Texture.BASE_LEVEL_LINEAR);
texture.setMagFilter(Texture.BASE_LEVEL_LINEAR);
texture.setBoundaryModeS(Texture.CLAMP);
texture.setBoundaryModeT(Texture.CLAMP);
texture.setBoundaryModeR(Texture.CLAMP);
return texture
Ich hoffe, dass einer von Euch in irgend einer Form mit 3D-Texturen hat (oder weiss wo genaueres steht ;-) ), denn irgendwie hab ich das Gefühl, dass ich mich da auf einem total falschem Weg befinde.
Zuletzt bearbeitet: