JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Text auf Texture zeichnen
Gehe zu Seite Zurück  1, 2, 3  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Jonathan_Klein
Living Legend


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

BeitragVerfasst am: 25.04.2006, 13:23    Titel: Antworten mit Zitat

ja, also ich habe jetzt mal eine XRGB Textur erstellet, damit funktioniert GDI jetzt auch. Dann hab ich die Textur in eine neue Textur kopiert, nur mein Problem ist jetz tleider, das GDI das X wohl immer auf 0 setzt.
Eine Mögliche Lösung sehe ich darin, das ich beim kopieren jeden Pixel teste, ob er in der Textfarbe ist und wenn nein ihn transparent mache.
Allersigns ist das ja shcon ein kleiner kopieraufwand, immerhin können da mal ganze Mengen an Pixel zusammen kommen. Ich dneke ich werde das mal testweise machen, um zu sehen wie es von der Performance ist.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


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

BeitragVerfasst am: 25.04.2006, 16:25    Titel: Antworten mit Zitat

XRGB meint das kein A gebraucht wird, sonst könntest du auch ARGB nehmen, irgendwie logisch oder? Wink

Was allerdings komisch ist... warum ist bei dir X=0? sollte X nicht max sein? also 1.0 oder 255?
_________________
"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: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 25.04.2006, 18:09    Titel: Antworten mit Zitat

nien, scheinbar sind die Texturen von anfang an mit 0 initialisiert. Und warum GDI in X bzw. darein was später A ist 0 schreibt weiß ich leider nciht. Tatsache ist jedoch das 1 mir auch nicht weiterhelfen würde, da ich ja Text mit Transparenten Hintergurnd wünsche. Und wenn GDI den Text auf 1 und den Hintergrund auf 0 setzen könnte, würden wohl auch A-Texturen unterstützt.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
fast hawk
Senior JLI'ler



Anmeldedatum: 15.07.2005
Beiträge: 237
Wohnort: Freiburg
Medaillen: Keine

BeitragVerfasst am: 25.04.2006, 18:40    Titel: Antworten mit Zitat

Wenn du XRGB nimmst hast du kein Alpha-kanal sondern einen leern(unbenutzten) Kanal.
_________________
Jetziges Projekt: The Ring War
Status: 40%
-----------------------------------
Nicht weil es schwer ist, wagen wir es nicht, sondern weil wir es nicht wagen, ist es schwer.
--
Lucius Annaeus Seneca (4)
röm. Philosoph, Dramatiker und Staatsmann
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


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

BeitragVerfasst am: 25.04.2006, 19:12    Titel: Antworten mit Zitat

ja, ich weiß, aber man kann ja GDI net auf eine Texture mit A anwenden deswegen nehme ich das X und kopiers dann in eine Textur mit A.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
51m0n
JLI'ler


Alter: 33
Anmeldedatum: 06.01.2006
Beiträge: 167
Wohnort: Erkelenz
Medaillen: Keine

BeitragVerfasst am: 25.04.2006, 19:24    Titel: Antworten mit Zitat

hm..und die End-Textur bleibt leer?
Schlägt vieleicht die Methode StrechRect fehl? (oder womit zeichnest du den Inhalt auf die andere Textur?)
Wenn sich der Text zur laufzeit gar nicht, oder nur wehr wenig ändert kannst du ihn ja auch beim laden Pixel für Pixel kopieren.
_________________
Teigwaren
heißen Teigwaren,
weil sie früher einmal Teig waren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


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

BeitragVerfasst am: 25.04.2006, 19:30    Titel: Antworten mit Zitat

Jonathan_Klein hat Folgendes geschrieben:
ja, ich weiß, aber man kann ja GDI net auf eine Texture mit A anwenden deswegen nehme ich das X und kopiers dann in eine Textur mit A.


wtf?

GDI+: XRGB
DX: ARGB

GDI+ -> DX:

RGB = RGB
A = X <- wie soll das Sinn machen? X wird überhaupt nicht benutzt Oo
_________________
"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
51m0n
JLI'ler


Alter: 33
Anmeldedatum: 06.01.2006
Beiträge: 167
Wohnort: Erkelenz
Medaillen: Keine

BeitragVerfasst am: 25.04.2006, 19:35    Titel: Antworten mit Zitat

Fallen hat Folgendes geschrieben:
Jonathan_Klein hat Folgendes geschrieben:
ja, ich weiß, aber man kann ja GDI net auf eine Texture mit A anwenden deswegen nehme ich das X und kopiers dann in eine Textur mit A.


wtf?

GDI+: XRGB
DX: ARGB

GDI+ -> DX:

RGB = RGB
A = X <- wie soll das Sinn machen? X wird überhaupt nicht benutzt Oo


Ich denke er meint mit X das Surface ohne Alpha
_________________
Teigwaren
heißen Teigwaren,
weil sie früher einmal Teig waren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


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

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

Da würde mich mal spontan interessieren wie er das macht.
_________________
"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
fast hawk
Senior JLI'ler



Anmeldedatum: 15.07.2005
Beiträge: 237
Wohnort: Freiburg
Medaillen: Keine

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

Fallen hat Folgendes geschrieben:
Jonathan_Klein hat Folgendes geschrieben:
ja, ich weiß, aber man kann ja GDI net auf eine Texture mit A anwenden deswegen nehme ich das X und kopiers dann in eine Textur mit A.


wtf?

