 |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Verwendet ihr ID3DSprite Klasse? |
Ja, weil sehr schnell, bewährt und funktional |
|
0% |
[ 0 ] |
Ja, weil selbst machen zu schwer/zeitaufwändig |
|
7% |
[ 1 ] |
Nein, weil zu langsam/zu wenig Funktionen |
|
46% |
[ 6 ] |
Nein, weil ich es einfach selber umsetzen wollte |
|
46% |
[ 6 ] |
|
Stimmen insgesamt : 13 |
|
Autor |
Nachricht |
Tiberius Mini JLI'ler
Anmeldedatum: 17.05.2006 Beiträge: 6
Medaillen: Keine
|
Verfasst am: 05.06.2006, 23:31 Titel: |
|
|
tja, ich hab mein Glück jetzt erstmal mit den guten d3dx sprites versucht und bereue es langsam sogar... war zwar anfang alles toll und finde auch die performance gut, aber...
wie rotiere ich die? Wenn ich es mit
CPP: | D3DXMatrixRotationZ ( &l_oRotMatrix, 0.5f );
m_pSprite->SetTransform( &l_oRotMatrix );
|
versuche, verschwinden die Sprites... ich kriege sie zwar wieder hingerückt, wenn ich auch noch eine translations matrix dazu mache, aber eigentlich ist die ja shcon im draw aufruf von den Sprites mit drin, oder warum gibt man da eine Position an?
Und mein zweites problem ist, ich hab eigenltich nur ein sprite objekt was alle texturen zeichnet, aber das ist fürs rotieren natürlich auch wieder doof, weil dann alle gedreht werden und nicht nur eins... wenn ich jedoch mehre sprite objekte habe, kriege ich die nicht in der richtigen reihenfolge gezeichnet, weil ich dann nicht weiß wann ich flushen soll und ich nicht nach jedem einzelnen sprite flushen will...
Hilfe wäre echt seehr klasse, sowohl ich etwas unter zeitdruck bin (ist eine teamarbeit) und ich daher ungerne alles nochmal von vorne (ohne d3dx sprites) machen will... |
|
Nach oben |
|
 |
DirectXer Dark JLI'ler

Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 06.06.2006, 00:58 Titel: |
|
|
also, die worldmatrix musst du immer wieder neu setzen. Zuerst kommen bei DX wie auch in der Mathematik die Operationen im lokalen Raum, nämich:
Skalierung und Rotation
Dann, nachdem du dein Objekt in seinem eigenen, lokalen Koordinatensystem transformiert hast, musst du es verschieben, also die Translation. Da du Skalierung und Rotation vor Translation machst, sind die lokalen Achsen gleich der globalen Achsen, d.h. es ist im Grunde keine Transformation um die lokalen Achsen sondern um die globalen, wo sich den Sprite im Ursprung (0,0,0) befindet. Nachdem du es im Ursprung transformiert hast, musst du es von da aus an seine absolute Position im Worldspace verschieben. Kleines PseudoBeispiel nach der grauen Theorie:
CPP: | matScale = scale(...); // Skalieren, im Ursprung
matRot = rotate(...); // Rotieren, im Ursprung
matTrans = translate(...); // nach allem, an absolute Pos. verschieben
// alle Matrizen in der Reihenfolge, wie sie uaf das Obj. angewendet
// werden sollen, miteinander multiplizieren
worldMatrix = matScale * matRot * matTrans;
// und für das nächste Obj. als Welttransformationsmatrix setzen
sprite->SetTransform(D3DTS_WORLD, &worldMatrix);
|
btw: würdest du die Translationsmatrix vorher in die Multiplikation einbauen, würden sich die Sprites um die globalen Achsen an ihrer absoluten Position drehen, was norm. unerwünscht ist. Aber auch hier gibt es ausnahmen...
Gruß DXer  |
|
Nach oben |
|
 |
GreveN JLI Master

Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 06.06.2006, 09:10 Titel: |
|
|
DirectXer hat es soweit ganz gut auf den Punkt gebracht, ich würde dir unbedingt empfehlen, dich in Ruhe darein zu fuchsen, weil es ganz schön wichtig ist, verstanden zu haben, was da eigentlich genau passiert, gerade wenn du ohne D3DX oder andere Hilfs-Libraries coden willst. Am besten du "spielst" mal ein bisschen mit den Matrizen herum. |
|
Nach oben |
|
 |
Tiberius Mini JLI'ler
Anmeldedatum: 17.05.2006 Beiträge: 6
Medaillen: Keine
|
Verfasst am: 13.06.2006, 20:52 Titel: |
|
|
sorry, für die späte antwort, danke erstmal für eure replies. Habs jetzt hinbekommen, lasse den Positions vector bei sprite.draw() einfach weg... der zerhaut sonst alles und setzt die translation selber mit hilfe von matrizen.
Bin jetzt schon beim nächsten schritt schrift mit dem d3dxfont-teilchen zu erstellen, hänge hier gerade ein bisschen bei der überlegung wie ich die texte die ausgegeben werden sollen, speichern soll (ich kriege sie ja an irgendeiner stelle im programm und rendere sie erst wenn text.render aufgerufen wird. Ich will eigentlich dann nciht jedesmal mit new ein neues Textarray erzeugen, weil ich versuche so wenig wie möglich news zur runtime auszuführen... versuche daher das ganze mit einem vorher festgelegten array an char[128] zu lösen... allerdings komme ich zur zeit noch mit dem ganzen einfügen und löschen von beliebigen strings etwas durcheinander... Ich hoffe mal ich kriegs hin. ansonsten bin ich wieder mal für tipps sehr dankbar (auch wenn ich befürchte dass der thread titel bald nciht mehr passen könnte)
Naja, danke auf jedenfall nochmal =) |
|
Nach oben |
|
 |
GreveN JLI Master

Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 13.06.2006, 21:00 Titel: |
|
|
'std::string' heißt die Zauberlösung. 8)
CPP: | #include <string>
...
std::string str = "blablablubb";
str += "lalalalu";
str[2] = 'a';
char* c_string = str.c_str(); |
Wie du siehst, sehr flexibel, sehr mächtig, sehr toll das Teil, sollte eigentlich nur benutzt werden, besitzt auch noch eine ganze Menge mehr Methoden und Operatoren, am besten mal in eine Referenz schauen, sollte man auf jeden Fall beherrschen. Vollen Unicode gibt's netterweise auch gleich frei Haus mittels 'std::basic_string<wchar_t>' oder alternativ dem zugehörigem typedef: 'std::wstring'. |
|
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
|