Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

07.03.2013, 22:18

Ogre: Code designen

Guten Abend Zusammen

Ich versuche mich im Moment in Ogre einzuarbeiten und verstehe auch eigentlich alle mehr oder weniger.

Mein Problem ist, dass ich nicht weiß, wie ich ein Spiel mit Ogre anfangen soll.
In den Tutorials hat man ja immer ein festgelegtes Konstrukt in das man seinen Code
schreibt, wie löse ich das ganze aber bei einem Spiel?
Bisher habe ich nur mit der Tribase gearbeitet, wo man ja selber ein Konstrukt aufbaut
und dann einfach die Engine in den Code einbindet (ich meine jetzt nicht linken).
Bei Ogre habe ich irgendwie das Gefühl, dass mir Ogre vorgibt, wie ich meine Anwendung
zu strukturieren habe, es wird aber nirgendswo gezeigt, wie dies zu bewerkstelligen ist.
Ich meine jetzt keinen exakten Code sondern mehr einen logischen Aufbau.

Ich hoffe, dass mir jemand, der schon ein wenig Erfahrung mit Ogre hat erklären kann,
wie er ein Spiel logisch aufbauen würde, oder wo ich mir das ganze entsprechend anlesen kann.

Gruß CodeSneak

Mirlix

Supermoderator

Beiträge: 451

Beruf: Developer Advocate

  • Private Nachricht senden

2

07.03.2013, 22:50

Es gibt 2 Möglichkeiten mit Ogre zu arbeiten. Die eher seltene Möglichkeit ist jedes Frame die renderOneFrame Funktion von Root aufzurufen und Ogre::WindowEventUtilities::messagePump () . Die oft genutzt Möglichkeit ist einen eigenen FrameListener zu schreiben und ihn an Ogre zu übergeben und dann Ogre die ganze arbeit machen zu lassen und seine Anwendung mit Hilfe des FrameListeners zu schreiben. Das OgreWiki sollte dazu genug Informationen bereit stellen.
Ansonsten verweise ich einfach noch ganz dezent auf meine Signatur :)

3

08.03.2013, 16:38

Ich hatte schon überlegt, ob ich mir dein Buch kaufen soll, und hab es jetzt bestellt :)
Mit Ogre 1.8.1 ist der Inhalt aber noch kompatibel, oder?

Mirlix

Supermoderator

Beiträge: 451

Beruf: Developer Advocate

  • Private Nachricht senden

4

09.03.2013, 00:04

Das es soweit ich weiss keine grundlegenden Änderungen gab wie sie mit 2.0 kommen werden ist das Buch noch relevant. An einigen Stellen könnte evt. etwas anders sein, das sind aberwenn nur kleine spezial Fälle.

5

09.03.2013, 22:15

Das Buch ist heute angekommen und ich finde es echt gut :)

Ich hab jetzt nur ein Problem in Kapitel 3:

Bei mir funktionieren die Schatten einfach nicht. Ich habe mir auch den Samplecode
geladen, doch damit funktioniert es auch nicht!

Gibt es da irgendwas spezielles, was ich beachten muss?

Thoran

Alter Hase

Beiträge: 520

Wohnort: Stuttgart

Beruf: Senior Software Engineer

  • Private Nachricht senden

6

10.03.2013, 09:21

Deine Beschreibung ist etwas knapp. Nicht jeder hier hat das Buch von Mirlix. Wenn du also willst, dass Dir außer Mirlix noch jemand anderes weiterhilft. Musst du schon mehr Informationen posten, wie z.B.

  • Welches Sample hast du Dir denn geladen? Vom Buch? Aus dem Ogre-SDK? Vom Ogre-Wiki etwas?
  • Was für Schatten machst du denn? Stencil Shadows? Shadowmapping?

Thoran
Mein Entwicklertagebuch
Aktuelles Projekt: Universum Espionage
Eingestellt:Spieleengine SilverCore
Organisator "Spieleentwickler Stammtisch Stuttgart"

7

10.03.2013, 10:32

