|
JLI Spieleprogrammierung
|
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
|
Verfasst am: 02.11.2005, 17:41 Titel: D3D-2DSpriteklasse will net |
|
|
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 |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
|
Chriss Senior JLI'ler
Anmeldedatum: 18.08.2004 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 02.11.2005, 18:18 Titel: |
|
|
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 |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 02.11.2005, 18:33 Titel: |
|
|
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 |
|
|
Dr. Best Senior JLI'ler
Alter: 34 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 02.11.2005, 19:26 Titel: |
|
|
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 |
|
|
Chriss Senior JLI'ler
Anmeldedatum: 18.08.2004 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 02.11.2005, 19:27 Titel: |
|
|
Was soll die Zeile:
m_lpDevice->SetRenderState(D3DRS_DITHERENABLE, true);
genau bewirken? |
|
Nach oben |
|
|
Chriss Senior JLI'ler
Anmeldedatum: 18.08.2004 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 02.11.2005, 19:31 Titel: |
|
|
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 |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 02.11.2005, 20:11 Titel: |
|
|
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 |
|
|
Dr. Best Senior JLI'ler
Alter: 34 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 02.11.2005, 21:34 Titel: |
|
|
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 |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 02.11.2005, 21:50 Titel: |
|
|
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 |
|
|
Dr. Best Senior JLI'ler
Alter: 34 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 02.11.2005, 22:23 Titel: |
|
|
Freut mich dass ich dir helfen konnte .
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 .
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 . _________________
Ich bin da, wer noch? |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 03.11.2005, 07:10 Titel: |
|
|
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 |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 03.11.2005, 13:55 Titel: |
|
|
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 |
|
|
OLiver Super JLI'ler
Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 03.11.2005, 14:35 Titel: |
|
|
Wie wärs, wenn du ganz einfach D3DFVF_XYZ nimmst? _________________ 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: 03.11.2005, 14:56 Titel: |
|
|
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 |
|
|
|
|
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
|