|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
-=|BLACK|=- Mini JLI'ler
Alter: 41 Anmeldedatum: 25.07.2007 Beiträge: 18
Medaillen: Keine
|
Verfasst am: 26.07.2007, 10:18 Titel: Sprite unscharf |
|
|
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 |
|
|
Otscho Super JLI'ler
Alter: 36 Anmeldedatum: 31.08.2006 Beiträge: 338 Wohnort: Gummibären-Gasse Medaillen: Keine
|
Verfasst am: 26.07.2007, 10:31 Titel: |
|
|
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 |
|
|
-=|BLACK|=- Mini JLI'ler
Alter: 41 Anmeldedatum: 25.07.2007 Beiträge: 18
Medaillen: Keine
|
Verfasst am: 26.07.2007, 10:32 Titel: |
|
|
nee ich verwende die im fullscreenmodus! |
|
Nach oben |
|
|
-=|BLACK|=- Mini JLI'ler
Alter: 41 Anmeldedatum: 25.07.2007 Beiträge: 18
Medaillen: Keine
|
Verfasst am: 26.07.2007, 10:37 Titel: |
|
|
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 |
|
|
Otscho Super JLI'ler
Alter: 36 Anmeldedatum: 31.08.2006 Beiträge: 338 Wohnort: Gummibären-Gasse Medaillen: Keine
|
Verfasst am: 26.07.2007, 10:41 Titel: |
|
|
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 |
|
|
-=|BLACK|=- Mini JLI'ler
Alter: 41 Anmeldedatum: 25.07.2007 Beiträge: 18
Medaillen: Keine
|
Verfasst am: 26.07.2007, 10:48 Titel: |
|
|
nee der hängt sich dann auf!
Zuletzt bearbeitet von -=|BLACK|=- am 26.07.2007, 11:35, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
-=|BLACK|=- Mini JLI'ler
Alter: 41 Anmeldedatum: 25.07.2007 Beiträge: 18
Medaillen: Keine
|
Verfasst am: 26.07.2007, 10:59 Titel: |
|
|
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 |
|
|
-=|BLACK|=- Mini JLI'ler
Alter: 41 Anmeldedatum: 25.07.2007 Beiträge: 18
Medaillen: Keine
|
Verfasst am: 26.07.2007, 11:40 Titel: |
|
|
ok danke!
das mit den MipLevels hat doch geklappt ich musste den Filter nur auf D3DX_FILTER_LINEAR einstellen. |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 26.07.2007, 14:35 Titel: |
|
|
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 |
|
|
-=|BLACK|=- Mini JLI'ler
Alter: 41 Anmeldedatum: 25.07.2007 Beiträge: 18
Medaillen: Keine
|
Verfasst am: 26.07.2007, 14:57 Titel: |
|
|
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 |
|
|
-=|BLACK|=- Mini JLI'ler
Alter: 41 Anmeldedatum: 25.07.2007 Beiträge: 18
Medaillen: Keine
|
Verfasst am: 27.07.2007, 05:58 Titel: |
|
|
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! |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 27.07.2007, 08:14 Titel: |
|
|
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 |
|
|
|
|
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
|