Suche Leute die mir etwas bei VRML oder X3D helfen können
M. Bender
- xml
0 M Bender0 Thomas J.S.0 M Bender
Hallo,
ich hoffe ich finde hier jemanden der mir helfen kann. Ich habe schon Stunden in Tutorial Seiten verbracht, einmal zu VRML und zu X3D, leider habe ich bisher kein Forum gefunden wo ich mein Problem schildern kann. Ihr seid also hier meine letzte Hoffnung. Da X3D in die XML Schieene passt poste ich mal in diesem Bereich.
Also zum Project:
Ich spiele nur ein wenig rum und versuche mich an einer 3D Sternenkarte für ein Spiel.
Ich habe zunächst manuell mit notepad++ rumgespielt um die Grundlagen zu verstehen.
Ich benutze im moment 2 Obejkte:
1. eine sphere mit denen ich sonnensysteme darstellen will
2. ein Linienset mit dem ich die Sterne zu Konstallationen verbinde
Soweit klappte alles gut.
Nun habe ich einen Weg gefunden mit innerhalb eines vorgegebenen Bereiches per Zufallsgenerator x,y,z Koordinaten zu erstellen damit ich mit massenhaft systeme generieren kann. AstroSys generiert mir diese und speichert die in XML ab. Ich lese dann diese XML Datei aus.
<?php
// Datei von AstroSynthesis öffnen
$document = domxml_open_file('michael2.xml');
// Ausgabe der VRML Datei:
print "#VRML V2.0 utf8"."<br>"."<br>";
print "DEF objectA Transform {"."<br>";
print " children ["."<br>";
print " Shape {"."<br>";
print " appearance Appearance {"."<br>";
print " material Material { }"."<br>";
print " }"."<br>";
print " geometry Sphere { radius 0.1 } # Kugel"."<br>";
print " }"."<br>";
print " ]"."<br>";
//print " translation 0.0 0.0 0.0"."<br>";
print "}"."<br>"."<br>";
// koordinaten aus der XML Datei ermitteln
$x_e = $document->get_elements_by_tagname('X');
$y_e = $document->get_elements_by_tagname('Y');
$z_e = $document->get_elements_by_tagname('Z');
// Einzelne Planeten
$i=0; // Zähler resetten
foreach ($x_e as $x) {
print "Transform {"."<br>";
print "translation ";
print $x_e[$i]->get_content()." ";
print $y_e[$i]->get_content()." ";
print $z_e[$i]->get_content()."<br>";
print "children USE objectA"."<br>";
print "} "."<br>"."<br>";
$i++;
}
//Verbindungen
$waypoints = $document->get_elements_by_tagname('Waypoints');
//$test = $document->get_attribute('');
$j=0;
$k=0;
$l=1;
$coords = "";
$index = "";
$color = "";
foreach ($waypoints as $waypoint) {
$wp1 = $waypoints[$j]->first_child();
$x1 = $wp1->get_attribute('X') ;
$y1 = $wp1->get_attribute('Y') ;
$z1 = $wp1->get_attribute('Z') ;
$wp2 = $waypoints[$j]->last_child();
$x2 = $wp2->get_attribute('X') ;
$y2 = $wp2->get_attribute('Y') ;
$z2 = $wp2->get_attribute('Z') ;
$coords .= $x1 ." ". $y1 ." ". $z1 .","."#$k<br>";
$coords .= $x2 ." ". $y2 ." ". $z2 .","."#$l<br>";
$index .= $k .",". $l .",-1,"."<br>";
$k = $k+2;
$l = $l+2;
$color .= "0,";
$j++;
}
//enden abschneiden um das , und das <br> loszuwerden
$coords = substr($coords,0,-4);
$index = substr($index,0,-8);
$color = substr($color,0,-1);
print "Transform {"."<br>";
print " children ["."<br>";
print " Shape {"."<br>";
print " appearance Appearance {"."<br>";
print " material Material { }"."<br>";
print " }"."<br>";
print " geometry IndexedLineSet {"."<br>";
print " coord Coordinate {"."<br>";
print " point ["."<br>";
print " $coords"."<br>";
print " ]"."<br>";
print " }"."<br>";
print " coordIndex ["."<br>";
print " $index"."<br>";
print " ]"."<br>";
print " color Color {"."<br>";
print " color ["."<br>";
print " 0.0 0.0 1.0 "."<br>";
print " ]"."<br>";
print " }"."<br>";
print " colorIndex ["."<br>";
print " $color"."<br>";
print " ]"."<br>";
print " }"."<br>";
print " }"."<br>";
print " ]"."<br>";
print "}"."<br>"."<br>";
?>
Das ganze Generiert also nun eine Datei die im kleinen wie folgt aussieht:
#VRML V2.0 utf8
DEF objectA Transform {
children [
Shape {
appearance Appearance {
material Material {
emissiveColor 1.0 1.0 1.0 # weis, leuchtend
}
}
geometry Sphere {
radius 0.05
}
}
]
translation 0.0 0.0 0.0
}
Transform {
translation -10.832823 -8.223687 18.417574
children USE objectA
}
............
Transform {
children [
Shape {
appearance Appearance {
material Material { }
}
geometry IndexedLineSet {
coord Coordinate {
point [
-19.247534 -2.065323 10.083113, #0
-16.740423 -0.497346 11.393204 #1
]
}
coordIndex [
0, 1
]
color Color {
color [
0.0 0.0 1.0
]
}
colorIndex [
0, 0
]
}
}
]
}
Ich habe nun das ganze nun mit ~700 Sternen und ~1700 Verbindungen generiert.
Hier die Links zu den Tests:
1.) Wenn ich es so mache wie oben beschrieben und "ALLE" Koordinaten und Linien in "EINEN" Linienset packen will dann funktioniert es nicht richtig:
Beispiel VRML: http://clanlod.de/test6.wrl (es werden plötzlich keine Linien angezeigt)
Das gleiche Beispiel im X3D Plugin: http://clanlod.de/test.x3d
Hier nu das verblüffende ~50% der Linien sind blau wie von mir definiert. Die anderen 50% weis bzw. wohl undefiniert. Ich schliese mal ich habe irgendwo einen Fehler oder laufe gegen eine Obergrenze.
2.) Das andere Beispiel ist weniger schön geht aber. Ich habe hier nun jede Verbindung zwischen 2 Sternen in ein "EIGENES" Linienset gepackt. Das bläht die Datei immens auf, dann geht das Beispiel aber komischerweise.
Beispiel VRML: http://clanlod.de/test5.wrl
Ich suche also nach einer Möglichkeit die Platz- und Ressourcensparende Varient zum Laufen zu bekommen finde aber meinen Fehler nicht.
Wenn sich damit wer auskennt bitte ich um ein paar Tipps.
Grüße, Michael
Hi nochmal,
es scheint sich wirklich kaum einer damit zu befassen :-) Das ist auch mein Gefühl wenn ich danach im Internet suche, kaum aktuelle Seiten.
Ihr würdet mir schon helfen wenn ihr eventuell ein aktuelles Forum oder so kennt.
Alles ist willkommen.
Grüße, Michael
Hallo,
ich hoffe ich finde hier jemanden der mir helfen kann. Ich habe schon Stunden in Tutorial Seiten verbracht, einmal zu VRML und zu X3D, leider habe ich bisher kein Forum gefunden wo ich mein Problem schildern kann. Ihr seid also hier meine letzte Hoffnung. Da X3D in die XML Schieene passt poste ich mal in diesem Bereich.
Passt eigentlich nicht wirklich zu XML, weil du an sich keine XML-Frage hast ;-)
Das gleiche Beispiel im X3D Plugin: http://clanlod.de/test.x3d
Ich weiss nicht, womit und was du gemacht hast, aber du solltest diese XML-Datei dringend auf ihre Validität hin überprüfen. (Scene kann keinen "Text"-Inhalt haben).
Ich würde dir empfehlen, die Mailingsliste: http://www.web3d.org/x3d/publiclists/ oder das Board http://www.web3d.org/message_boards/ zu nützen und dort deine Frage(n) stellen.
Grüße
Thomas
Hallo Thomas,
herzlichen Dank, diese Infos bringen mich schonmal weiter nun weis ich wo ich weiterfragen kann.
Bezüglich deiner Frage zu der XML Datei (*.x3d). Ich habe das Tool X3D-Edit genutzt um meine bstehende WRML datei darin zu öffnen und andschliesend als X3D zu speichern.
MAngels Know-How (zumindest noch bisher) habe ich selbst nichts daran gedreht :-).
Ich hoffe bald fitter darin zu werden.
Grüße, Michael