JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

D3D-2DSpriteklasse will net
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 02.11.2005, 17:41    Titel: D3D-2DSpriteklasse will net Antworten mit Zitat

Also, ich arbeite an einer alternative zu D3DX-Sprites. Ist jetzt so ungefähr mein dritter Versuch und es funktioniert nix, und ich hab keinen Plan warum.
Zum Beispiel funktinieren meine Orthogonalmatrizen nciht, wenn ich das ganze mit XYZ_RHW render funktioniert es, ein wenig mehr, das heit das Dreieck wird richtig gerendert aber mit dne falschen Farben.
CPP:
void D3DSprite::Render()
{
    m_lpDevice->SetFVF(D3DFVF_XYZRHW | D3DFVF_DIFFUSE);
    m_lpDevice->SetRenderState(D3DRS_LIGHTING, false);
    m_lpDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
    m_lpDevice->SetRenderState(D3DRS_DITHERENABLE, true);
   
    m_lpDevice->SetTransform(D3DTS_WORLD, &cMatrix().D3DMatrix);//Identittsmatrix
    m_lpDevice->SetTransform(D3DTS_VIEW, &MatrixOrthogonalView(1024, 768).D3DMatrix);
    m_lpDevice->SetTransform(D3DTS_PROJECTION, &MatrixOrthogonalProjektion(1024, 768).D3DMatrix);

    Vertex Vertices[3];
    Vertices[0].x=100;
    Vertices[0].y=100;
    Vertices[0].z=0.5;
    Vertices[0].Color=0x00ff00ff;
    Vertices[1].x=100;
    Vertices[1].y=200;
    Vertices[1].z=0.5;
    Vertices[1].Color=0x00ffffff;
    Vertices[2].x=200;
    Vertices[2].y=100;
    Vertices[2].z=0.5;
    Vertices[2].Color=0x000000ff;

    m_lpDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 1, Vertices, sizeof(Vertex));
}


CPP:
__forceinline cMatrix MatrixOrthogonalProjektion(float Width, float Height)
{
    return cMatrix(    2.0f/Width, 0.0f, 0.0f, 0.0f,
                    0.0f, 2.0f/Height, 0.0f, 0.0f,
                    0.0f, 0.0f, 1.0f/(1.0f, 0.1f), 0.0f,
                    0.0f, 0.0f, 0.1f/(0.1f-1.0f), 1.0f);
}

__forceinline cMatrix MatrixOrthogonalView(float Width, float Height)
{
    return cMatrix(    1.0f, 0.0f, 0.0f, 0.0f,
                    0.0f, -1.0f, 0.0f, 0.0f,
                    0.0f, 0.0f, 1.0f, 0.0f,
                    -Width*0.5f, Height*0.5f, 0.1f, 1.0f);
}


Also, das Dreieck wir dnur bei RHW angezigt, nicht bei XYZ. Dabei sind die oberen beide Punkte knallrot, und unten der schwarz. Irgendwie hab ich das gefühl das das überhaupt gar nicht zu den angegebenen Farben passen will.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



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

BeitragVerfasst am: 02.11.2005, 18:10    Titel: Antworten mit Zitat

CPP:
if (crossposting)
{
    help = false; // so einfach ist das.
}

_________________
'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
Chriss
Senior JLI'ler



Anmeldedatum: 18.08.2004
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 02.11.2005, 18:18    Titel: Antworten mit Zitat

Auch wenn es mit deinem Problem eventuell nicht viel zu tun hat mal zwei Anmerkungen:


1. m_lpDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
führt dazu das alle Dreiecke gerendert werden, also auch die, welche von der Kamera wegzeigen und eigentlich nicht sichtbar sind.

2.
Vertices[0].Color=0x00ff00ff;
Vertices[1].Color=0x00ffffff;
Vertices[2].Color=0x000000ff;

Der Aufbau der Farbe ist 1Byte Transparentz, 1Byte Rot, 1 Byte Grün, 1Byte Blau. 00 Bedeutet nicht gesetzt und ff bedeutet volle Stärke.
Demnach sind alle 3 Farben zu 100% Transparent
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 02.11.2005, 18:33    Titel: Antworten mit Zitat

ja, das mit dem cullen ist mir kalr, aber im Prinzip soll ja alles gerendert werden, da ich ja 2D Sprites darstellen will und keine 3D-Objekte.
Und wenn ich die Farben im Alphakanal von 00 auf ff setze, ist das komplette Dreieck rot. Irgendwie ist das so obwohl ich das komplett unlogisch finde.
Achja, gerade eben hat das Dreieck mal n bisschen geflimmert, das einmal die Ecke Oben rechts weiß war. Ich versteh echt gar nix mehr.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Dr. Best
Senior JLI'ler


Alter: 34
Anmeldedatum: 17.06.2004
Beiträge: 269
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 02.11.2005, 19:26    Titel: Antworten mit Zitat

Rumgeflacker?
Kein Peil mehr von nix?
Hört sich für mich an als würde da irgendwo in undefinierten Bereichen gelesen.
Edit: Lass doch mal deine Vertex struktur sehen.
vllt hast du da das bool RHW vergessen oder wie das nochgleich heißt.
_________________

Ich bin da, wer noch?


Zuletzt bearbeitet von Dr. Best am 02.11.2005, 19:28, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name MSN Messenger
Chriss
Senior JLI'ler



Anmeldedatum: 18.08.2004
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 02.11.2005, 19:27    Titel: Antworten mit Zitat

Was soll die Zeile:

m_lpDevice->SetRenderState(D3DRS_DITHERENABLE, true);

genau bewirken?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Chriss
Senior JLI'ler



Anmeldedatum: 18.08.2004
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 02.11.2005, 19:31    Titel: Antworten mit Zitat

Ich hab nochmal nachgesehen.
Wenn du das Flag "D3DFVF_XYZRHW" benutzt dann braucht deine Vertex Struktur noch ein float welches den Abstand zur Kamera angibt. Zudem brauchst du keine Matrizen welche da Dreieck transformieren da du mit diesem Flag sagst das die daten nicht transformiert werden sollen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 02.11.2005, 20:11    Titel: Antworten mit Zitat

ja, deswegen gehe ich ja auch davon aus, das die berechneten Matrizen falsch sind, wesewegen ich sie gepostet habe.
CPP:
struct Vertex
{
   float x, y, z;
   DWORD Color;
};

Da kann man nun nicht viel falsch machen. Bei dem Z-Wert war ich mir nciht icher ich hab ihn einfahc mal auf 0.5 gesetzt weil ich sowas wie zwischen 0 und 1 im Kopf hatte. Im Prinzip hab ich das ganze ausm Scherfgenbuch fürs erste Dreieck nachprogrammiert, nur halt in ner Spriteklasse, und Orthogonal. Deswegen hatte ich eignetlihc gehofft, dass ich keien Renderstates oder so vergessen habe, was natürlöich trotzdem sien könnte. An dem Dithering liegt der Fehler auch nciht, ist irgendwie ne Technik die irgendwie Bildqualität verbessert, wenn man wenig Farben benutzt oder so, habs einfach mal dazu gepackt.
Mit dem undefinierten hab ich auch schon mal dran gedacht, ich wüsste aber nciht, was bei meinen Vertices undefiniert sein sollte.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Dr. Best
Senior JLI'ler


Alter: 34
Anmeldedatum: 17.06.2004
Beiträge: 269
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 02.11.2005, 21:34    Titel: Antworten mit Zitat

Also wenn du RHW Koordinaten verwendest muss das Vertexformat glaube ich so aussehen:
Code:
struct Vertex
{
   float x, y, z;
   float RHW;
   DWORD Color;
};

das float in der Mitte setzt man am besten einfach immer auf 1.0f.
Aber wenn du kein RHW sonder orthogonale view matrizen verwendest und auch entsprechend das XYZRHW aus dem FVF rausnimmst dann wüsst ich auch nicht wo da falsches gepointe sein sollte.
_________________

Ich bin da, wer noch?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name MSN Messenger
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 02.11.2005, 21:50    Titel: Antworten mit Zitat

also, diene antwort war bisher die dr. beste. Das erklärt die falschen farben, warum der Alphakanal verrückt spielte und warum es geflimmert hat.
Es funktinoeit jetzt, allerdings kann ich ja jetzt nciht mehr per Matrizen rotieren und skalieren, was ich dann doch schön fände. Dann liegt der fehler wohl eher an den Matrizen.

[edit]
mitlerweile sieht es so aus:
CPP:
void D3DSprite::Render()
{
   m_lpDevice->SetFVF(D3DFVF_XYZW | D3DFVF_DIFFUSE);
   m_lpDevice->SetRenderState(D3DRS_LIGHTING, false);
   m_lpDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW);
   m_lpDevice->SetRenderState(D3DRS_DITHERENABLE, true);
   
   m_lpDevice->SetTransform(D3DTS_WORLD, &MatrixScalation(200, 1).D3DMatrix);//Identittsmatrix
   m_lpDevice->SetTransform(D3DTS_VIEW, &MatrixOrthogonalView(1024, 768).D3DMatrix);
   m_lpDevice->SetTransform(D3DTS_PROJECTION, &MatrixOrthogonalProjektion(1024, 768).D3DMatrix);

   Vertex Vertices[3];
   Vertices[0].x=100;
   Vertices[0].y=100;
   Vertices[0].z=0.5;
   Vertices[0].RHW=1;
   Vertices[0].Color=0x00ff0000;
   Vertices[1].x=100;
   Vertices[1].y=200;
   Vertices[1].z=0.5;
   Vertices[1].RHW=1;
   Vertices[1].Color=0x00ffffff;
   Vertices[2].x=200;
   Vertices[2].y=100;
   Vertices[2].z=0.5;
   Vertices[2].RHW=1;
   Vertices[2].Color=0x000000ff;

   m_lpDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 1, Vertices, sizeof(Vertex));
}

es wird was angezgit, ich habe das RHW in vdie vertexsturktur aufgenommen, es geht jetzt mit XYZRHW. Dann wollte ich die matirzen testen, hab XYZW genommen, allerdings werden die matrizen nciht bachtet, weil, zum beispiel die skalation nicht erfolgt. Warum tun die Matrizen ncihts?
[/edit]
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Dr. Best
Senior JLI'ler


Alter: 34
Anmeldedatum: 17.06.2004
Beiträge: 269
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 02.11.2005, 22:23    Titel: Antworten mit Zitat

Freut mich dass ich dir helfen konnte Wink .
Aber wieso jetzt deine Matrizen nich klappen ist mir auch schleierhaft.
D3DFVF_XYZW ist mir zwar sowieso immer ein bisschen suspekt aber ich seh schon dass du wohl bloß zu faul warst das RHW wieder aus der Vertexstruktur rauszunehmen Laughing .
Hab aber keine Ahnung wieso deine Matrizen net klappen.

BTW schöne Wortschöpfung: Scalation. Hat ja schließlich auch -2 Buchstaben weniger als Scaling nicht wahr Wink .
_________________

Ich bin da, wer noch?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name MSN Messenger
Patrick
Dark JLI Master



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

BeitragVerfasst am: 03.11.2005, 07:10    Titel: Antworten mit Zitat

Ich glaub ich hab vor 4 monaten mal gesagt das man keine RHW Vertices nehmen sollte weil die auf Transformation nicht ansprechen? Weil eine Translation damit unmöglich ist? Was meinste wohl wieso ich auf Untransformierte Vertices so abfahre? Bestimmt nicht aus langeweile.

Du könntest über 30% Code einsparen wenn Du deinen Vertexkram einen Constructor verpasst.

- Patrick, der kein Crossposting betreibt.
_________________
'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: 03.11.2005, 13:55    Titel: Antworten mit Zitat

ja, das RHW nicht das benutzen von Matrizen zur Transformation erlaubt ist mir klar, weil ja eben der Gack daran ist das dies umgangen wird. Deshlab forsche ich ja nun weiter, das ohne RHW hinzubekommen und bis jetzt klappts nur mit XYZW wobei die Matrizen aber anscheinend genauso ignoriert werden.
Ich hab alles ausgetestet, es wird nur das richtige angezeigt mit dem W in der Vertexstruktur und dem XYZRHW bzw. ZXYW.
Achja, und es ist schlicht weg idiotisch jetzt zu versuchen das ganze zu optimeiren in dem man 30% vom Quellcode spart. Solange nichts funktinoet ist jegliche Optimierung sinnlos, vielleicht machst du das ja, wenn du n Fehler hast, erstmal den Quellcode zu optimieren, aber ich wüsste nciht was das bringen sollte. Optimierungen kommen wenn alles so funktinoiert wie es soll, früher nicht.
_________________
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: 03.11.2005, 14:35    Titel: Antworten mit Zitat

Wie wärs, wenn du ganz einfach D3DFVF_XYZ nimmst?
_________________
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: 03.11.2005, 14:56    Titel: Antworten mit Zitat

Jonathan_Klein
Ich hab doch schon damals mit Dir geschimpft das ein Vector nicht für Vertices benutzt werden soll/darf und unschön ist. Also lass diesen XYZW-Kram, Du hast mit W nichts zu tun, fertig. Benutz XYZ und fertig.
_________________
'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 1, 2  Weiter
Seite 1 von 2

 
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