JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Sprite unscharf

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
-=|BLACK|=-
Mini JLI'ler


Alter: 41
Anmeldedatum: 25.07.2007
Beiträge: 18

Medaillen: Keine

BeitragVerfasst am: 26.07.2007, 10:18    Titel: Sprite unscharf Antworten mit Zitat

hallo

ich habe schon wieder ein problem mit meinen sprites.
grafiken mit texten sind unscharf.

hier könnt ihr euch das ma angucken.
links die orginal und rechts so wie sie bei mir angezeigt wird.




hier ein wenig quellcode der zum erstellen der textur beiträgt.

CPP:
      D3DXIMAGE_INFO ImageInfo;

      D3DXGetImageInfoFromFile(lpFileName, &ImageInfo);

      D3DXCreateTextureFromFileEx(m_lpD3DDevice,
                           lpFileName,
                           ImageInfo.Width,
                           ImageInfo.Height,
                           1, 0,
                           D3DFMT_UNKNOWN,
                           D3DPOOL_MANAGED,
                           D3DX_FILTER_NONE,
                           D3DX_FILTER_NONE,
                           0, &ImageInfo, 0,
                           &lpTexture);

   D3DXMATRIX Matrix;

   D3DXMatrixTransformation2D(
            &Matrix,
            reinterpret_cast<D3DXVECTOR2*>(&m_vCenter),
            0.0f,
            &m_vScale,
            reinterpret_cast<D3DXVECTOR2*>(&m_vCenter),
            m_Rotation,
            reinterpret_cast<D3DXVECTOR2*>(&m_vPosition));

   // Transformations-Matrix setzen
   m_lpSprite->SetTransform(&Matrix);

   m_lpSprite->Begin(D3DXSPRITE_ALPHABLEND);


   DWORD ModulateColor = 0xFFFFFFFF;

   // Sprite zeichnen
   m_lpSprite->Draw(m_AnimationVec[static_cast<size_t>(m_CurrentImage)],
                 NULL,
                NULL,
                NULL,
                ModulateColor);
   m_lpSprite->End();
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Otscho
Super JLI'ler


Alter: 36
Anmeldedatum: 31.08.2006
Beiträge: 338
Wohnort: Gummibären-Gasse
Medaillen: Keine

BeitragVerfasst am: 26.07.2007, 10:31    Titel: Antworten mit Zitat

Verwendest du dein Sprite im Fullscreenmodus oder im Fenstermodus ?
Falls du den Fenstermodus verwendest, könnte es evt. sein dass die Fenstergröße nicht exakt mit der Backbuffergröße übereinstimmt.
>> siehe hier <<
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
-=|BLACK|=-
Mini JLI'ler


Alter: 41
Anmeldedatum: 25.07.2007
Beiträge: 18

Medaillen: Keine

BeitragVerfasst am: 26.07.2007, 10:32    Titel: Antworten mit Zitat

nee ich verwende die im fullscreenmodus!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
-=|BLACK|=-
Mini JLI'ler


Alter: 41
Anmeldedatum: 25.07.2007
Beiträge: 18

Medaillen: Keine

BeitragVerfasst am: 26.07.2007, 10:37    Titel: Antworten mit Zitat

hier noch die initialisierung und die begin- endscene methoden der direct3d klasse:

CPP:
bool CDirect3D::Init(HWND hWnd, BOOL bWindowed)
{
   // Direct3D-Objekt erzeugen
   m_lpD3D = Direct3DCreate9(D3D_SDK_VERSION);

   if(NULL == m_lpD3D)
   {
      // Fehler, D3D-Objekt wurde nicht erzeugt
      return false;
   }

   // Parameter für den Modus festlegen
   D3DPRESENT_PARAMETERS PParams;
   ZeroMemory(&PParams, sizeof(PParams));

   PParams.SwapEffect         = D3DSWAPEFFECT_DISCARD;
   PParams.hDeviceWindow      = hWnd;
   PParams.Windowed         = bWindowed;

   PParams.BackBufferWidth      = 1024;
   PParams.BackBufferHeight   = 768;
   PParams.BackBufferFormat   = D3DFMT_A8R8G8B8;

   HRESULT hr;

   // Direct3D-Gerät anlegen
   if(FAILED(hr =  m_lpD3D->CreateDevice(
            D3DADAPTER_DEFAULT,
            D3DDEVTYPE_HAL,
            hWnd,
            D3DCREATE_SOFTWARE_VERTEXPROCESSING,
            &PParams,
            &m_lpD3DDevice)))
   {
      // Fehler, kann Gerät nicht anlegen
      LPCSTR err = DXGetErrorDescription9(hr);

      DXTRACE_MSG(err);

      MessageBox(NULL, err, "Fehler", MB_OK);

      return false;
   }

   return true;
}



