 |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 08.10.2003, 11:53 Titel: Parent und Childobjekte |
|
|
Hallo,
(vorweg: Objekte == Meshes)
ich hab mal wieder ein Gedankenproblem. Ich moechte gern, wie die Ueberschrift schon sagt, Parent und Childobjekte realisieren. Ich haette das gerne so, dass ich ein "Mutterobjekt" habe und dazu 3-4 Childobjekte, die genau das tun, was die Mutter macht, also direkt verlinkt sind. D.h. wenn die Mutter ausgewaehlt wird, sind automatisch auch alle Childs angewaehlt. Wenn sich die Mutter zu einem Fleck bewegt, tun das auch ale Childs.
Jetzt hab ich schon gegruebelt und gedacht. Meine bisherige Loesung war, dass jedes Objekt beim erstellen eine ID bekommt. Wenn diese ID mit IDs anderer Objekte uebereinstimmt, ist das die Gruppe. Das Problem ist jetzt nur, wie ich dann die Aktionen ausfuehre? ICh durchlaufe immer eine Liste mit allen Objekten meiner Welt. Dann kann ich die IDs abfragen und gut. Nur was dann? Wie selektiere ich jetzt erstmal alle mit der ID? Auch eine Flag setzen, die dann z.B. auf True zeigt? Und das Groeßte Problem - wie kann man die Teile in einer gewissen Formation behalten? Wenn ich jetzt einen Zielpunkt zuweisen wuerde, rennen alle auf den gleichen Punkt zu, so das am Schluß rein optisch nur noch ein Objekt bleibt. Die sollen ja aber nen gewissen Abstand haben zueinander??
Vielen Dank fuer Anregungen und Infos... |
|
Nach oben |
|
 |
Christian Rousselle Site Admin

Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 08.10.2003, 12:00 Titel: |
|
|
Die Meshes sind doch bestimmt Objekte, oder?
Du könntest in der Klasse eine Liste von Children nutzen und eine Append Funktion, die ein Child hinzufügt. Wenn das Parent ausgewählt wird, läufst du durch die Liste und wählst alle Childs. Die Bewegung bekommst du mit Hilfe von MatrixStack sehr einfach hin.
Christian |
|
Nach oben |
|
 |
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 08.10.2003, 12:15 Titel: |
|
|
Hallo,
danke schon mal fuer die Antwort, aber:
Zitat: |
Du könntest in der Klasse eine Liste von Children nutzen und eine Append Funktion, die ein Child hinzufügt. Wenn das Parent ausgewählt wird, läufst du durch die Liste und wählst alle Childs.
|
Die Meshes sind Objekte ja. Aber den Satz, man moege mir verzeihen , verstehe ich nicht so ganz? NAch welchen Kriterien fuege ich die denn in die Liste ein und waehle sie wieder aus? Oder meinst du fuer jedes Objekt eine eigene Childliste?
Und hilf mir: Was ist ein Matrixstack??  |
|
Nach oben |
|
 |
Christian Rousselle Site Admin

Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 08.10.2003, 12:22 Titel: |
|
|
Für jedes Objekte eine eigene Childliste, ist doch vertretbar, oder?
Schau dir mal D3DXCreateMatrixStack() in der DX-Hilfe an. |
|
Nach oben |
|
 |
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 08.10.2003, 12:25 Titel: |
|
|
Hallo,
*g* ja zwischenzeitlich bin ich auf Umwegen nach der Matrix Stack fuendig geworden. Hatte es nur falsch geschrieben
Das mit der Liste. Hmmm.... aber die Sache ist ja, das ich aktiv ja nur ein Objekt anwaehlen kann und ihm alle anderen ja nachrennen sollen. Wenn ich die Liste durchgehe, muesste ich ja aber alle anwaehlen? Oder meinst du den Objekten nur eine Flag verpasen, so dass sie wissen - ab jetzt nachrennen...? |
|
Nach oben |
|
 |
Christian Rousselle Site Admin

Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 08.10.2003, 12:30 Titel: |
|
|
Nein, dass sollte mit dem Matrixstack automatisch gehen. Ich habe das so gelöst, dass ich eine Liste von Childs pro Objekt habe. Die Child speichern nicht die absolute Position, sondern nur ihre Transformation bezogen auf das Parent. Mit dem MatrixStack kannst du dann dafür sorgen, dass die Transformationsmatrixen von oben (parent) bis zu den childs durchmultipliziert werden. Wenn sich das parent bewegt, bewegen sich somt auch automatisch die childs.
C. |
|
Nach oben |
|
 |
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 08.10.2003, 12:42 Titel: |
|
|
Hey das geht ja fast wie im Chat hier
Also du meinst, ich sollte diese Objekte in der Liste nur fuer den Matrix Stack haben? Du hast das benutzt? Ich hab mir das jetzt ein paar Mal durchgelesen, weiß aber eigentlich nicht so recht, was damit anfangen? Wo werden denn diese Matrizen benutzt, oder wie ueberhaupt?
Ich zaehle meine Matrizen nur einmal beim Rendern zusammen. Wie kann ich denn da jetzt sowas einbauen?? |
|
Nach oben |
|
 |
