Shape Geometry, wird nicht angezeigt

Hallo nochmal :)

Ich habe nun folgendes Problem beim auslesen der Geometry aus der Datenbank:

Die Geometry Attribute speichere ich als Text in der Datenbank, da es sich um ein TriangleStripArray handelt welches beliebig lang sein kann.

der String der Geomtry entspricht genau dem gleichen String wie beim Auslesen vor dem Speichern in der Datenbank. Den Text der aus der Datenbank geholt wird speichere ich so in der Shape:

Java:
		if (shapeBean.getGeometryType().equals("TriangleStripArray")) {
			GeometryBean geometryBean = ModelRetrieveDAO.getGeometry(shapeBean.getShapeID());
			String coordinates = geometryBean.getCoordinates();
			System.out.println("gelesen: " + coordinates);
			double[] coordinatesArray = getCoordinates(coordinates);
			int vertexCount = coordinatesArray.length;
			
			TriangleStripArray quadArray = null;
			if (vertexCount > 2) {
				quadArray = new TriangleStripArray(vertexCount, TriangleStripArray.COORDINATES, new int[] { vertexCount });
				for (int i = 0; i < vertexCount; i++) {
					quadArray.setCoordinate(i, coordinatesArray);
				}
			}
			if (quadArray != null) {
				shape.setGeometry(quadArray);

//das benutze ich um die Geometry zu vergleichen, bzw diese Methode dient zum auslesen der Geometry beim Parsen des universums um die Geometry in die Datanbank speichern zu können
				Geometry geometry = (Geometry) shape.getAllGeometries().nextElement();
				GeometryArray geometryArray = (GeometryArray) geometry;
				StringBuilder geometryStringBuilder = new StringBuilder();
				int arrayLength = geometryArray.getValidVertexCount();
				double[] coordinatesArray2 = new double[arrayLength];

				for (int i = 0; i < arrayLength; i++) {
					geometryArray.getCoordinate(i, coordinatesArray2);
					double coordinateDouble = coordinatesArray2[i];
					String coordinateString = Double.toString(coordinateDouble);
					geometryStringBuilder.append(coordinateString + " ");
				}

				String geometryCoordinates = geometryStringBuilder.toString();
				System.out.println("eingegeben: " + geometryCoordinates);	
			}

Wenn ich nun die Shapes in einen SceneGraph stecke wird absolut nichts angezeigt...

Danke für eure Tipps!
 

Marco13

Top Contributor
Zu wenig code, zu wenig Deug-Ausgaben. Wenn du GENAU an der gleichen Stelle einen ColorCube oder s anhängst, siehst du den dann? Gibt's ein KSKB und ggf. Eingabedaten?
 
Hallo,

Ja, wenn ich einen colorcube mit reinhänge ist dieser zu sehen.
Ich speichere die geometry in einer Datenbank. Nach dem lesen aus der DB und dem erzeugen des triangleStripArray steht in der shape die gleiche geometry wie beim Auslesen vor dem Speichern (also beim initialen Lesen vor der Transferierung in die DB)

Generell ist die Frage ob ich jeden Punkt einzeln in der DB speichern müsste, was bei meinen Modellen sehr schlecht wäre (Dauer: > 10 Minuten)

Ich verstehe nur nicht warum die shape nicht angezeigt wird wenn doch die gleiche Geo Information vorhanden ist wie beim Lesen ohne Datenbank.

Ich habe die shapes auch schon durch harte Codierung rot gefärbt, es liegt also auch nicht an fehlenden Texturen.

Danke für deine Antwort!
 

Marco13

Top Contributor
Viel mehr als dass du irgendwas in eine Datenbank schreibst und liest und dass etwas nicht angezeigt wird, ist bisher nicht klar geworden. Ich kann dir da nicht helfen. (Wenn du den Fehler gefunden hast, schau' dir diesen Thread nochmal an....)
 
So, vielleicht nochmal etwas mehr Informationen, im Parser iteriere ich über den SceneGraph, sobald eine Shape gefunden wurde:


Java:
Geometry geometry = (Geometry) shape.getAllGeometries().nextElement();
				GeometryArray geometryArray = (GeometryArray) geometry;
		StringBuilder geometryStringBuilder = new StringBuilder();
		int arrayLength = geometryArray .getValidVertexCount();
		double[] coordinatesArray = new double[arrayLength];

		for (int i = 0; i < arrayLength; i++) {
			geometryArray .getCoordinate(i, coordinatesArray);
			double coordinateDouble = coordinatesArray[i];
			String coordinateString = Double.toString(coordinateDouble);
			geometryStringBuilder.append(coordinateString + " ");
		}

		String geometryCoordinates = geometryStringBuilder.toString(); //(**)

Dieser (**) String wird dann in der Datenbank gespeichert, er hat zB die Form:

Code:
-70.76227569580078 59.15898132324219 487.2047119140625 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

Diese String hole ich dann aus der Datenbank wenn nötig und erstelle das TriangleStripArray wie oben beschrieben. Lese ich nach dem erstellen die Shape testweise gleich wieder aus, steht eben genau dieser String wieder in der Geometry.
 
Zuletzt bearbeitet:
ich habe nun die Taktik geändert und das TriangleStripArray direkt ausgelesen. (Ein String für Normals und ein String für Points)

Java:
		GeometryBean geometryBean = new GeometryBean();
		StringBuilder pointStringBuilder = new StringBuilder();
		StringBuilder vectorStringBuilder = new StringBuilder();
		StringBuilder stripStringBuilder = new StringBuilder();
		StringBuilder textureStringBuilder = new StringBuilder();
		
		if (geometryToSplit instanceof TriangleStripArray) {

			TriangleStripArray triangleStripArray = (TriangleStripArray) geometryToSplit;
			int vertexCount = triangleStripArray.getValidVertexCount();
				
			int[] texCoordSet = new int[triangleStripArray.getTexCoordSetMapLength()]; 
			triangleStripArray.getTexCoordSetMap(texCoordSet);
			
			for (int i = 0; i < texCoordSet.length; i++) {
				System.out.println(texCoordSet[i]);
			}
			
			Point3f point = new Point3f();

			for (int i = 0; i < vertexCount; i++) {
				triangleStripArray.getCoordinate(i, point);
				float[] pointValues = new float[3];
				point.get(pointValues);
				pointStringBuilder.append(replace(point.toString() + " "));
			}
			
			Vector3f vector = new Vector3f();

			for (int i = 0; i < vertexCount; i++) {
				triangleStripArray.getNormal(i, vector);
				float[] normalValues = new float[3];
				vector.get(normalValues);
				vectorStringBuilder.append(replace(vector.toString() + " "));
			}
			
			int stripCount = triangleStripArray.getNumStrips();
			int[] stripVertexCounts = new int[stripCount];

			for (int i = 0; i < stripCount; i++) {
				triangleStripArray.getStripVertexCounts(stripVertexCounts);
			}

			for (int i = 0; i < stripVertexCounts.length; i++) {
				stripStringBuilder.append(stripVertexCounts[i] + " ");
			}
			
			String points = pointStringBuilder.toString();
			String normals = vectorStringBuilder.toString();
			String strips = stripStringBuilder.toString();
			String textures = textureStringBuilder.toString();
			
			System.out.println("tex " + textures);
			
			geometryBean.setPoints(points);
			geometryBean.setNormals(normals);

Beim wieder zusammensetzen mache ich das ganze so:

Java:
		Shape3D shape = new Shape3D();
		GeometryBean geometryBean = ModelRetrieveDAO.getGeometry(shapeBean.getShapeID());

		String points = geometryBean.getPoints();
		String normals = geometryBean.getNormals();
		String strips = geometryBean.getStrips();
		String[] pointsArray = null;

		if (points != null) {

                        // String auf richtiges Format bringen
			pointsArray = getStringArray(points);

			String[] normalsArray = getStringArray(normals);
			int[] stripsArray = intArray(strips);
			List<Point3f> pointList = new ArrayList<Point3f>();
			List<Vector3f> normalList = new ArrayList<Vector3f>();

			for (int i = 0; i < pointsArray.length; i++) {
				pointsArray[i] = replace(pointsArray[i]);
				String[] token = pointsArray[i].split(":");
				for (int j = 0; j < token.length; j++) {
					float[] pointValues = new float[3];
					pointValues[j] = Float.valueOf(token[j]);
					Point3f point = new Point3f(pointValues);
					pointList.add(point);
				}
			}

			for (int i = 0; i < normalsArray.length; i++) {
				normalsArray[i] = replace(normalsArray[i]);
				String[] token = pointsArray[i].split(":");
				for (int j = 0; j < token.length; j++) {
					float[] normalValues = new float[3];
					normalValues[j] = Float.valueOf(token[j]);
					Vector3f point = new Vector3f(normalValues);
					normalList.add(point);
				}
			}

			Point3f[] pointArray = new Point3f[pointList.size()];
			for (int i = 0; i < pointList.size(); i++) {
				pointArray[i] = pointList.get(i);
			}

			Vector3f[] normalArray = new Vector3f[normalList.size()];
			for (int i = 0; i < normalList.size(); i++) {
				normalArray[i] = normalList.get(i);
			}

			TriangleStripArray triangleStripArray = new TriangleStripArray(pointList.size(), TriangleStripArray.COORDINATES | TriangleStripArray.NORMALS, stripsArray);
			triangleStripArray.setCoordinates(0, pointArray);
			triangleStripArray.setNormals(0, normalArray);
			shape.setGeometry(triangleStripArray);

Hierbei wird mir jetzt allerdings JEDES Model angezeigt wie auf dem folgenden Screenshot:

1.jpg


und hier so wie es sein sollte (Texturen sind ja einstweilen egal)

2.jpg


Ich habe keine Ahnung warum das so ist... ;(
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Ohne ein compilierbares Beispiel mit Testdaten wird da kaum einer was dazu sagen können. Selbst MIT könnte der Aufwand noch so hoch sein, dass keiner sich das antut (das Forum ist kein Remote-Debugger). Aber vielleicht ist ja jemandem sehr, sehr langweilig.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
& Transparentes Shape mit Schatten Spiele- und Multimedia-Programmierung 3
J Shape im Branchgraph einbinden ... Spiele- und Multimedia-Programmierung 2
X Geometry Wars Clone Problem Spiele- und Multimedia-Programmierung 4
J Frage zu Geometry und Shape3D Spiele- und Multimedia-Programmierung 4
TobiasN Wer Wird Millionär Spiele- und Multimedia-Programmierung 4
B Bild wird nicht geladen Spiele- und Multimedia-Programmierung 4
R JPanel wird erst im Fullscreen angezeigt Spiele- und Multimedia-Programmierung 1
K Das Leerzeichen der Tastatur wird nicht gleichgesetzt mit dem Leerzeichen aus der Text Datei Spiele- und Multimedia-Programmierung 5
B Programmieren wie der Befehl /ban in Minecraft geblockt wird aber nicht /ban mit einem Argument Spiele- und Multimedia-Programmierung 1
J OpenGL Bild wird nicht richtig angezeigt Spiele- und Multimedia-Programmierung 2
S GetBufferStrategy-Methode wird nicht angezeigt Spiele- und Multimedia-Programmierung 6
G Wer wird Millionär / Fragefenster Spiele- und Multimedia-Programmierung 6
L Transparenz wird magenta Spiele- und Multimedia-Programmierung 3
Polarfuchs Status von Midi Datei(wird gerade abgespielt oder nicht) Spiele- und Multimedia-Programmierung 0
A Bild(sequenz) wird nicht geladen Spiele- und Multimedia-Programmierung 1
F 4 Gewinnt - Code wird ignoriert Spiele- und Multimedia-Programmierung 7
C Mein Programm wird sofort terminated Spiele- und Multimedia-Programmierung 8
A [LWJGL] BMP Textur wird nicht richtig dargestellt Spiele- und Multimedia-Programmierung 8
S LWJGL Rechteck wird nicht gezeichnet Spiele- und Multimedia-Programmierung 6
J Versch. Pfeiltasten angezeigt obwohl nur 1 gedrückt wird Spiele- und Multimedia-Programmierung 2
Creylon [LWJGL] Textur wird falsch angezeigt Spiele- und Multimedia-Programmierung 12
S Nur den Bereich des JPanels zeichen der im Viewport des JScrollPane angezeigt wird Spiele- und Multimedia-Programmierung 8
Q BufferedImage vs. Heap Space ‒ Warum wird der Speicher nicht freigegeben? Spiele- und Multimedia-Programmierung 6
M Karte wird falsch gezeichnet Spiele- und Multimedia-Programmierung 9
H Skalierung eines Polygons ohne das es verschoben wird Spiele- und Multimedia-Programmierung 3
C Alles hängt, wenn ein Sound abgespielt wird Spiele- und Multimedia-Programmierung 9
K Transformation wird nicht angewendet Spiele- und Multimedia-Programmierung 3
A Wie wird die Person im Game animiert, dass sie ihre Körperteile bewegen? Spiele- und Multimedia-Programmierung 3
L Progress Bar wird erst zu spät ganz angezeigt Spiele- und Multimedia-Programmierung 5
D Jogl:Textur auf GLUquadric wird vertikal spiegelverkehrt dargestellt Spiele- und Multimedia-Programmierung 2
M Java Textadventure HashMap wird nicht befüllt? Spiele- und Multimedia-Programmierung 7
P [JMF] Webcam wird nicht gefunden Spiele- und Multimedia-Programmierung 3
P Erkennen auf welche Objekte gezeigt wird in JoGL Spiele- und Multimedia-Programmierung 6
Steev KeyPressed:Tab wird nicht mehr weitergeleitet Spiele- und Multimedia-Programmierung 2
J JOGL - Bild wird immer wieder weiß Spiele- und Multimedia-Programmierung 2
0x7F800000 weiß einer wozu ANTLR beim build von JOGL verwendet wird? Spiele- und Multimedia-Programmierung 3
J MenuBar wird bei Spiel nicht angezeigt Spiele- und Multimedia-Programmierung 5
L Frame wird geöffnet es wird aber nix angezeigt Spiele- und Multimedia-Programmierung 2
R Die korrekte Breite/Höhe eines Bildes wird nicht erkannt. Spiele- und Multimedia-Programmierung 2
P JOGL: mit glTranslated wird nichts gezeichnet Spiele- und Multimedia-Programmierung 3
F Szene wird nicht komplett angezeigt (Tiefenproblem?) Spiele- und Multimedia-Programmierung 2
G Fragespiel, Hilfe ! like Wer wird Millinär Spiele- und Multimedia-Programmierung 12
M 1. Menüleiste wird doppelt gezeichnet 2. awt auf ein jpanel Spiele- und Multimedia-Programmierung 4
F WakeupOnAWTEvent wird ignoriert! Spiele- und Multimedia-Programmierung 2
C BackgroundSound wird nicht abgespielt Spiele- und Multimedia-Programmierung 3

Ähnliche Java Themen


Oben