AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi DirectX9 - Texturbreite und -höhe
Thema durchsuchen
Ansicht
Themen-Optionen

DirectX9 - Texturbreite und -höhe

Ein Thema von XoRiC · begonnen am 23. Jan 2010 · letzter Beitrag vom 23. Jan 2010
Antwort Antwort
XoRiC

Registriert seit: 20. Sep 2005
43 Beiträge
 
RAD-Studio 2009 Arc
 
#1

DirectX9 - Texturbreite und -höhe

  Alt 23. Jan 2010, 16:55
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
Miniaturansicht angehängter Grafiken
bsp_152.jpg  
"Gods are fragile things; they may be killed by a whiff of science or a dose of common sense."
- Chapman Cohen
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: DirectX9 - Texturbreite und -höhe

  Alt 23. Jan 2010, 17:28
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

...Hmmm, zumindest gibts dies hier, was immerhin das tut was ich meinte, und schon fix und fertig benutzbar ist
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
XoRiC

Registriert seit: 20. Sep 2005
43 Beiträge
 
RAD-Studio 2009 Arc
 
#3

Re: DirectX9 - Texturbreite und -höhe

  Alt 23. Jan 2010, 17:53
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
"Gods are fragile things; they may be killed by a whiff of science or a dose of common sense."
- Chapman Cohen
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: DirectX9 - Texturbreite und -höhe

  Alt 23. Jan 2010, 18:05
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

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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:14 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