JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=49669c84de998b2d8ac9b004c72e84bcMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Texuren laden... ohne d3dx
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
philipp_boeing
JLI'ler


Alter: 34
Anmeldedatum: 26.07.2003
Beiträge: 188

Medaillen: Keine

BeitragVerfasst am: 01.02.2005, 19:22    Titel: Texuren laden... ohne d3dx Antworten mit Zitat

Hi,

bis jetzt benutze ich immer die D3DXCreateTexture.... Funktion um Texturen zu laden. Ich möchte jetzt aber eigentlich von D3DX Weg kommen, und frage mich wie man ohne d3dx texturen in direct3d laden kann...

wenn jemand bescheid weiß.... ich wäre sehr dankbar
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 36
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 01.02.2005, 19:36    Titel: Antworten mit Zitat

Hey ich hab das selbe Problem, aber es gibt echt noch mehr als D3DXCreateTextureFromFile was ich loswerden will... Soweit ich weiß gibt es schon ein paar Funktionen, eventuell kannst du sie erst in eine Surface laden und dann mit UpdateTexture, was ein Member des D3DDevice ist machen, es dürfte da auch mehr geben, weiß ich jetzt aber nicht alle...
Gruß
_________________
"Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 01.02.2005, 19:39    Titel: Antworten mit Zitat

Hi,

ist nur ein Prototyp, läuft aber!
CPP:
// ///////////////////////////////////////////////////////////////////////////
// PUBLIC
//
// Läd eine Bitmap in den Texturmanager
// ///////////////////////////////////////////////////////////////////////////
void texture::loadTexture (const std::wstring& fileName)
{
        // Ist die zu ladene Textur schon enthalten?
    if(textures_.find(fileName) != textures_.end())
        return;

        // Datei öffnen
    std::fstream file (to_string(fileName.c_str()).c_str(), std::ios::in | std::ios::binary);

        // Existiert die Datei?
    if (!file.good())
    {
            // Datei existiert nicht! Exception werfen
        std::wstringstream out (L"");
        out << L"File not found: '" << fileName + L"'";
        EXCEPTION (out.str());
    }

        // Struktur für den Bitmapheader
    BITMAPFILEHEADER header;

        // Bitmapheader laden
    file.read ((char*)&header, sizeof(BITMAPFILEHEADER));

        // Ist es auch eine Bitmap? (0x4D42 ist eine "stdverselle Bitmap ID")
    if(header.bfType != 0x4D42)
    {
            // Die Datei ist keine richtige Bitmap!
        std::wstringstream out (L"");
        out << L"File is corrupt: '" << fileName + L"'";
        EXCEPTION (out.str());
    }

        // Struktur für den Informationsheader der Bitmap
    BITMAPINFOHEADER infoheader;

        // Bitmap-Informationsheader laden
    file.read ((char*)&infoheader, sizeof(BITMAPINFOHEADER));

        // Ist die Größe schon vorberechnet?
    if(infoheader.biSizeImage == 0)
    {
            // Größe ist noch nicht vorberechnet, also tun wir es von Hand.
        infoheader.biSizeImage = infoheader.biWidth * infoheader.biHeight * 3;
    }

        // Das "Lesezeichen" dort hin positionieren wo die Farbdaten beginnen.
    file.seekg(header.bfOffBits, std::ios::beg);

        // Speicher bereit stellen für die Farbdaten
    unsigned char *data = new unsigned char [infoheader.biSizeImage];

        // Farbdaten laden
    file.read ((char*)data, infoheader.biSizeImage);

        // Farbdaten spiegeln:
    flip (data,infoheader.biSizeImage/infoheader.biHeight, infoheader.biHeight);

        // Bitmaps sind im BGR format gespeichert, wir brauchen jedoch RGB
    for(int index = 0; index < static_cast<int>(infoheader.biSizeImage); index+=3) 
          std::swap(data[index], data[index+2]);

        // Temporäre Textur erstellen
    ::IDirect3DTexture9* tempTexture = NULL;

    if (direct3d::getInstance().direct3d9device_->CreateTexture
            (infoheader.biWidth, infoheader.biHeight, 1, 0,
            D3DFMT_R5G6B5, D3DPOOL_MANAGED, &tempTexture, NULL) != D3D_OK)
    {
            // Es konnte keine Textur erstellt werden!
        std::wstringstream out (L"");
        out << L"Couldn't create texture for: '" << fileName + L"'";
        EXCEPTION (out.str());
    }

        // LockedRect.
    D3DLOCKED_RECT lockedRect;

        // Locken
    tempTexture->LockRect (0, &lockedRect, NULL, 0);

        // Beginn des Kopiervorgangs
    for (int y=0; y < infoheader.biHeight; ++y)
    {
        for (int x=0; x < infoheader.biWidth; ++x)
        {
                // Colorkey?
/*          if (true)
            {
                unsigned long colorkey = 0xff000000;
                ::memcpy(&colorkey, &data[(y*infoheader.biWidth + x)*3], sizeof(unsigned char)*3);
                ((unsigned long*)lockedRect.pBits)[x + (y*lockedRect.Pitch >> 1)] = colorkey;
            } // 32 Bit
            else*/

            {
                // 24 bit pixel in 16 bit pixel konvertieren
            unsigned char R = (data[(y*infoheader.biWidth + x)*3 + 0]) >> 3,
                          G = (data[(y*infoheader.biWidth + x)*3 + 1]) >> 3,
                          B = (data[(y*infoheader.biWidth + x)*3 + 2]) >> 3;
           
#define RGB16BIT(r,g,b) ((b%32) + ((g%64) << 6) + ((r%32) << 11))
                // Pixel in 16 Bit Farbe schreiben
            ((unsigned short*)lockedRect.pBits)[x + (y*lockedRect.Pitch >> 1)] = RGB16BIT(R,G,B);
#undef RGB16BIT
            } // 16 Bit

        }
    }

        // Entriegeln
    tempTexture->UnlockRect (0);

        // Textur und Dateiname in den Manager einfügen
    textures_.insert(std::make_pair(fileName, tempTexture));
}