Ich habe folgende Codestelle in der createScene-Methode:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        Plane plane (Vector3::UNIT_Y, -10);
        MeshManager::getSingleton ().createPlane ("plane", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, plane, 1500, 1500, 200, 200, true, 1, 5, 5, Vector3::UNIT_Z);

        Entity* ent = mSceneMgr->createEntity ("LightPlaneEntity", "plane");
        mSceneMgr->getRootSceneNode ()->createChildSceneNode ()->attachObject (ent);
        ent->setMaterialName ("Examples/BeachStones");

        Light* light = mSceneMgr->createLight ("Light1");
        light->setType (Light::LT_DIRECTIONAL);
        light->setDirection (Vector3 (1, -1, 0));

        SceneNode* node = mSceneMgr->createSceneNode ("Node1");
        mSceneMgr->getRootSceneNode ()->addChild (node);

        Entity* sinbad = mSceneMgr->createEntity ("Sinbad", "Sinbad.mesh");
        mSinbadNode = node->createChildSceneNode ("SinbadNode");
        mSinbadNode->setPosition (Vector3 (0.0f, 4.0f, 0.0f));
        mSinbadNode->setScale (3, 3, 3);
        mSinbadNode->attachObject (sinbad);

        mSceneMgr->setShadowTechnique (SHADOWTYPE_STENCIL_ADDITIVE);


Eigentlich sollte dort eine Fläche erscheinen, auf der dieser Oger steht, und der sollte einen Schatten werfen.
Es erscheint aber kein Schatten.

Die Klasse ist von ExampleApplication (aus den Ogre-SDK) abgeleitet.

EDIT:

Ich hab das ganze jetzt mal mit OpenGL gerendert, da erscheint der Schatten ?(

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »CodeSneak« (10.03.2013, 11:12)


Thoran

Alter Hase

Beiträge: 520

Wohnort: Stuttgart

Beruf: Senior Software Engineer

  • Private Nachricht senden

8

10.03.2013, 14:36

Das es bei OpenGL funktioniert, erstaunt mich etwas. Was für einen DirectX Renderer verwendest du 9 oder 11?
DirectX11 ist immernoch etwas unfertig, du solltest auf jeden Fall 9 nehmen. Also ich habe bei mir ein funktionierendes Stencil-Shadowing in der Engine drin in Verbindung mit DX9. Allerdings kann ich jetzt an deinem Code auf die Schnelle nicht erkennen wo da ein Fehler ist oder etwas fehlt.
Mein Entwicklertagebuch
Aktuelles Projekt: Universum Espionage
Eingestellt:Spieleengine SilverCore
Organisator "Spieleentwickler Stammtisch Stuttgart"

9

10.03.2013, 16:41

Ich verwende DirectX9.
Im Code kann doch eigentlich garnix fehlen, sonst würde es ja nicht bei OpenGL klappen?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include "Ogre\ExampleApplication.h"


class Example19 : public ExampleApplication
{
public:

    void createScene()
    {
        Ogre::Plane plane(Vector3::UNIT_Y, -10);
        Ogre::MeshManager::getSingleton().createPlane("plane",
            ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, plane,
            1500,1500,200,200,true,1,5,5,Vector3::UNIT_Z);


        Ogre::Entity* ent = mSceneMgr->createEntity("LightPlaneEntity", "plane");
        mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(ent);
        ent->setMaterialName("Examples/BeachStones");


        Ogre::SceneNode* node = mSceneMgr->createSceneNode("Node1");
        mSceneMgr->getRootSceneNode()->addChild(node);

        Ogre::SceneNode* node2 = node->createChildSceneNode("node2");
        node2->setPosition(0,100,0);

        Ogre::Light* light = mSceneMgr->createLight("Light1");
        light->setType(Ogre::Light::LT_DIRECTIONAL);
        light->setDirection(Ogre::Vector3(1,-1,0));
    

        Ogre::Entity* Sinbad = mSceneMgr->createEntity("Sinbad", "Sinbad.mesh");
        Ogre::SceneNode* SinbadNode = node->createChildSceneNode("SinbadNode");
        SinbadNode->setScale(3.0f,3.0f,3.0f);
        SinbadNode->setPosition(Ogre::Vector3(0.0f,4.0f,0.0f));
        SinbadNode->attachObject(Sinbad);

        mSceneMgr->setShadowTechnique(SHADOWTYPE_STENCIL_ADDITIVE);




        
    }
};

int main (void)
{
    Example19 app;
    app.go();
    return 0;
}


(Falls das hier Copyrightmäßig nicht gepostet werden darf, lösche ich es)


Das ist der Code aus dem Buch, der funktioniert bei mir mit DirectX9 auch nicht

10

12.03.2013, 14:36

Ok, ich habe jetzt in der Log-Datei folgende Zeile gefunden:

C-/C++-Quelltext

1
WARNING: Stencil shadows were requested, but this device does not have a hardware stencil. Shadows disabled.


Meine Grafikkarte (HD 6870) sollte das aber doch unterstützen, oder nicht?

Werbeanzeige