Buch gesucht :)

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Buch gesucht :)

    Hallo an alle :)
    Ich suche nach einem Buch,( AM ALLERBESTEN WÄRE EIN TUTORIAL IM INTERNET EIN MODEL MIT .3ds FORMAT
    ZU LADEN... NATÜRLICH AUCH FÜR WINDOWS GEEIGNET.. und kein DirectX
    sondern OpenGL :) )
    welches unbedingt einen Model Loader beinhaltet soll und der Rest ist nicht so wichtig.. vllt ein wenig C++ oder Opengl oder so etwas...
    Natürlich ist meine erste Wahl deutsch und dann englisch und der Rest hilft mir nicht viel ^^
    Es sollte auch( ich weiß nicht ob das geht ) für Visual Studio C++ 2010, Windows geeignet sein...
    auch verschiedene Formate laden können ... wenn es nicht mehr als 3ds gibt ist es auch nicht schlimm...
    Animationen und texturing sollten auch dabei sein..
    Das ganze weil ich nichts finde, was funktioniert...
    Das sind jetzt hohe Anforderungen aber ich würde mich sehr über ein paar antworten freuen.. :)
  • Für was brauchst du fertigen Code? Davon hast du gar nichts.
    Wenn du auf die schnelle Grafische Ergebnisse haben willst dann verwende eine fertige Bibliothek.

    -> Irrlicht
    -> OGRE3D

    Sogar bei beiden der Sourcecode vorhanden. Wenn du dir diesen anschaust wirst du verstehen warum keine Tuturials auffindbar sind.
    Die Thematik ist einfahch zu komplex, das einzigste was man findet sind Anfängertutorials um einfache Geometrien zu laden und zu rendern.

    Aber vl kennt doch jemand was .....

    Als Buch habe ich damals "Jetzt lerne ich OpenGL" von Lorenz Burggraf gelesen und ein wenig ausprobiert. Fand es relativ interessant aber weit kommt man damit nicht.

    Mfg Rushh0ur
  • Ich versuche jetzt Irrlicht zu benutzen und habe ein Problem beim Hello World Programm... ich weiß nicht was ich mit den vier Zeilen anfangen soll:
    #ifdef _IRR_WINDOWS_
    #pragma comment(lib, "Irrlicht.lib")
    #pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")
    #endif

    und das andere ist, dass Irrlicht nur ein Konsohlenfenster glaub ich erstellt und ich dann einen Error bekomme... Liegt das vllt an den vier Zeilen, dass die das in ein normales verwandeln?
  • Erstmal nochmal vielen Dank für deine Hilfe :)
    Ich benutze Visual Studio C++ 2010. Ja ich habe eine Windows ( ich glaube GUI ) Anwendung erstellt und bei mir kommt der Fehler:
    1>MSVCRTD.lib(crtexew.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_WinMain@16" in Funktion "___tmainCRTStartup".
    1>C:\Users\Lol\Desktop\dafhadfh\Debug\dafhadfh.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
    Ich habe jetzt die Include Dateien und die lib datei verlinkt und die .dll datei in den system 32 ordner getan
    Liegt der Error evtl daran, dass das Programm int main() benutzt dass normalerweiße für eine Konsohlenanwendung ist?
    Und ich muss wahrsch den Pfad des Models auch angeben und nicht nur ..\..\bla.md2 oder?
    Und unterstützt das Programm mehr als nur md2-Models und den .bmp format??
    Sonst hab ich nicht viel am source code des Hello World Programmes geändert...:
    // ======== MAIN_CPP ======== \\
    #include <irrlicht.h>
    using namespace irr;
    using namespace core;
    using namespace scene;
    using namespace video;
    using namespace io;
    using namespace gui;

    #ifdef _IRR_WINDOWS_
    #pragma comment(lib, "Irrlicht.lib")
    #pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")
    #endif

    int main() {

    IrrlichtDevice *device =
    createDevice( video::EDT_SOFTWARE, dimension2d<u32>(640, 480), 16,
    false, false, false, 0);

    if (!device)
    return 1;

    device->setWindowCaption(L"Hello World! - Irrlicht Engine Demo");


    IVideoDriver* driver = device->getVideoDriver();
    ISceneManager* smgr = device->getSceneManager();
    IGUIEnvironment* guienv = device->getGUIEnvironment();

    guienv->addStaticText(L"Hello World! This is the Irrlicht Software renderer!",
    rect<s32>(10,10,260,22), true);

    IAnimatedMesh* mesh = smgr->getMesh("../../media/sydney.md2");
    if (!mesh)
    {
    device->drop();
    return 1;
    }
    IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh );

    if (node)
    {
    node->setMaterialFlag(EMF_LIGHTING, false);
    node->setMD2Animation(scene::EMAT_STAND);
    node->setMaterialTexture( 0, driver->getTexture("../../media/sydney.bmp") );
    }

    smgr->addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0));

    while(device->run())
    {

    driver->beginScene(true, true, SColor(255,100,101,140));

    smgr->drawAll();
    guienv->drawAll();

    driver->endScene();
    }

    device->drop();

    return 0;
    }
  • -Neues Projekt
    -Win32-Projekt
    -Weiter
    [X]Neue Windows-Anwendung
    [X]Leeres Projekt
    -Fertig stellen

    -Quelldateien
    -Hinzufügen
    -C++Datei (eg main.cpp)
    -Quellcode reinkopieren (zB. examples/01.HelloWorld/main.cpp, also den du gepostet hast)
    -Includeverzeichnis hinzufügen (zb, C:\Users\User\Desktop\irrlicht-1.8\include)
    -Bibliotheksverzeichnis hinzufügen (zb, C:\Users\User\Desktop\irrlicht-1.8\lib\Win32-visualstudio)
    -Irrlicht.dll in den Projektordner kopieren oder für x32-OS in system32 bzw. x64-OS in SysWOW64
  • Ich hab das jetzt alles gemacht und bekomme den Error:
    1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__createDevice" in Funktion "_main".
    1>C:\Users\Eder\Desktop\SGFDAG\Debug\SGFDAG.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.

    Muss ich vllt hier:
    #ifdef _IRR_WINDOWS_
    #pragma comment(lib, "Irrlicht.lib")
    #pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")
    #endif
    oder hier:
    IAnimatedMesh* mesh = smgr->getMesh("../../media/sydney.md2");
    oder hier:
    node->setMaterialTexture( 0, driver->getTexture("../../media/sydney.bmp") );
    einen anderen Pfad anwenden?

  • 1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__createDevice" in Funktion "_main".
    1>C:\Users\Eder\Desktop\SGFDAG\Debug\SGFDAG.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.

    Der Fehler tritt ein wenn die *.lib nicht eingebunden wird.
    Dh. die ifdef-Anweisung wird bei dir Ignoriert, warum auch immer.

    Zwar unsauber, aber evtl. hilft es auch einfach diese #ifdef und #endif-Zeilen zu entfernen.
  • Quellcode

    1. #pragma comment(lib, "Irrlicht.lib")

    Dieser Code sagt dem Visual Studio Präprozessor er soll die Irrlicht.lib Bibliothek dem Linker übergeben. Dies geschieht bei dir nicht, alternativ kannst du diese unter den Prjekteinstellungen/Linker angeben.

    Quellcode

    1. #pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")

    Dieser Code sagt dass das Programm eine Windows-Anwendung ohne Console sein soll und dass als Programmeinstiegfunktion die Funktion mainCRTStartup, welche wiederum main Aufruft, aufgerufen werden soll.

    Quellcode

    1. #ifdef _IRR_WINDOWS_
    2. /* BLOCK */
    3. #endif

    Hier wird vom Präprozessor geprüft ob das Macro _IRR_WINDOWS_ definiert ist und und wenn ja wird der BLOCK-Code beachtet.

    Ich kenne deine Einstellungen nicht und weiß nicht genau wo das Problem bei dir liegt.
    Schon eine Youtube-Anleitung mal versucht? (Klick)
  • Okay, es hat jetzt funkioniert ein .obj und ein .3ds Model zu laden. VIELEN DANK!!!
    Aber ich will es jetzt zuguterletzt( ob man das zusammenschreibt oder nicht ^^ ) in mein Programm einbinden...
    Was in diesem Code hat etwas mit dem erstellen eines Fensters zu tun? :

    int main() {
    IrrlichtDevice *device =
    createDevice( video::EDT_SOFTWARE, dimension2d<u32>(640, 480), 16,
    false, false, false, 0);

    if (!device)
    return 1;

    device->setWindowCaption(L"Hello World! - Irrlicht Engine Demo");


    IVideoDriver* driver = device->getVideoDriver();
    ISceneManager* smgr = device->getSceneManager();
    IGUIEnvironment* guienv = device->getGUIEnvironment();



    IAnimatedMesh* mesh = smgr->getMesh("C:\\Users\\Eder\\Desktop\\untitled.obj");
    if (!mesh)
    {
    device->drop();
    return 1;
    }
    IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh );


    if (node)
    {
    node->setMaterialFlag(EMF_LIGHTING, false);
    node->setMD2Animation(scene::EMAT_STAND);
    node->setMaterialTexture( 0, driver->getTexture("C:\\Users\\Eder\\Desktop\\irrlicht\\media\\sydney.bmp") );
    }


    smgr->addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0));


    while(device->run())
    {
    driver->beginScene(true, true, SColor(255,100,101,140));

    smgr->drawAll();
    guienv->drawAll();

    driver->endScene();
    }


    device->drop();

    return 0;
    }
  • Kann es sein, dass dieser code das Model rendert etc.? :

    IAnimatedMesh* mesh = smgr->getMesh("C:\\Users\\Eder\\Desktop\\untitled.obj");
    if (!mesh)
    {
    device->drop();
    return 1;
    }
    IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh );


    if (node)
    {
    node->setMaterialFlag(EMF_LIGHTING, false);
    node->setMD2Animation(scene::EMAT_STAND);
    node->setMaterialTexture( 0, driver->getTexture("C:\\Users\\Eder\\Desktop\\irrlicht\\media\\sydney.bmp") );
    }



    Wenn ja, wie gebe ich es dann aus anstatt dem smgr->drawall(); ?
  • Eventuell solltest du in die Doku schauen und ein bisschen lesen bevor du einfach so drauf los ratest.
    Außerdem wird im Tutorial viel erklärt.

    Quellcode

    1. IrrlichtDevice *device =
    2. createDevice( video::EDT_SOFTWARE, dimension2d<u32>(640, 480), 16,
    3. false, false, false, 0);

    -> Hauptobjekt der Engine inklusive eines Renderfenster (Größe 640x480px) erstellen.

    Quellcode

    1. IAnimatedMesh* mesh = smgr->getMesh("C:\\Users\\Eder\\Desktop\\untitled.obj");
    2. ...
    3. IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh );

    3D Model laden und der Hauptscene diese übergeben worauf man einen Knoten (in einer Objekthirachie) auf dieses erhält.

    Quellcode

    1. node->setMaterialFlag(EMF_LIGHTING, false);
    2. node->setMD2Animation(scene::EMAT_STAND);
    3. node->setMaterialTexture( 0, driver->getTexture("C:\\Users\\Eder\\Desktop\\irrlicht\\media\\sydney.bmp") );

    Eigenschaften des Knotens, bzw des vorher hinzugefügten 3D-Onjekts, festlegen. (u.a auch die zu verwendende Texture)

    Quellcode

    1. smgr->addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0));

    Eine Kamere hinzufügen bzw. den Renderausschnitt festlegen.

    Quellcode

    1. while(device->run())
    2. {
    3. driver->beginScene(true, true, SColor(255,100,101,140));
    4. smgr->drawAll();
    5. guienv->drawAll();
    6. driver->endScene();
    7. }

    Solange das Fenster offen ist bzw. die Engine läuft wird in einer Schleife jedes mal die Scene neu gezeichnet.
    beginScene: Dem Videotreiber sagen das er die Scene löschen soll (mit der angegeben Farbe).
    drawAll: Objektmanager und Guimanager soll die Objekte sowie die GUI-Elemente zeichnen.
    endScene: Dem Videotreiber sagen dass alles gerendert wurde und dieses auf dem Bildschirm angezeigt werden soll.
  • "untitled.obj" <- ist dein benutzerdefiniertes Objekt?
    Wenn du nur den Pfad geändert hast, dann wird es berücksichtigt.
    Warum es nicht angezeigt wird kann mehrere Gründe haben.

    -> Falsche Posotion des Objekts (auserhalb der Blickrichtung der Kamera)
    -> Objekt zu nah oder zu weiter von der Kamera entfernt
    -> Objekt falsch skaliert, ggf. befindet sich die Kamera inerhalb des Objekts sodass die "Innenwände" je nach Einstellung nicht gerendert werden.