Accidental Noise Library richtig einbinden



  • Erstmal Hallo Forum! 🙂
    Ich bin der Rayo, programmiere schon seit meiner Kindheit, oftmals mit Java, aber nun auch manchmal auch mit C++. Ich benutze Visual Studio als Entwicklungsumgebung.

    Ich habe bisher nicht viel mit externen Code gearbeitet, und schon gar nicht in C++. Ich will aber diese (Noise) Library benutzen:

    http://accidentalnoise.sourceforge.net/index.html

    Nachdem ich die "Library" gedownloaded habe, merkte ich aber, dass es sich um den Quellcode handelt - also keine .lib oder .dll Datei. Naja, geht ja auch so.
    Also habe ich mir die readme angeschaut:

    Description
    A modular library written in C++ for the generation of Perlin noise and other forms of noise in 2, 3, 4 and 6 dimensions.

    Usage

    Add all .CPP files in directory src to project, set include path to include, and include anl.h.

    Documentation for the modules can be found at httpaccidentalnoise.sourceforge.netdocs.html and usage examples can be found at httpaccidentalnoise.sourceforge.netexamples.html

    Bindings to the Accidental Noise Library for Lua, as well as code for parsing a tree declaration of modules, can be found in the lua folder. Bindings are generated by tolua++ ( httpwww.codenix.com~tolua ). See httpaccidentalnoise.sourceforge.netlua.html

    Aber irgendwie kommen bei mir Fehlermeldungen, wenn ich die Header und die C++ Dateien in ein neues Projekt importiere. Wie ist das inkludieren gemeint?
    Es gibt sogar einen Examplecode auf der Seite, den ich versuche einzubinden:

    http://accidentalnoise.sourceforge.net/docs.html

    #include "anl.h"
    
    int main()
    {
        anl::CMWC4096 rnd;
        rnd.setSeedTime();
        anl::CImplicitFractal frac1(anl::FBM, anl::GRADIENT, anl::QUINTIC);
        anl::CImplicitFractal frac2(anl::FBM, anl::GRADIENT, anl::QUINTIC);
        anl::CImplicitFractal frac3(anl::FBM, anl::GRADIENT, anl::QUINTIC);
        anl::CImplicitFractal frac4(anl::RIDGEDMULTI, anl::GRADIENT, anl::QUINTIC);
        anl::CImplicitFractal frac5(anl::FBM, anl::GRADIENT, anl::QUINTIC);
        anl::CImplicitFractal frac6(anl::FBM, anl::GRADIENT, anl::QUINTIC);
        anl::CImplicitFractal frac7(anl::FBM, anl::GRADIENT, anl::QUINTIC);
    
        frac1.setSeed(rnd.get());
        frac2.setSeed(rnd.get());
        frac3.setSeed(rnd.get());
        frac4.setSeed(rnd.get());
        frac5.setSeed(rnd.get());
        frac6.setSeed(rnd.get());
        frac7.setSeed(rnd.get());
    
        anl::CImplicitAutoCorrect ac1(0.0, 1.0), ac2(0.0,1.0), ac3(0,1.0),
    		ac4(0.0, 360.0), ac5(-1.0,1.0), ac6(-1.0,1.0), ac7(-1.0,1.0);
        ac1.setSource(&frac1);
        ac2.setSource(&frac2);
        ac3.setSource(&frac3);
        ac4.setSource(&frac4);
        ac5.setSource(&frac5);
        ac6.setSource(&frac6);
        ac7.setSource(&frac7);
    
        anl::CRGBACompositeChannels compose1(anl::RGB);
    
        compose1.setRedSource(&ac1);
        compose1.setGreenSource(&ac2);
        compose1.setBlueSource(&ac3);
        compose1.setAlphaSource(1.0);
    
        anl::CRGBARotateColor rot;
        rot.setAngle(&ac4);
        rot.setAxisX(&ac5);
        rot.setAxisY(&ac6);
        rot.setAxisZ(&ac7);
        rot.setNormalizeAxis(true);
        rot.setSource(&compose1);
    
       TArray2D img(256,256);
    
       anl::SMappingRanges ranges; 
       mapRGBA2D(anl::SEAMLESS_NONE,img,rot,ranges,0);
       saveRGBAArray((char*)"a.tga",&img);
       mapRGBA2D(anl::SEAMLESS_NONE,img,compose1,ranges,0);
       saveRGBAArray((char*)"b.tga",&img);
    
    }
    


  • Rayo3 schrieb:

    Aber irgendwie kommen bei mir Fehlermeldungen, wenn ich die Header und die C++ Dateien in ein neues Projekt importiere.

    Wie lautet die Fehlermeldung?



  • nwp3 schrieb:

    Wie lautet die Fehlermeldung?

    http://www.pic-upload.de/view-22561623/error.jpg.html



  • Du musst ihm den Pfad sagen wo die "anl.h" liegt.



  • Ich habe eine neue "anl.h" in den Projektverzeichnis kopiert und dann wie im Link alle Schritte befolgt und bei Inkludierungspfaden: "C:\Users\Acer\Desktop\Programmierung\C++\Visual Studio\Algorithms\Noise\anl.h", also den Pfad der neuen anl.h eingegeben. Trotzdem kommen die Fehlermeldungen noch.

    Die andere anl.h in den Filtern habe ich aber nicht gefunden. Da die Filter eine gemeinsame Datei sind.



  • Hmm. Entweder füge dem Projekt eine neue Datei hinzu und nenne sie "anl.h" und kopiere den Inhalt dort rein (dann stimmt der Pfad automatisch) oder probiere #include <anl.h> oder gebe den Pfad absolut an: #include "C:\Users\Acer\Desktop\Programmierung\C++\Visual Studio\Algorithms\Noise\anl.h"



  • nwp3 schrieb:

    Hmm. Entweder füge dem Projekt eine neue Datei hinzu und nenne sie "anl.h" und kopiere den Inhalt dort rein (dann stimmt der Pfad automatisch) oder probiere #include <anl.h> oder gebe den Pfad absolut an: #include "C:\Users\Acer\Desktop\Programmierung\C++\Visual Studio\Algorithms\Noise\anl.h"

    Die Datei "anl.h" war schon immer im Projekt, nur im Filter und es kommen immer noch die Fehlermeldungen. Wo soll ich #include <anl.h> reinschreiben? Im Inkludierungspfad geht es irgendwie nicht, auch mit dem absoluten Pfad nicht.
    Und auch nicht wenn die anl.h nicht im Filter ist...



  • Rayo3 schrieb:

    Wo soll ich #include <anl.h> reinschreiben?

    Überall da, wo du Deklarationen aus anl.h brauchst!?



  • Ich sehe auch gerade, dass sich der Compiler gar nicht über das Fehlen der anl.h, sondern über rgbaselect.h, rgbargbatohsv.h, rgbanormalize.h usw. beschwert. Vielleicht funktioniert das mit der anl.h ganz toll und es fehlen nur die anderen Header?



  • Im Bild sind 57 Fehler, aber die Header Dateien fehlen eigentlich nicht, sondern sind im Filter:

    http://www.pic-upload.de/view-22562510/error.jpg.html



  • Rayo3 schrieb:

    Im Bild sind 57 Fehler, aber die Header Dateien fehlen eigentlich nicht, sondern sind im Filter:

    http://www.pic-upload.de/view-22562510/error.jpg.html

    Der findet die Dateien nicht.
    Sind die im Projektverzeichnis/Searchpath?



  • Wie sind die da reingekommen? Nur weil die im Filter sind heißt das nicht dass Visual Studio die findet 🙄 . Du kannst eine neue Headerdatei anlegen und dann per Rechtsklick -> Ordner öffnen den Projektordner finden und dann die Dateien dort reinkopieren. Wahrscheinlich sind die im richtigen Verzeichnis aber in einem Unterordner oder so.
    Außerdem unterscheidet Visual Studio zwischen Bibliotheksheaderdateien und eigenen Headerdateien. Die eigenen werden mit #include "bla.h" eingebunden, die anderen mit #include <bla.h>. Wenn du extra Ordner für Headerdateien angibst, dann ist das für eine extra Bibliothek, also sucht er bei #include <bla.h> in dem angegebenen Ordner, bei #include "bla.h" nicht.



  • Ich habe einen neuen Filter angelegt, damit es übersichtlicher wird. Also bei mir geht es nicht bei header dateien, aber wenn ich das gesamte Projekt anklicke kann ich "Ordner in Datei-Explorer öffnen".

    Im Projektverzeichnis sind sie als "Noise.vcxproj.filters" zu finden. Ist das ein Problem? Wenn alle Dateien nämlich in einem Ordner sind, so ist es auch sehr unübersichtlich. Edit: Hab das hier gefunden, scheint eine passable Lösung ohne Filter zu sein("Alle Dateien anzeigen"): http://stackoverflow.com/questions/15677756/visual-studio-c-use-filters-as-directories

    EDIT 2: Danke für die Hilfe, es geht jetzt. Die Filter waren tatsächlich das Problem.


Anmelden zum Antworten