_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
philipp_boeing
JLI'ler


Alter: 34
Anmeldedatum: 26.07.2003
Beiträge: 188

Medaillen: Keine

BeitragVerfasst am: 01.02.2005, 19:48    Titel: Antworten mit Zitat

falllen unter "Bitmap" auch JPEGs und PNGs? oder "nur" .bmp Dateien?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 01.02.2005, 19:51    Titel: Antworten mit Zitat

Natürlich nur Bitmaps!

Für JPEG benötigst du ne Lizenzlib (Da haben wir auch wieder Lizenzscheisse für so ein extrem schlechtes Format!)
PNGs ist ein recht einfaches Format zum auslesen, google wird da sicherlich helfen.

Jedoch ich würd mich nicht mehr auf diese Müllformate konzentrieren sondern eher auf TGAs, die sind Kompressionsfähig ohne Verlust. Auf nehe gibts auch ein Tut dazu.

Aber dieser loader ist nur für 24Bit Bitmaps, was für den anfang auch reicht.

edit: Wenn ich schon BITMAPINFOHEADER und co benutze, kanns ja nur für BMPs sein, gell? Wink Der Quelltext ist doch kommentiert genug?
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 36
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 01.02.2005, 19:58    Titel: Antworten mit Zitat

Na ja wenn ich dieses SaveSurfaceToFile mit einer zb Bild.png tue, isses zwar ne png aber irgendwie doch ne Bitmap, da selbe Größe, daher könnte der Bitmapheader auch andere Formate tuen können?
Oder was gibts dafür?
_________________
"Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 01.02.2005, 20:03    Titel: Antworten mit Zitat

Der BITMAPINFOHEADER und andere tagBITMAP-Strukturen sind nur für OS/2-Bitmapdateien der Version 1-5 welche unter Windows und co. benutzt werden.

Einfach ne extension der Datei ändern ist bullshit, da das format immer noch ne BMP bleibt.

Nein für andere Formate muss man seinen eigenen Loader/Writer schreiben mit anderen Spezifikationen! Und bei Kompression hört es bei vielen auf (zurecht, ist sau komplex!).

Bleibt doch erstmal bei BMPs.

