Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Andreas

Frischling

  • »Andreas« ist der Autor dieses Themas

Beiträge: 77

Beruf: Schüler

  • Private Nachricht senden

1

20.01.2008, 22:08

Problem mit unscharfer Textur / tbGUIImage

Hallo,
ich versuche gerade ein kleines Lernspiel zu programmieren und da bekommt man zwischendurch immer Infotexte.

http://www.mehringskoetter.de/files/Screenshot.bmp
http://www.mehringskoetter.de/files/Infotext2_1.jpg

Das Problem ist das die Textur wenn ich sie so normal mit einem Editor öffne ganz scharf ist (zweiter Link), im Spiel ist die Textur an manchen Stellen aber recht unscharf (erster Link).

Die Textur wird als GUI-Element verwaltet, in der sie mit DrawPrimitiveUP gerendert wird.

C-/C++-Quelltext

1
g_pSpiel->m_pGUI->CreateImage(0, 1, tbVector2(156.0f, 128.0f), tbVector2(512.0f, 512.0f), m_pTexturen[0]);

Wobei die Texuren so definiert sind:

C-/C++-Quelltext

1
    PDIRECT3DTEXTURE9*      m_pTexturen;        //Texturen


Kann mir einer vielleicht erklären warum das Bild so unscharf ist und was man dagegen machen kann?
Die Textur hat ja eine Größe von 512x512, ich hab schon versucht die Größe von GUIImage auf 511x511 oder 513x513 zu verändern, aber es ist trotzdem noch unscharf.

Vielen Dank eine Antwort,
viele Grüße
Andreas

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

20.01.2008, 22:31

Also ich würde mal sagen, dass da ein Texturfilter am Werk ist.

Irgendwo solltest du die Texturfilter ein, bzw. auch ausschalten können.

Ich würde mal die Klasse tbDirect3D anschauen, dort kannst du die verschiedenen Renderstates und auch Texturschichtstates ändern.

Andreas

Frischling

  • »Andreas« ist der Autor dieses Themas

Beiträge: 77

Beruf: Schüler

  • Private Nachricht senden

3

21.01.2008, 20:29

Hi,
erstmal vielen Dank für den Hinweis, daran hats gelegen.
Wenn ich es so in tbGUIImage schreibe geht es:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
tbDirect3D& D3D = tbDirect3D::Instance();
tbEffect* pEffect = m_pGUI->GetImageEffect();
pEffect->GetEffect()->SetTexture("Image", m_pTexture);
D3D.SetSS(0, D3DSAMP_MINFILTER, D3DTEXF_NONE);
D3D.SetSS(0, D3DSAMP_MAGFILTER, D3DTEXF_NONE);
// Vertexformat setzen


D3D.SetFVF(tbGUIVertex::dwFVF);

// Dreiecke zeichnen

int iNumPasses = pEffect->Begin();
for(int i = 0; i < iNumPasses; i++)
{
    pEffect->Pass(i);
    D3D->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, aVertex,
     sizeof(tbGUIVertex));
}
pEffect->End();
pEffect->GetEffect()->SetTexture("Image", NULL);
//Vorherige Einstellungen wieder herstellen

if(D3D.m_Caps.PrimitiveMiscCaps & D3DPTFILTERCAPS_MINFANISOTROPIC) D3D.SetSS(0, D3DSAMP_MINFILTER, D3DTEXF_ANISOTROPIC);
else D3D.SetSS(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
if(D3D.m_Caps.PrimitiveMiscCaps & D3DPTFILTERCAPS_MAGFANISOTROPIC) D3D.SetSS(0, D3DSAMP_MAGFILTER, D3DTEXF_ANISOTROPIC);
else D3D.SetSS(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);


Ich fänds jetzt aber noch einfacher wenn ich diese Sampler-States direkt in den ImageEffekt schreiben könnte:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
TEXTURE Image;\n"
                "\n"
                "TECHNIQUE T1\n"
                         "{\n"
                         "    PASS P1\n"
                         "    {\n"
                         "        Texture[0]        = <Image>;\n"
                         "        MINFILTER[0]      = NONE;\n"
                         "        MAGFILTER[0]      = NONE;\n"
                         "        ZEnable           = False;\n"
                         "        ZWriteEnable      = False;\n"
                         "        Lighting          = False;\n"
                         "        ColorVertex       = True;\n"....

Leider funktioniert das so nicht, auch nicht wenn ich statt NONE einfach 0 schreibe. In der Log steht immer "Keine gültige Technik gefunden", wie muss ich das denn in den Effekt schreiben, damit es funktioniert?

Vielen Dank schonmal im Voraus, viele Grüße
Andreas

PS: Mal eine Frage warum steht (zumindest in der Vorschau) ******* statt "Voraus" mit doppel r)?

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

21.01.2008, 21:01

Hmm.. Mit Effekten habe ich mich noch nicht so auseindandergesetze..;-)

Das sind häufige Schreibfehler, die David als zensiert angegeben hat.. :D

5

21.01.2008, 21:09

Weil man etw. im voraus tun kann. Was soll denn im vor raus sein? ;)
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

6

22.01.2008, 08:39

Wenn das der ganze Shader sein soll (und nicht nur ein Code-Ausschnitt) den du da gepostet hast, dann fehlt einiges und kann so nicht funktionieren.
MinFilter und MagFilter = None ist korrekt und daran wird es nicht liegen.
Würde dir auch empfehlen, den Effekt in eine FX-Datei auszulagern. Tut man sich leichter.

Andreas

Frischling

  • »Andreas« ist der Autor dieses Themas

Beiträge: 77

Beruf: Schüler

  • Private Nachricht senden

7

22.01.2008, 15:37

Hallo,
sry, ich kenne mich noch nicht so gut aus, aber sind Shader = Effekte?

Zumindest ist der dargestellte Code der obere Teil des ImageEffekts der so außer Min und MagFilter in der TribaseEngine steht.
Aber leider scheinen die Befehle Min und MagFilter nicht zu stimmen, was muss ich stattdessen da hinschreiben?

8

22.01.2008, 16:59

Zitat von »"Andreas"«

aber sind Shader = Effekte?

Jou!
Wie schon gesagt, MinFilter und MagFilter sind so ok. Er findet ja die Technik nicht. Am besten schaust du dir irgendeine FX-Datei aus dem DirectX SDK an, wie der Aufbau auszusehen hat. Oder - da das Thema Shader komplex ist - mal ein paar Tutorials durcharbeiten.

Werbeanzeige