Christian Rousselle Site Admin

Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 08.10.2003, 12:49 Titel: |
|
|
Hallo,
ich mache es so.
Code: |
void CMeshSceneNode::Render(LPD3DXMATRIXSTACK pMatrixStack)
{
std::list<CSceneNode*>::iterator it;
if(pMatrixStack)
{
pMatrixStack->Push();
pMatrixStack->MultMatrixLocal (&m_matNode);
CDirect3D::GetDevice()->SetTransform(D3DTS_WORLD,pMatrixStack->GetTop());
}
else
{
CDirect3D::GetDevice()->SetTransform(D3DTS_WORLD,&m_matNode);
}
if(m_pMesh)
{
m_pMesh->Render();
}
for(it=m_listChildren.begin();it!=m_listChildren.end();it++)
{
(*it)->Render(pMatrixStack);
}
if(pMatrixStack)
{
pMatrixStack->Pop();
}
}
|
Was genau ist dir an dem MatrixStack und der Liste nicht klar?
C. |
|
Nach oben |
|
 |
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 08.10.2003, 13:25 Titel: |
|
|
Ohh ok.. danke Christian. Nur damit niemand sagen kann ich haette Sourcecode verlangt - du hast in freiwillig gepostet
Nein zurueck:
An der Liste.... hmmm. Ich hab das jetzt so verstanden (ganz bildlich visualisiert):
Ich habe ein Objekt A das in die Welt gesetzt wird. Zu diesem Objekt A werden noch drei andere gleichen Typs in die Welt gesetzt, die aber alles das machen, was das Erste auch tut? Damit die Objekte zu A dazugehoeren, wird mit A eine Liste initialisiert in der alle anderen auch drinnen stehen, mit ihrere Initialposition und was eben noch so alles anfaellt? Sehe ich das richtig? Das ist jetzt bildlich gesprochen, da ich es im Code noch nicht verstanden hab, aber egal.
Jetzt kommt der Matrixstack ins Spiel. Eigentlich weiß ich ehrlich gesagt nicht mal genau was der tut, resp. wie er es tut. Ich weiß zwar was die Befehle machen (push, identity ...), aber nicht warum und vor allem wie er dann die Objekte zwar zu einem Ziel fuehrt aber nicht eben genau auf den Zielpunkt?
Zu deutsch: was tut dieser Stack?
BTW: Warum uebergibst du deiner Renderfunktion den Stack?? Wo wird denn der bei dir erzeugt? Im Konstruktor? |
|
Nach oben |
|
 |
Christian Rousselle Site Admin

Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 08.10.2003, 14:17 Titel: |
|
|
Das ein Objekt Kind eines anderen ist macht nur dann Sinn, wenn sie auch eine Beziehung zueinandern haben. Z.b. Bein hängt am Körper, Fuß hängt am Bein usw. Der Körper wäre das Parent, Bein ein Child, Fuß ein Child vom Bein:
Code: |
Körper
|
Bein1, Bein2
| |
Fuß Fuß
|
C. |
|
Nach oben |
|
 |
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 08.10.2003, 14:23 Titel: |
|
|
Hmmm ne. Bei mir sollens keine Koerperteile oder aehnliches sein, sondern Objekte, die zu einer Art "Gruppe" gehoeren. Also meinetwegen eine Gruppe von 3 Raumschiffen, die immer zusammenbleiben und alle das gleiche machen, dennoch einzelne Objekte sind... |
|
Nach oben |
|
 |
Christian Rousselle Site Admin

Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 08.10.2003, 14:30 Titel: |
|
|
Das ein Objekt Kind eines anderen ist macht nur dann Sinn, wenn sie auch eine Beziehung zueinandern haben. Z.b. Bein hängt am Körper, Fuß hängt am Bein usw. Der Körper wäre das Parent, Bein ein Child, Fuß ein Child vom Bein:
Code: |
Körper
|
Bein1, Bein2
| |
Fuß Fuß
|
Wenn du jetzt den Körper bewegst, ist es doch toll, wenn die Beine direkt mikommen, oder?
Der Matrixstack:
Die Koordinaten der Beine werden nicht in Weltkoordinaten sondern lokal zum Körper gespeichert. Der Matrixstack sorgt jetzt dafür, dass die Matrizen richtig gesetzt werden. Angenommen der Körper hat die Koordinaten 0,0,0 das Bein 1,1,0, der Character soll an Position 5,0,5 in der Welt angezeigt werden.
Beim ersten Aufruf von Render mit der Matrix die angibt, wo sich der Körper in der Welt befinden soll. Dann wird die lokale Matrix des Körpers mit der obersten im Matrixstack multipliziert. Damit hat der Körper die richtige Position in der Welt (5,0,5). Die ursprüngliche Matrix wird (vorher) auf den Stack gepusht. Danach kommt das Bein an die Reihe, die Matrix wird wieder gepusht und die lokale Matrix wird multipliziert, Bein ist dann an Position (6,1,5). Dann kommt der Fuß.... Danach geht es wieder hoch bis zum nächsten Bein und die Matrixen werden wieder gepopt.
Christian
Christian
C. |
|
Nach oben |
|
 |
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 08.10.2003, 14:44 Titel: |
|
|
Aha... das heißt also, dass es mit mehreren einzelnen Objekten, die eben alle zusammen was amchen mueesen das auch geht, oder?? |
|
Nach oben |
|
 |
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 08.10.2003, 14:51 Titel: |
|
|
Du kannst ja in jedem child einen zeiger auf das mutter objekt speichern.
Die childs fragen dann, wo sich das mutter-objekt gerade befindet und nähern sich, bis sie einen bestimmten mindest-abstand zur mutter erreicht haben.
Damit die child objekte nicht alle auf einem haufen stehen kannst du ja noch
einen bereich um jedes child objekt definieren, indem sich kein anderes aufhalten darf. |
|
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
|