JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Texturen funktionieren nicht
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
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 01.04.2005, 17:59    Titel: Antworten mit Zitat

Alphablending Aktivieren, Vertexcoloralpha setzen, rendern Alphablending wieder Deaktivieren.

Steht alles in meinen Tuts Wink
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 01.04.2005, 18:29    Titel: Antworten mit Zitat

Thx, es funktioniert jetzt alles.
Na dann werde ich das Ganze mal schön kapseln. Smile
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 01.04.2005, 18:31    Titel: Antworten mit Zitat

Fragen zur schönen Kapselung? Fragen oder mal paar Tutorials angucken Smile Oder die OpenSource-Engine Irrlicht Smile
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
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: 02.04.2005, 18:35    Titel: Antworten mit Zitat

so, kein Offtopic mehr Wink
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 25.04.2005, 16:08    Titel: Antworten mit Zitat

Hi,

hab noch ein Problem mit Texturen. Hab jetzt versucht Texte zu erstellen und dazu eine Textur angelegt, wo alle Zeichen drinnstehen. Das Problem ist nur, dass wenn ich nur Teile (sprich einzelne Zeichen) daraus rendern will, sehen die nicht mehr so toll, aus, obwohl sie eigentlich nicht skaliert werden:


_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
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.2005, 16:28    Titel: Antworten mit Zitat

hm, bei so kleinen Objekten könnte die genauigkeit net hoch genug sein, weswegen sie minmal skaliert werden. Evlt. würde es helfen wenn du mal posten würdest, wie du das mit den Anzeigne machst.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 25.04.2005, 16:43    Titel: Antworten mit Zitat

Zum Text anzeigen:

CPP:
void Direct3D::ShowText(const Font& the_font,const char*str,int x,int y,const D3DCOLOR color)
{

// [...]


unsigned len=strlen(str);
    unsigned cid;
   
    for(unsigned i=0;i<len;++i)
    {
        // Zeichen auf gültigkeit prüfen
        if(str[i]>='!'&&str[i]<='~')
            // konventionelle zeichen
            cid=str[i]-'!';
        else if(str[i]=='\n')
        {
            // Zeilenumbruch
            y+=the_font.m_height;
            x=tx;
            continue;
        }
        else
        {
            // Sonstige Sonderzeichen
            switch(str[i])
            {
                case 'Ä':cid=94;break;
                case 'Ö':cid=95;break;
                case 'Ü':cid=96;break;
                case 'ä':cid=97;break;
                case 'ö':cid=98;break;
                case 'ü':cid=99;break;
                case '©':cid=100;break;
                case 'ß':cid=101;break;
                default: continue; // fehler, überspringen!
            }
        }
       
   
        // Vertices erstellen
        D3DVERTEX dv_rect[4]=
        {
            {float(x),float(y),0.0f,1.0f,0xFFFFFFFF,the_font.m_pos[cid].i1,the_font.m_pos[cid].i2},
            {float(x+the_font.m_width[cid]),float(y),0.0f,1.0f,0xFFFFFFFF,the_font.m_pos[cid].i3,the_font.m_pos[cid].i2},
            {float(x+the_font.m_width[cid]),float(y+the_font.m_height),0.0f,1.0f,0xFFFFFFFF,the_font.m_pos[cid].i3,the_font.m_pos[cid].i4},
            {float(x),float(y+the_font.m_height),0.0f,1.0f,0xFFFFFFFF,the_font.m_pos[cid].i1,the_font.m_pos[cid].i4}
        };
       
        // In den Vertexbuffer kopieren
        BYTE*VertexBufferStart;
        m_VB->Lock(0,0,(void**)&VertexBufferStart,0);
        memcpy(VertexBufferStart,dv_rect,sizeof(dv_rect));
        m_VB->Unlock();
       
        // Und schließlich zeichnen
        m_device->DrawPrimitive(D3DPT_TRIANGLEFAN,0,2); 
       
        x+=the_font.m_width[cid];
    }
 // [...]

}


i1,i2,i3,i4 werden beim Erstellen der Font schon für jedes Zeichen berechnet:

CPP:
// [...]
// Werte ausrechnen, die beim Rendern relevant sind
        cpos[cur_char].i1=float(x-char_widths[cur_char])/float(tex_width);
cpos[cur_char].i2=float(y)/float(tex_height);
cpos[cur_char].i3=float(x)/float(tex_width);
cpos[cur_char].i4=float(y+char_height)/float(tex_height);

/*

x X Koordinate des Zeichens in der Textur (plus Zeichenbreite)
y dasselbe in grün, bloß ohne die Höhe!
char_widths[i] Breite der Zeichens i
char_height und noch die Höhe
tex_width/tex_height Texturgrößen

*/


_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 26.04.2005, 14:48    Titel: Antworten mit Zitat

Hat keiner ne Idee? Sind die Berechnungen richtig? Sad
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
xardias
JLI Master


Alter: 39
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 26.04.2005, 14:59    Titel: Antworten mit Zitat

Ich weiß nicht, wie das bei DX funktioniert, vielleicht hilft es das textur filtering umzustellen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 26.04.2005, 15:28    Titel: Antworten mit Zitat

Naja, sie soll aber möglichst 1:1 übernommen werden ohne irgendwelche Filter drüberzujagen. Wie gesagt ich hab es mit linearer Filterung (?) probiert, dann sieht sie zwar besser aus, aber so ein bisschen verschwommen.
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 26.04.2005, 15:30    Titel: Antworten mit Zitat

In meinem Tutorial hab ich gezeigt wie es geht:
CPP:
        // Wir wollen Alphablending haben
    ::core::direct3d::getInstance().direct3d9device_->SetRenderState      (D3DRS_ALPHABLENDENABLE, true);
    ::core::direct3d::getInstance().direct3d9device_->SetRenderState      (D3DRS_SRCBLEND,   D3DBLEND_SRCALPHA);
    ::core::direct3d::getInstance().direct3d9device_->SetRenderState      (D3DRS_DESTBLEND,  D3DBLEND_INVSRCALPHA);
    ::core::direct3d::getInstance().direct3d9device_->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);

        // Wir wollen es Smooth haben ohne Kanten :)
    ::core::direct3d::getInstance().direct3d9device_->SetRenderState (D3DRS_ALPHATESTENABLE,  true);
    ::core::direct3d::getInstance().direct3d9device_->SetRenderState (D3DRS_ALPHAREF,         0x80);
    ::core::direct3d::getInstance().direct3d9device_->SetRenderState (D3DRS_ALPHAFUNC,  D3DCMP_GREATEREQUAL);

        // Und wir wollen was sehen! Auch im Wireframemodus
    ::core::direct3d::getInstance().direct3d9device_->SetRenderState (D3DRS_FILLMODE,   D3DFILL_SOLID);
    ::core::direct3d::getInstance().direct3d9device_->SetRenderState (D3DRS_CULLMODE,   D3DCULL_CCW);

        // Textur, FVF und VertexBuffer setzen
    ::core::direct3d::getInstance().direct3d9device_->SetTexture      (0, texture_);
    ::core::direct3d::getInstance().direct3d9device_->SetFVF          (D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1);
    ::core::direct3d::getInstance().direct3d9device_->SetStreamSource (0, vb_, 0, sizeof(vertex));

        // Schön gefiltert wollen wir es auch, eben beste Qualität :)
    ::core::direct3d::getInstance().direct3d9device_->SetSamplerState (0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
    ::core::direct3d::getInstance().direct3d9device_->SetSamplerState (0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);


// RENDERN




        // NICHT VERGESSEN FÜR MEHR PERFORMANCE: Alphablending wieder aus sowie Alphatesting!
    ::core::direct3d::getInstance().direct3d9device_->SetRenderState (D3DRS_ALPHABLENDENABLE, false);
    ::core::direct3d::getInstance().direct3d9device_->SetRenderState (D3DRS_ALPHATESTENABLE,  false);


Dafür gibt es Alphatesting
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 26.04.2005, 15:48    Titel: Antworten mit Zitat

Das ist bereits alles an.
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 26.04.2005, 15:50    Titel: Antworten mit Zitat

Wie sind denn deine Spezifikationen vom Alphatesting?
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 26.04.2005, 15:52    Titel: Antworten mit Zitat

Der 2. Absatz in deinem Code (bzw. die erste Zeile davon) ?
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 26.04.2005, 15:55    Titel: Antworten mit Zitat

CPP:
        // Wir wollen es Smooth haben ohne Kanten 
    ::core::direct3d::getInstance().direct3d9device_->SetRenderState (D3DRS_ALPHATESTENABLE,  true);
    ::core::direct3d::getInstance().direct3d9device_->SetRenderState (D3DRS_ALPHAREF,         0x80);
    ::core::direct3d::getInstance().direct3d9device_->SetRenderState (D3DRS_ALPHAFUNC,  D3DCMP_GREATEREQUAL);

Alle Drei und Du musst Alphablending aktiviert haben so wie ich es habe.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht 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