 |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
philipp_boeing JLI'ler

Alter: 34 Anmeldedatum: 26.07.2003 Beiträge: 188
Medaillen: Keine
|
Verfasst am: 01.02.2005, 18:22 Titel: Texuren laden... ohne d3dx |
|
|
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 |
|
 |
HomeLess_PunkDrummer JLI Master Trainee

Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 01.02.2005, 18:36 Titel: |
|
|
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 |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 01.02.2005, 18:39 Titel: |
|
|
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 |
|
 |
philipp_boeing JLI'ler

Alter: 34 Anmeldedatum: 26.07.2003 Beiträge: 188
Medaillen: Keine
|
Verfasst am: 01.02.2005, 18:48 Titel: |
|
|
falllen unter "Bitmap" auch JPEGs und PNGs? oder "nur" .bmp Dateien? |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 01.02.2005, 18:51 Titel: |
|
|
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? 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 |
|
 |
HomeLess_PunkDrummer JLI Master Trainee

Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 01.02.2005, 18:58 Titel: |
|
|
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 |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 01.02.2005, 19:03 Titel: |
|
|
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!
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 Erbärmlich... keine Ehre mehr vor Formaten und dem RAM  _________________ '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 |
|
 |
HomeLess_PunkDrummer JLI Master Trainee

Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 01.02.2005, 19:06 Titel: |
|
|
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 |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 01.02.2005, 19:07 Titel: |
|
|
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
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 |
|
 |
Fallen JLI MVP


Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 01.02.2005, 19:11 Titel: |
|
|
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 |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 01.02.2005, 19:46 Titel: |
|
|
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 |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 01.02.2005, 19:48 Titel: |
|
|
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.
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 |
|
 |
Fallen JLI MVP


Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 01.02.2005, 19:55 Titel: |
|
|
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 |
|
 |
GreveN JLI Master

Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 01.02.2005, 19:57 Titel: |
|
|
FallenAngel84 hat Folgendes geschrieben: | TGA besitzt ne Kompression O.o bei welchem Programm kann man das einstellen ? Photoshop CS kanns nicht. |
Stichwort RLE?
Edit: http://de.wikipedia.org/wiki/RLE
Zuletzt bearbeitet von GreveN am 01.02.2005, 20:04, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
 |
|
|
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
|