<?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[Eine Positionsabfrage in OGRE]]></title><description><![CDATA[<p>Hallo ihr Lieben!</p>
<p>Ich habe da ein kleines Problem. Ich bin derweil beschäftigt, in einem Spiel-Engine Fässer zu generieren, die jeweils bei Neuladen des Spiels zufällig verteilt werden sollen. Ich muss gestehen, dass ich mich mit dem Random-Mechanismus bisher so gut wie nicht auskannte (wenn da Fehler auffallen, würde ich auch da bitten, mich darauf aufmerksam zu machen :))</p>
<p>Mein Problem ist: die Fässer überlappen sich teilweise, und das sollen sie nicht. Wie sollte so eine Positionsabfrage in meinem bisherigen Code aussehen? Hier mein bisheriger Code:</p>
<pre><code class="language-cpp">srand( GetTickCount());
            float x,z;
            Entity* randomFass;
            SceneNode* randomNode;
            std::stringstream ss;

            for (int i = 0; i&lt;10;i++)
            {
                ss &lt;&lt; i;
                x = rand()%10000/10000.0f*(100+30) - 20;
                z = rand()%10000/10000.0f*(100-10) - 20;

                randomFass = mSceneMgr-&gt;createEntity(String(&quot;Fass&quot;)+ss.str(), &quot;Fass04.mesh&quot;);
                randomFass-&gt;setMaterialName(&quot;Material#14&quot;);
                randomNode = mSceneMgr-&gt;getRootSceneNode()-&gt;createChildSceneNode(String(&quot;FassNode&quot;)+ss.str());

                randomNode-&gt;attachObject(randomFass);
                randomFass-&gt;setMaterialName(&quot;Material#14&quot;);
                randomNode-&gt;setPosition (x,0,z);
            }
</code></pre>
<p>Schon einmal vielen Dank für Tipps und Antworten!</p>
<p>Eure Sill <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/273854/eine-positionsabfrage-in-ogre</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 21:55:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/273854.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 14 Sep 2010 14:12:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Eine Positionsabfrage in OGRE on Tue, 14 Sep 2010 14:12:25 GMT]]></title><description><![CDATA[<p>Hallo ihr Lieben!</p>
<p>Ich habe da ein kleines Problem. Ich bin derweil beschäftigt, in einem Spiel-Engine Fässer zu generieren, die jeweils bei Neuladen des Spiels zufällig verteilt werden sollen. Ich muss gestehen, dass ich mich mit dem Random-Mechanismus bisher so gut wie nicht auskannte (wenn da Fehler auffallen, würde ich auch da bitten, mich darauf aufmerksam zu machen :))</p>
<p>Mein Problem ist: die Fässer überlappen sich teilweise, und das sollen sie nicht. Wie sollte so eine Positionsabfrage in meinem bisherigen Code aussehen? Hier mein bisheriger Code:</p>
<pre><code class="language-cpp">srand( GetTickCount());
            float x,z;
            Entity* randomFass;
            SceneNode* randomNode;
            std::stringstream ss;

            for (int i = 0; i&lt;10;i++)
            {
                ss &lt;&lt; i;
                x = rand()%10000/10000.0f*(100+30) - 20;
                z = rand()%10000/10000.0f*(100-10) - 20;

                randomFass = mSceneMgr-&gt;createEntity(String(&quot;Fass&quot;)+ss.str(), &quot;Fass04.mesh&quot;);
                randomFass-&gt;setMaterialName(&quot;Material#14&quot;);
                randomNode = mSceneMgr-&gt;getRootSceneNode()-&gt;createChildSceneNode(String(&quot;FassNode&quot;)+ss.str());

                randomNode-&gt;attachObject(randomFass);
                randomFass-&gt;setMaterialName(&quot;Material#14&quot;);
                randomNode-&gt;setPosition (x,0,z);
            }
</code></pre>
<p>Schon einmal vielen Dank für Tipps und Antworten!</p>
<p>Eure Sill <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1952508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1952508</guid><dc:creator><![CDATA[Sill]]></dc:creator><pubDate>Tue, 14 Sep 2010 14:12:25 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Positionsabfrage in OGRE on Tue, 14 Sep 2010 14:34:41 GMT]]></title><description><![CDATA[<p>srand() nur einmal aufrufen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<pre><code class="language-cpp">x = rand()%10000/10000.0f*(100+30) - 20; // [0 - 0.9999] * 130 -20 ~~ -20...110
z = rand()%10000/10000.0f*(100-10) - 20; // [0 - 0.9999] * 90  -20 ~~ -20...70
randomNode-&gt;setPosition (x,0,z);
</code></pre>
<p>Deine Fässer haben einen Durchmesser ... den solltest du vielleicht in deinem Placement berücksichtigen.<br />
Sei der Durchmesser 1 dann liegt<br />
Fass 1 mit ( (rand()%10000/10000.0f) == 0.0000) bei (-20.000,0,-20.000)<br />
Fass n mit ( (rand()%10000/10000.0f) == 0.0001) bei (-19.987,0,−19.991)</p>
<p>Voila: Überlappung.</p>
<p>Lösung 1: Raster dein Spielfeld mit der Breite der Fässer und lass nur 1 Fass pro Zelle zu.<br />
Lösung 2: Bemüh OGRE und teste ob die Boundingbox des neuen Fasses irgendeine bereits bestehende Boundingbox in der Scene schneidet, wenn ja mach ein neues Fass auf <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1952516</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1952516</guid><dc:creator><![CDATA[padreigh]]></dc:creator><pubDate>Tue, 14 Sep 2010 14:34:41 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Positionsabfrage in OGRE on Thu, 16 Sep 2010 12:21:06 GMT]]></title><description><![CDATA[<p>Also ich hab jetzt einen neuen Code. Das Überlappungs-Problem ist Geschichte.</p>
<pre><code class="language-cpp">const int cols=3;                                    // Spalten
    const int rows=4;                                    // Reihen
    const float barrel_width = 10;                       // Breite des Fassmodells
    const Ogre::Vector3 start = Ogre::Vector3(0,0,0);    // Position des ersten Fasses

    srand ( time(NULL) );
    int col,row = -1;
    int barrel_num = 1;
    float x,z = -1;
    Ogre::Vector3 barrel_pos = Ogre::Vector3(0,0,0);
    //Ogre::Entity* ent;
    Ogre::SceneNode* node;
    Ogre::String barrel_name;

    for (int i = 0; i &lt;cols*rows; i++)
    {
        // 50% ja/nein Zufall
        if ((rand() % 2)==1)
        {
            barrel_name = &quot;Fass&quot; + Ogre::StringConverter::toString(barrel_num);
            // Reihe+Spalte berechnen
            col = i%cols;
            row = i/cols;

            // x/z Koordinate berechnen
            x = col * barrel_width;
            z = row * barrel_width;

            barrel_pos = Ogre::Vector3(x,0,z) + start;

            // Fass-Entity erstellen
            ent = mSceneMgr-&gt;createEntity(barrel_name, &quot;Fass01.mesh&quot;);
            node = mSceneMgr-&gt;getRootSceneNode()-&gt;createChildSceneNode();
            node-&gt;attachObject(ent);
            //Fass Node positionieren
            node-&gt;setPosition(barrel_pos);
            // zufällige Drehung
            node-&gt;yaw(Ogre::Degree((rand() % 360)));
            barrel_num++;
        };
    }
</code></pre>
<p>Das Dumme ist nur, dass die Fässer ne zufällige Anzahl haben. Ich möchte ihnen aber gerne eine feste geben. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1953350</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1953350</guid><dc:creator><![CDATA[Sill]]></dc:creator><pubDate>Thu, 16 Sep 2010 12:21:06 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Positionsabfrage in OGRE on Thu, 16 Sep 2010 12:36:38 GMT]]></title><description><![CDATA[<p>Du kannst einen Zähler mitlaufen lassen und so eine Maximalanzahl einstellen. Wichtig ist nur, dass diese Maximalanzahl auch mit der Chance zusammenstimmt (in deinem Fall derzeit 50%). Ist sie zu klein gewählt, werden Fässer immer nur im oberen/linken Bereich stehen.</p>
<p>Eine Minimalanzahl wirst du nicht hinbekommen da du mit Zufallswerten die Chance bestimmst und im schlimmsten Fall geht das 50%-Chance-Experiment eben immer falsch und du hast kein einziges Fass.</p>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1953363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1953363</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Thu, 16 Sep 2010 12:36:38 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Positionsabfrage in OGRE on Thu, 16 Sep 2010 12:51:58 GMT]]></title><description><![CDATA[<p>BTW: Wenn die Anzahl fix sein soll würde ich einen anderen Algorithmus empfehlen. Du suchst n Mal eine Position aus, ist sie noch nicht besetzt, besetzt du sie, ansonsten suchst du eine neue Position. Das geht natürlich nur falls n &lt;&lt; N ist. Wobei N die Anzahl der Felder insgesamt ist.</p>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1953375</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1953375</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Thu, 16 Sep 2010 12:51:58 GMT</pubDate></item></channel></rss>