GDI+: XRGB
DX: ARGB

GDI+ -> DX:

RGB = RGB
A = X <- wie soll das Sinn machen? X wird überhaupt nicht benutzt Oo


X ist unbenutz. Soweit sind wir ja noch einig.So benutzt er X den unbenutzen Buffer weil er A speichern WILL ABER GDI kein A unterstüzt so nimmet er da X und macht es dann zu A.
So würd ich das interpretieren
_________________
Jetziges Projekt: The Ring War
Status: 40%
-----------------------------------
Nicht weil es schwer ist, wagen wir es nicht, sondern weil wir es nicht wagen, ist es schwer.
--
Lucius Annaeus Seneca (4)
röm. Philosoph, Dramatiker und Staatsmann
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


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

BeitragVerfasst am: 25.04.2006, 19:55    Titel: Antworten mit Zitat

CPP:
//eine Textur erstellen, mit transparenz füllen und den text drauf schreiben
   m_lpDevice->CreateTexture(XSize, YSize, 1,//kein mipmapping
            0, D3DFMT_X8R8G8B8, D3DPOOL_MANAGED, &m_lpTexture, NULL);
   
   {
      D3DLOCKED_RECT LocketRect;
      m_lpTexture->LockRect(0, &LocketRect, NULL, D3DLOCK_DISCARD);
      ARGBPixel Pixel;
      Pixel.A=128;
      Pixel.B=0;
      Pixel.G=0;
      Pixel.R=255;
      for(int i=0; i<m_XSize*m_YSize; ++i)
      {
         reinterpret_cast<ARGBPixel*>(LocketRect.pBits)[i]=Pixel;
      }
      m_lpTexture->UnlockRect(0);
   }

   LPDIRECT3DSURFACE9 Surface;
   m_lpTexture->GetSurfaceLevel(0, &Surface);
   HDC hDC;
   Surface->GetDC(&hDC);
   TextOut(hDC, 0, 0, Text.c_str(), Text.length());
   Surface->ReleaseDC(hDC);
   Surface->Release();

   //die textur auf eine texutr mit alphachannel kopieren:
   {
      LPDIRECT3DTEXTURE9 newTexture;
      m_lpDevice->CreateTexture(XSize, YSize, 1, 0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, &newTexture, NULL);

      D3DLOCKED_RECT LocketRect1, LocketRect2;
      m_lpTexture->LockRect(0, &LocketRect1, NULL, D3DLOCK_DISCARD);
      newTexture->LockRect(0, &LocketRect2, NULL, D3DLOCK_DISCARD);
      memcpy(LocketRect2.pBits, LocketRect1.pBits, XSize*YSize*sizeof(ARGBPixel));
      m_lpTexture->UnlockRect(0);
      newTexture->UnlockRect(0);

      m_lpTexture->Release();
      m_lpTexture=newTexture;
   }


Textur erstellen, butn füllen, Text drauf kopieren, neue Textur erstellen, alte Textur in neue kopieren, alte freigeben. Fertig.
Die Stelle die von GDI "bearbeitet" wurde ist am Ende transparent. Deshlab muss ich wohl biem rüberkopierne jeden Pixel chekcen und nach dem Colorkeyverfahren überlegen ob der Pixel transparent sein muss oder nicht.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
51m0n
JLI'ler


Alter: 33
Anmeldedatum: 06.01.2006
Beiträge: 167
Wohnort: Erkelenz
Medaillen: Keine

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

Nur mal so ne Frage wenn du dir n zeiger auf ein Surface mit m_lpTexture->GetSurfaceLevel(0, &Surface); holst und das Surface dann änderst ändert sich die textur doch nicht auch oder?
_________________
Teigwaren
heißen Teigwaren,
weil sie früher einmal Teig waren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


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

BeitragVerfasst am: 25.04.2006, 20:24    Titel: Antworten mit Zitat

Du weist Alphawerte auf eine XRGB Format Surface zu, das kann nicht gehen da diese werte automatisch discarded werden AFAIK.
_________________
"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: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

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

51m0n hat Folgendes geschrieben:
Nur mal so ne Frage wenn du dir n zeiger auf ein Surface mit m_lpTexture->GetSurfaceLevel(0, &Surface); holst und das Surface dann änderst ändert sich die textur doch nicht auch oder?

Doch die Textur besteht ja intern nur aus Surfaces (für jedes Miplevel eine). So sieht das jedenfalls für mich aus und ich finde das klingt plausibel^^

fallen hat Folgendes geschrieben:

Du weist Alphawerte auf eine XRGB Format Surface zu, das kann nicht gehen da diese werte automatisch discarded werden AFAIK.

Doch es geht, die werden halt normalerweise ignoriert nicht aber wenn ich die in ne A-Texture kopiere, dann werden die vollkommen korrekt onterpretiert und ich hab meine transparente Textur. Jedenfalls da wo GDI net reingefuscht hat.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


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

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

Wo benutzt du eigentlich GDI+ ?

GDI kann AFAIK kein direktes Alpha schreiben, daher ist es eigentlich klar das du anstelle deines Textes alles weiss hast.

Wenn du alles auf Alpha 128 haben willst musst du wohl en Alphachannel danach nochmal explizit überschreiben.

Oder du findest eine Alternative, zB ein DX FontObjekt.
_________________
"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
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 Zurück  1, 2, 3  Weiter
Seite 2 von 3

 
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