Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi DirectX9 - Texturbreite und -höhe (https://www.delphipraxis.net/146605-directx9-texturbreite-und-hoehe.html)

XoRiC 23. Jan 2010 15:55


DirectX9 - Texturbreite und -höhe
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich möchte gerne die Breite und Höhe meiner Texturen auslesen, komme mit dem Code aus den meisten Tutorials aber nicht ganz klar. Beim Laden meiner Texturen übergebe ich für Width und Height beide Male D3DX_DEFAULT. In der MSDN steht hier nämlich: If this value is zero or D3DX_DEFAULT, the dimensions are taken from the file. (Link).

Folgenden Code verwende ich für das Bestimmen der Breite und Höhe:

Delphi-Quellcode:
  var Texture: IDirect3DTexture9; // Hier wird eine Textur mit 184 x 119 Größe geladen
    Surface: IDirect3DSurface9;
    Desc: _D3DSURFACE_DESC;
Delphi-Quellcode:
   
    Texture.GetSurfaceLevel(0, Surface);
  Surface.GetDesc(Desc);
  Width := Desc.Width;   // = 256
  Height := Desc.Height; // = 128
Hier ein kleines Beispielbild, was passiert:

http://img94.imageshack.us/img94/4004/bspd.jpg

Der gelbe Bereich ist die tatsächliche Texturgröße, wie ich sie mit Adobe Photoshop gespeichert hab (184 x 119).
Der schwarze Bereich repräsentiert die Dimensionen, die mein obiger Code liefert (256 x 128).
Offensichtlich hat das Surface wohl die nächsthöheren 2er-Potenzen für die Werte von Width und Height.
Ich würde aber gerne die tatsächliche Breite und Höhe abfragen.

Hat mir jemand einen Tipp, wie ich an diese Werte rankomme? Über das Surface scheint es so nicht zu gehen?

Vielen Dank für Tipps und Links,
Xoric

Medium 23. Jan 2010 16:28

Re: DirectX9 - Texturbreite und -höhe
 
Intern werden Texturen meist mit Kantenlängen in 2er-Potenzen abgebildet. Ich wüsste jetzt nicht, wie man die Größe von DirectX beziehen könnte, aber du könntest sie von Hand aus dem File lesen. (Entweder mit einer entsprechenden Komponente/Klasse öffnen, oder wirklich flugs auf www.wotsit.org in die Format-Specs schauen und mit nem Stream ran gehen.) Wobei DirectX vermutlich irgendwo Infos darüber haben muss, weil sonst das Mapping ja seltsam ausschauen würd :gruebel:

...Hmmm, zumindest gibts dies hier, was immerhin das tut was ich meinte, und schon fix und fertig benutzbar ist :)

XoRiC 23. Jan 2010 16:53

Re: DirectX9 - Texturbreite und -höhe
 
Hi Medium :)

Naja der kleine Umweg tut mir nicht weh. Mit deinem Vorschlag hat es jedenfalls auf Anhieb wunderbar funktioniert und bin mit der Lösung sehr zufrieden. Danke einmal wieder für deine Hilfe! Du hast mich schon an einigen Stellen meines Projektes ein gutes Stück weitergebracht :)

Hier wie immer der Code, mit dem sich obiges realisieren lässt:

Delphi-Quellcode:
var Info: D3DXIMAGE_INFO;
    Width, Height: Cardinal;
Delphi-Quellcode:
D3DXGetImageInfoFromResource(Resource.Handle, PChar('Texture01'), Info);
// Ich lade hier die Textur-Infos aus einer Ressource, alternativ D3DXGetImageInfoFromFile, um Infos aus einer Datei zu laden

Width := Info.Width;
Height := Info.Height;
Die ausgelesene Breite und Höhe stimmt dann tatsächlich und ist nicht auf die nächsthöhere 2er-Potenz vergrößert.

Gruß an alle,
Xoric

Medium 23. Jan 2010 17:05

Re: DirectX9 - Texturbreite und -höhe
 
Freut mich :)
Ich weiss ja ganz gut selbst, dass es im deutschsprachigen Raum - und dann noch mit Delphi - extrem schwer ist Infos zu DirectX zu finden. Ist wohl eine sehr seltene Dreier-Kombi. Naja, und ich bin nun zwar alles andere als ein DX-Guru, hab damit aber zumindest (allerdings via C#/SlimDX) schon mal was gemacht. Da kann ich immerhin versuchen eine ganz ganz kleine Stelle in der Lücke zu schließen :stupid:

Ich kann dir, wenn dir Englisch ein wenig liegt, generell auch das Forum auf www.gamedev.net empfehlen. DA tummeln sich die Cracks geballt, aber hallo! Zwar müsste man sich ein wenig mit C herum schlagen, aber die DX API Calls sehen ja praktisch identisch aus.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz