 |
JLI Spieleprogrammierung
|
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
|
|
Nach oben |
|
 |
OLiver Super JLI'ler

Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 01.04.2005, 18:29 Titel: |
|
|
Thx, es funktioniert jetzt alles.
Na dann werde ich das Ganze mal schön kapseln.  _________________ http://www.sieder25.org/ (Siedler 2 - Remake) |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
|
Nach oben |
|
 |
OLiver Super JLI'ler

Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 25.04.2005, 16:08 Titel: |
|
|
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 |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 25.04.2005, 16:28 Titel: |
|
|
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 |
|
 |
OLiver Super JLI'ler

Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 25.04.2005, 16:43 Titel: |
|
|
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 |
|
 |
OLiver Super JLI'ler

Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 26.04.2005, 14:48 Titel: |
|
|
Hat keiner ne Idee? Sind die Berechnungen richtig?  _________________ http://www.sieder25.org/ (Siedler 2 - Remake) |
|
Nach oben |
|
 |
xardias JLI Master

Alter: 39 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 26.04.2005, 14:59 Titel: |
|
|
Ich weiß nicht, wie das bei DX funktioniert, vielleicht hilft es das textur filtering umzustellen. |
|
Nach oben |
|
 |
OLiver Super JLI'ler

Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 26.04.2005, 15:28 Titel: |
|
|
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 |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 26.04.2005, 15:30 Titel: |
|
|
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 |
|
 |
OLiver Super JLI'ler

Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 26.04.2005, 15:48 Titel: |
|
|
Das ist bereits alles an. _________________ http://www.sieder25.org/ (Siedler 2 - Remake) |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
 |
OLiver Super JLI'ler

Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 26.04.2005, 15:52 Titel: |
|
|
Der 2. Absatz in deinem Code (bzw. die erste Zeile davon) ? _________________ http://www.sieder25.org/ (Siedler 2 - Remake) |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 26.04.2005, 15:55 Titel: |
|
|
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 |
|
 |
|
|
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
|