<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Problem beim Arbeiten mit wrl-Datei in c++]]></title><description><![CDATA[<p>Hallo!<br />
Ich habe im Moment ein Problem mit dem Einbinden einer wrl-Datei in Coin3d oder besser gesagt mit deren Ansprache.</p>
<p>Die wrl-Datei wurde aus 3dsmax erzeugt und enthält verschiedene Objekte (z.B. Wasseroberfläche, Himmel, etc.). Das grundlegende Einbinden in die c++-Datei funktioniert bereits. Allerdings würde ich jetzt gerne die Unterelemente der wrl-Datei einzeln ansprechen um diese gesondert voneinander zu animieren. Allerdings fehlt mir dazu momentan jegliche Idee bzw. Lösungsansatz. Gibt es eine Möglichkeit, einen Seperator auf nur einen Teil der wrl-Datei zu setzen?</p>
<p>Hier ein Teil der wrl-Datei:</p>
<pre><code>#VRML V2.0 utf8

# Produced by 3D Studio MAX VRML97 exporter, Version 6, Revision 0,56
# MAX File: hintergrundneu.max, Date: Mon Jun 11 21:50:55 2007

NavigationInfo { headlight FALSE }
DEF wasser01 Transform {
  translation -6.55 0 0
  rotation 0 -1 0 -0.9192
  scale 3.333 3.333 3.333
  children [
    Shape {
      appearance Appearance {
        material Material {
          diffuseColor 1 1 1
        }
        texture ImageTexture {
          url &quot;texturStein.jpg&quot;
        }
        textureTransform TextureTransform {
          center 0.5 0.5
          translation 0.6 0.52
        }
</code></pre>
<p>Und hier die betreffende c++-Datei:</p>
<pre><code class="language-cpp">SoSeparator* ladeGeometrie(const char * dateiname)
{
   // Wurzel fuer den Szenengraph aus der Datei
   SoSeparator *dateiSzene = new SoSeparator;

   // Open Inventor Dateihandler
   SoInput myScene;

   // Oeffnen der Szenen-Datei
   if (!myScene.openFile(dateiname))
   {
      printf(&quot;FEHLER beim laden der Datei %s \n&quot;, dateiname);
      return NULL;
   }

   // Hat die geoeffnete Datei ein gueltiges Open Inventor Format? 
   if (!myScene.isValidFile())
   {
      printf(&quot;Die Datei %s ist keine gueltige Inventor Datei \n&quot;, dateiname);
      return NULL;
   }

   // die gelesene Szene wird gelesen und an den
   // Gruppenknoten 'dateiSzene' angehaengt
   dateiSzene = SoDB::readAll(&amp;myScene);

   if (dateiSzene == NULL)
   {
      printf(&quot;Fehler im lesen der Datei %s\n&quot;, dateiname);
      myScene.closeFile();
      return NULL;
   }

   // schliessen der Datei durch den Dateihandler
   myScene.closeFile();

   return dateiSzene;
}

////////////////////////////////////////////////////////////////
// Haupt-Funktion                                             //
////////////////////////////////////////////////////////////////

int main(int argc, char ** argv)
{
  // Initialisierung der SoWin Bibliothek 
  // Der Rueckgabewert erzeugt ein Win Fenster
  HWND fenster = SoWin::init(&quot;main&quot;);

  // Erstellen eines &quot;scene graphs&quot; 
  SoSeparator *wurzel = new SoSeparator;
  wurzel-&gt;ref();

  //Kamera setzen, um richtige Position in Geospähre zu
  //sehen -&gt; Position ok!
  SoPerspectiveCamera *kamera = new SoPerspectiveCamera;
  kamera-&gt;position.setValue(400, 170, -2000);
  kamera-&gt;orientation.setValue(0, 3, 0, 0.15);
  wurzel-&gt;addChild(kamera);

  //Setzen eines Punktlichtes zur allgemeinen
  //Ausleuchtung der Szene -&gt; Position ok!
  SoPointLight *ausleuchtung = new SoPointLight;
   ausleuchtung-&gt;location.setValue(300, 1800, 2000);
   wurzel-&gt;addChild(ausleuchtung);

  // Setzen eines Lichtes zum belauchten der Szene
  //   -&gt; SpotLight zum Erzeugen von Schatten
  SoSpotLight *schattenLicht = new SoSpotLight;
   schattenLicht-&gt;location.setValue(-200, 100,200);
   schattenLicht-&gt;direction.setValue(-4000,-0.1,1);
   schattenLicht-&gt;cutOffAngle = 1.5;
   schattenLicht-&gt;color.setValue(0.969, 0.467, 0.369);
   wurzel-&gt;addChild(schattenLicht);

  // Gruppenknoten fuer den Hintergrund
  SoSeparator *hintergrund = new SoSeparator;

  // Vergrößern des Hintergrunds 
  SoScale *skalierung = new SoScale;
  skalierung-&gt;scaleFactor.setValue(50,50,50);
  hintergrund-&gt;addChild(skalierung);

  // Lesen der Geometrie von der Datei 
  hintergrund-&gt;addChild(ladeGeometrie(&quot;hintergrundneu.WRL&quot;));

  // Hinzufuegen zum Szenengraphen
  wurzel-&gt;addChild(hintergrund);

  // Erzeugen des Betrachters
  SoWinExaminerViewer *b = new SoWinExaminerViewer(fenster);
   b-&gt;setSceneGraph(wurzel);
   b-&gt;setHeadlight(FALSE);
   b-&gt;show();

  // Start des Fensters 
  SoWin::show(fenster);
  // Loop until exit.
  SoWin::mainLoop();

  // Loeschen des Betrachters 
  // und der Referenz zur Szene
  delete b;
  wurzel-&gt;unref();
</code></pre>
<p>Ich hoffe das war nicht zu unverständlich! Über Ideen/Gedankenansätze würde ich mich sehr freuen!<br />
Gruß<br />
mihomia</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/184216/problem-beim-arbeiten-mit-wrl-datei-in-c</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 15:35:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/184216.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 13 Jun 2007 11:50:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem beim Arbeiten mit wrl-Datei in c++ on Wed, 13 Jun 2007 11:50:01 GMT]]></title><description><![CDATA[<p>Hallo!<br />
Ich habe im Moment ein Problem mit dem Einbinden einer wrl-Datei in Coin3d oder besser gesagt mit deren Ansprache.</p>
<p>Die wrl-Datei wurde aus 3dsmax erzeugt und enthält verschiedene Objekte (z.B. Wasseroberfläche, Himmel, etc.). Das grundlegende Einbinden in die c++-Datei funktioniert bereits. Allerdings würde ich jetzt gerne die Unterelemente der wrl-Datei einzeln ansprechen um diese gesondert voneinander zu animieren. Allerdings fehlt mir dazu momentan jegliche Idee bzw. Lösungsansatz. Gibt es eine Möglichkeit, einen Seperator auf nur einen Teil der wrl-Datei zu setzen?</p>
<p>Hier ein Teil der wrl-Datei:</p>
<pre><code>#VRML V2.0 utf8

# Produced by 3D Studio MAX VRML97 exporter, Version 6, Revision 0,56
# MAX File: hintergrundneu.max, Date: Mon Jun 11 21:50:55 2007

NavigationInfo { headlight FALSE }
DEF wasser01 Transform {
  translation -6.55 0 0
  rotation 0 -1 0 -0.9192
  scale 3.333 3.333 3.333
  children [
    Shape {
      appearance Appearance {
        material Material {
          diffuseColor 1 1 1
        }
        texture ImageTexture {
          url &quot;texturStein.jpg&quot;
        }
        textureTransform TextureTransform {
          center 0.5 0.5
          translation 0.6 0.52
        }
</code></pre>
<p>Und hier die betreffende c++-Datei:</p>
<pre><code class="language-cpp">SoSeparator* ladeGeometrie(const char * dateiname)
{
   // Wurzel fuer den Szenengraph aus der Datei
   SoSeparator *dateiSzene = new SoSeparator;

   // Open Inventor Dateihandler
   SoInput myScene;

   // Oeffnen der Szenen-Datei
   if (!myScene.openFile(dateiname))
   {
      printf(&quot;FEHLER beim laden der Datei %s \n&quot;, dateiname);
      return NULL;
   }

   // Hat die geoeffnete Datei ein gueltiges Open Inventor Format? 
   if (!myScene.isValidFile())
   {
      printf(&quot;Die Datei %s ist keine gueltige Inventor Datei \n&quot;, dateiname);
      return NULL;
   }

   // die gelesene Szene wird gelesen und an den
   // Gruppenknoten 'dateiSzene' angehaengt
   dateiSzene = SoDB::readAll(&amp;myScene);

   if (dateiSzene == NULL)
   {
      printf(&quot;Fehler im lesen der Datei %s\n&quot;, dateiname);
      myScene.closeFile();
      return NULL;
   }

   // schliessen der Datei durch den Dateihandler
   myScene.closeFile();

   return dateiSzene;
}

////////////////////////////////////////////////////////////////
// Haupt-Funktion                                             //
////////////////////////////////////////////////////////////////

int main(int argc, char ** argv)
{
  // Initialisierung der SoWin Bibliothek 
  // Der Rueckgabewert erzeugt ein Win Fenster
  HWND fenster = SoWin::init(&quot;main&quot;);

  // Erstellen eines &quot;scene graphs&quot; 
  SoSeparator *wurzel = new SoSeparator;
  wurzel-&gt;ref();

  //Kamera setzen, um richtige Position in Geospähre zu
  //sehen -&gt; Position ok!
  SoPerspectiveCamera *kamera = new SoPerspectiveCamera;
  kamera-&gt;position.setValue(400, 170, -2000);
  kamera-&gt;orientation.setValue(0, 3, 0, 0.15);
  wurzel-&gt;addChild(kamera);

  //Setzen eines Punktlichtes zur allgemeinen
  //Ausleuchtung der Szene -&gt; Position ok!
  SoPointLight *ausleuchtung = new SoPointLight;
   ausleuchtung-&gt;location.setValue(300, 1800, 2000);
   wurzel-&gt;addChild(ausleuchtung);

  // Setzen eines Lichtes zum belauchten der Szene
  //   -&gt; SpotLight zum Erzeugen von Schatten
  SoSpotLight *schattenLicht = new SoSpotLight;
   schattenLicht-&gt;location.setValue(-200, 100,200);
   schattenLicht-&gt;direction.setValue(-4000,-0.1,1);
   schattenLicht-&gt;cutOffAngle = 1.5;
   schattenLicht-&gt;color.setValue(0.969, 0.467, 0.369);
   wurzel-&gt;addChild(schattenLicht);

  // Gruppenknoten fuer den Hintergrund
  SoSeparator *hintergrund = new SoSeparator;

  // Vergrößern des Hintergrunds 
  SoScale *skalierung = new SoScale;
  skalierung-&gt;scaleFactor.setValue(50,50,50);
  hintergrund-&gt;addChild(skalierung);

  // Lesen der Geometrie von der Datei 
  hintergrund-&gt;addChild(ladeGeometrie(&quot;hintergrundneu.WRL&quot;));

  // Hinzufuegen zum Szenengraphen
  wurzel-&gt;addChild(hintergrund);

  // Erzeugen des Betrachters
  SoWinExaminerViewer *b = new SoWinExaminerViewer(fenster);
   b-&gt;setSceneGraph(wurzel);
   b-&gt;setHeadlight(FALSE);
   b-&gt;show();

  // Start des Fensters 
  SoWin::show(fenster);
  // Loop until exit.
  SoWin::mainLoop();

  // Loeschen des Betrachters 
  // und der Referenz zur Szene
  delete b;
  wurzel-&gt;unref();
</code></pre>
<p>Ich hoffe das war nicht zu unverständlich! Über Ideen/Gedankenansätze würde ich mich sehr freuen!<br />
Gruß<br />
mihomia</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304757</guid><dc:creator><![CDATA[mihomia]]></dc:creator><pubDate>Wed, 13 Jun 2007 11:50:01 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Arbeiten mit wrl-Datei in c++ on Wed, 13 Jun 2007 12:31:06 GMT]]></title><description><![CDATA[<p>Hallo !</p>
<p>könnte mir vorstellen, das es dafür schon fertig programmierte Klassen gibt.<br />
( 3D Studio MAX VRML97 importer )<br />
In diesem Fall würd erstmal nach existierenden Lösungen suchen, es sei denn du willst die nächsten Tage damit verbringen den Aufbau von 3D Studio MAX DEF Dateien zu studieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304794</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304794</guid><dc:creator><![CDATA[proggingmania]]></dc:creator><pubDate>Wed, 13 Jun 2007 12:31:06 GMT</pubDate></item></channel></rss>