void CDirect3D::BeginScene()
{
   // Backbuffer füllen
   m_lpD3DDevice->Clear(0, 0,
                   D3DCLEAR_TARGET,
                   m_ClearColor,
                   0, 0);

   // D3D mitteilen, dass eine Szene beginnt
   m_lpD3DDevice->BeginScene();
}

void CDirect3D::EndScene()
{
   // D3D mitteilen, dass eine Szene endet
   m_lpD3DDevice->EndScene();

   // Backbuffer anzeigen
   m_lpD3DDevice->Present(0, 0, 0, 0);
}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Otscho
Super JLI'ler


Alter: 36
Anmeldedatum: 31.08.2006
Beiträge: 338
Wohnort: Gummibären-Gasse
Medaillen: Keine

BeitragVerfasst am: 26.07.2007, 10:41    Titel: Antworten mit Zitat

Hmm..
Setz mal in deiner D3DXCreateTextureFromFileEx() die MipLevels auf 0 oder D3DX_DEFAULT. Vielleicht verwendet deine Graka da eine schlechtere Version deines Bildes beim rendern.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
-=|BLACK|=-
Mini JLI'ler


Alter: 41
Anmeldedatum: 25.07.2007
Beiträge: 18

Medaillen: Keine

BeitragVerfasst am: 26.07.2007, 10:48    Titel: Antworten mit Zitat

nee der hängt sich dann auf!

Zuletzt bearbeitet von -=|BLACK|=- am 26.07.2007, 11:35, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
-=|BLACK|=-
Mini JLI'ler


Alter: 41
Anmeldedatum: 25.07.2007
Beiträge: 18

Medaillen: Keine

BeitragVerfasst am: 26.07.2007, 10:59    Titel: Antworten mit Zitat

also ich habe jetzt mal einen test gemacht.
wenn ich D3DXCreateTextureFromFile benutze wird alles normal angezeigt,
wenn ich aber D3DXCreateTextureFromFileEx benutze ist wieder alles verschwommen.

weiter ist mir aufgefallen, dass die D3DXCreateTextureFromFileEx die Grafik verkleinert!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
-=|BLACK|=-
Mini JLI'ler


Alter: 41
Anmeldedatum: 25.07.2007
Beiträge: 18

Medaillen: Keine

BeitragVerfasst am: 26.07.2007, 11:40    Titel: Antworten mit Zitat

ok danke!
das mit den MipLevels hat doch geklappt ich musste den Filter nur auf D3DX_FILTER_LINEAR einstellen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 26.07.2007, 14:35    Titel: Antworten mit Zitat

Im Allgemeinen muss man beim Rendern von Sprites darauf achten, dass die Texturkoordinaten angepasst werden, um ein verschwommenes Bild zu vermeiden.

Directly Mapping Texels to Pixels

Das Sprite-Objekt von D3DX kümmert sich über sowas aber automatisch.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
-=|BLACK|=-
Mini JLI'ler


Alter: 41
Anmeldedatum: 25.07.2007
Beiträge: 18

Medaillen: Keine

BeitragVerfasst am: 26.07.2007, 14:57    Titel: Antworten mit Zitat

mh jetzt wird das bild zwar scharf angezeigt, aber viel zu groß! ca 1/3 größer als es sein sollte

CPP:
D3DXCreateTextureFromFileEx(m_lpD3DDevice,
                                              lpFileName,
                                              ImageInfo.Width,
                                              ImageInfo.Height,
                                              0, 0,
                                              D3DFMT_UNKNOWN,
                                              D3DPOOL_DEFAULT,
                                              D3DX_FILTER_LINEAR,
                                              0, 0, 0,
                                              &lpTexture);
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
-=|BLACK|=-
Mini JLI'ler


Alter: 41
Anmeldedatum: 25.07.2007
Beiträge: 18

Medaillen: Keine

BeitragVerfasst am: 27.07.2007, 05:58    Titel: Antworten mit Zitat

ok auch das problem habe ich jetzt gelöst!
anstatt ImageInfo.Height und Width habe ich jetzt das Macro D3DX_DEFAULT_NONPOW2 genutzt! un es klappt super! Laughing
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 27.07.2007, 08:14    Titel: Antworten mit Zitat

Das Flag D3DX_DEFAULT sollte im Grunde auch klappen, und es ist etwas kompatibler, für GraKas die z.B. nur 2er Potenzen benutzen.

Gruß DXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
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