Wie ich eben im Chat zu einem sagte:
ech undankbar, D3DX vervente pute, selver a loader schrieven könne se net, aver D3DX jedrillse benutze, dat könne die pute von hück! nej nej nej, damals zu DOS-Zigge wor det joah jonz angesch! Very Happy

Ihr hättet mal die DOS-Zeit mitmachen sollen und darunter coden! Da war man noch stolz wenn man eine einzige Bitmap hatte die nur 32kb weg nam und dort alles reinpappen musste weil der Ram nur 8MB hatte.

Aber heute wird ja jedes KB richtung Ram geschossen ohne nachzudenken, siehe HalfLife2 Sad Erbärmlich... keine Ehre mehr vor Formaten und dem RAM Sad
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 36
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 01.02.2005, 20:06    Titel: Antworten mit Zitat

Da schau dir die Games von Microsoft an...Dungeon Siege...alle Waffentexturen auf einer 256x256 Bitmap...Respekt.
_________________
"Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 01.02.2005, 20:07    Titel: Antworten mit Zitat

HomeLess_PunkDrummer hat Folgendes geschrieben:
Da schau dir die Games von Microsoft an...Dungeon Siege...alle Waffentexturen auf einer 256x256 Bitmap...Respekt.


Dazu noch mit Kompression dank BITMAPv4. Also seit mal froh das ihr überhaupt ne BMP nun laden könnt und nehmt euch mal den Code zu herzen Wink

Wers selbst noch nicht kann, soll sich nicht überheben, denn sonst kommt der Hochmut kurz vor dem Fall.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 01.02.2005, 20:11    Titel: Antworten mit Zitat

Wobei man bei DungeonSiege auch nicht extrem nah ranzoomen kann und solche Waffen eh kaum Details haben (Runen,... kommen eh nur bei nahansichten zur Geltung)
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 01.02.2005, 20:46    Titel: Antworten mit Zitat

najagut, png's kann man nicht so gut zippen, gezipptes bmp ist ja ähnlich groß wie gezipptes png, deswegen isses ja egal...
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 01.02.2005, 20:48    Titel: Antworten mit Zitat

Jonathan_Klein hat Folgendes geschrieben:
najagut, png's kann man nicht so gut zippen, gezipptes bmp ist ja ähnlich groß wie gezipptes png, deswegen isses ja egal...


Wenn man rafiniert ist und die BMPs als komprimiert abspeichert kann man mit nem geeigneten loader diese BMPs auch laden.

Bestes Format ist immer noch TGA.

8-32 Bit, hohe Kompression ohne Pixelverlust, Alphachannels uvm. Smile

Da kommt scheiss JPEG und PNG net dran ^^
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 01.02.2005, 20:55    Titel: Antworten mit Zitat

TGA besitzt ne Kompression O.o bei welchem Programm kann man das einstellen ? Photoshop CS kanns nicht.

Bisher war ich von png recht überzeugt bis auf die Alphachannel Probleme bei manchen Programmen.

JPG is Müll, wozu sich tierische Arbeit mit den Texturen machen wenn sie nacher schlechter aussehen und sie sich nicht anständig nachbearbeiten lassen.

DDS is meiner Meinung noch nen Klasse Format, man hat ne Menge Möglichkleiten (Cubemaps, Mipmaps, Farbformate,...) und die Kompression ist super. Angeblich soll die kompression nicht verlustfrei geschehen, davon habe ich bisher aber noch nichts gemerkt, wenn doch dann ist der verlust minimal.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
GreveN
JLI Master


Alter: 37
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 01.02.2005, 20:57    Titel: Antworten mit Zitat

FallenAngel84 hat Folgendes geschrieben:
TGA besitzt ne Kompression O.o bei welchem Programm kann man das einstellen ? Photoshop CS kanns nicht.


Stichwort RLE? Cool

Edit: http://de.wikipedia.org/wiki/RLE


Zuletzt bearbeitet von GreveN am 01.02.2005, 21:04, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 01.02.2005, 20:58    Titel: Antworten mit Zitat

Jesus... was meinste wohl wieso TGA so oft bei Netzwerk und PocketPCs eingesetzt werden? Wegen der RLE Kompression.

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=33

büddee
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum