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: 05.08.2003, 20:02 Titel: Ich gebs auf mit meinen dusseligen Modellen ;) |
|
|
Sorry, ich hatte das Thema schon mal, nur hat sich die Problematik leicht gewandelt, weshalb ich es neu aufrolle. Ich kann nicht glauben, dass niemand dieses Problem, hat, je hatte oder je haben wird
Wie stellt ihr denn zu einem beliebigen Zeitpunkt die Position eurer Modelle fest? Mit Christians SetPosition-Methode gehts anscheinend nicht oder doch?
Ich will immer noch zwei Meshes unabhaengig voneinander bewegen (fluessig bewegen). Ich habe alles durch. Bis hin zum Vektor habe ich jetzt alles korrigiert, was mir einfaellt.
Ich lege mal das Bild hier bei:
Rot ist das Mesh, blau ist das Ziel. S3 ist ja recht einfach zu berechnen mit der Vektoraddition von s1 und s2 (der Mauszielvektor).
Wenn ich den Mesh bewegen will, muss ich die Position des Meshes JETZT mit dem Endvektor * Speed verrechnen. Aber ich habe diese Position des roten Punktes nicht. Wie soll ich das loesen? Wirklich keiner ne Idee? Ich kann doch nicht jedesmal einen Kollisionstest mit dem Untergrund machen, wenn ich ein Mesh klicke, zumal ich das ohne die relative Position des Meshes auch nicht machen kann (siehe D3DXPlaneIntersect ...).
Please ... help ) |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 05.08.2003, 20:05 Titel: |
|
|
Wieso hast du denn die Position des Meshes nicht? |
|
Nach oben |
|
|
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 05.08.2003, 21:17 Titel: |
|
|
Es muss was dran sein an der Frage. Die hoere ich nicht zum ersten Mal
Langsam glaube ich, liegt mein Problem im Verstaendniss der Ursprungsposition? Ich habe ja nur einmal die Position des Meshes richtig definiert am Anfang des "Ladevorgangs" (also SetPosition(...) meinetwegen). Aber dann?
Ich habe den Zeiger auf das Mesh aber nicht die Positionsdaten? Ich habe keine Ahnung, wie ich die bekommen soll? Oder wo werden die denn "abgelegt"?
In deinem Pick-Beispiel. Wo kannst du denn dort die Meshpositionen jederzeit abfragen? |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 05.08.2003, 21:22 Titel: |
|
|
Du kannst doch einfach drei globale Variablen anlegen. Dann hast du ne Ausgangsposition und mit der initialisierst du diese dann. Immer wenn du es bewegen willst, dann änderst du auch diese drei Variablen. _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 05.08.2003, 22:37 Titel: |
|
|
Je nachdem mit welcher Version du arbeitest, sthet die Position in m_vPosition oder in m_WorldMatrix. Du muss dir nur eine Methode schreiben, die die Werte zurückkgibt.
C. |
|
Nach oben |
|
|
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 06.08.2003, 10:44 Titel: Hmmm |
|
|
Danke Lord. Aber das geht nicht so einfach. Allerdings in Kombination mit Christians Vorschlag sollte es gehen.
Christian. Danke... in m_vPosition liegts nicht, daran dachte ich auch, aber das bleibt bei 0. Also wirds wohl in der WorldMatrix sein, woran ich nie gedacht haette...
Ich probiers mal. Weiß ja wo ich hingehen kann |
|
Nach oben |
|
|
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 06.08.2003, 12:31 Titel: |
|
|
Ne laeuft auch nicht so wie soll. Ich weiß offengestanden auch nicht, was ich damit anfangen soll.
Ich habs nu so:
Code: |
Objekt->GetMatrix();
(??)
|
Wobei D3DXMATRIX* GetMatrix() die WorldMatrix zurueckgibt pro Objekt. Aber das hilft mir ja auch nicht weiter? Es fehlen immer noch der X und Z Wert des Objekts. |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 06.08.2003, 12:37 Titel: |
|
|
Das GetMatrix ist eine Methode die du geschrieben hast? Eine GetPosition() wäre einfacher. Die x,y und z Koordinate sind bestandteil der Matrix des Objekts. Guck doch mal in die Methode SetPosition, da kannst du erkennen, wo diese Werte stehen. |
|
Nach oben |
|
|
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 06.08.2003, 13:06 Titel: |
|
|
Ja die GetMatrix war von mir. Auch habe ich schon mal GetPosition probiert.
Nur sind diese Variablen immer 0. Das heißt also nutzlos.
Code: |
D3DXVECTOR3 ...::GetMeshPosition()
{
return m_vPosition;
}
Und dann im Aufruf:
Objekt->GetMeshPosition();
|
Das sollte doch korrekt sein, oder? Ist bei mir aber wie gesagt immer 0? |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 06.08.2003, 13:53 Titel: |
|
|
Natürlich ist m_vPosition immer 0, wenn diese Variable nicht verwendet wird. Die WorldMatrix des Models (sollte man besser als ModelToWorld Matrix bezeichnen enthält die x,y,z Koordinate des Models in m_WorldMatrix._41, m_WorldMatrix._42, m_WorldMatrix._43.
Code: |
// Position des Objekts setzen
void C3DObject::SetPosition(D3DXVECTOR3 vPos)
{
m_WorldMatrix._41 = vPos.x;
m_WorldMatrix._42 = vPos.y;
m_WorldMatrix._43 = vPos.z;
}
D3DXVECTOR3 C3DObject::GetPosition(void)
{
D3DXVECTOR3 vPos;
vPos.x = m_WorldMatrix._41;
vPos.y = m_WorldMatrix._42;
vPos.z = m_WorldMatrix._43;
return vPos;
}
|
Christian |
|
Nach oben |
|
|
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 06.08.2003, 14:01 Titel: |
|
|
Hmm,
aber m_vPosition wird doch benutzt?
Bei mir ist es so:
Code: |
stark gekuerzt ;)
SetPosition(vPos)
{
m_vPosition = vPos;
}
|
Und beim Rendern wird die TranslationsMatrix mit dem Vektor m_vPosition kombiniert. Also sollte er doch nicht leer sein?
Ist jetzt eher ne reine Verstaendnissfrage |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 06.08.2003, 14:07 Titel: |
|
|
Wie gesagt, es kommt drauf an, welche Version du von dem Pickingsample zu grunde legst. Nimm lieber alles was mit m_vPosition zu tun hat raus, so dass du nur noch mit m_Woldmatrix arbeitest. Das verwirrt dich dann vielleicht auch nicht so sehr. |
|
Nach oben |
|
|
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 06.08.2003, 19:32 Titel: |
|
|
Ich habe das oben jetzt mal in etwa so probiert. In etwa deswegen, weil wenn ich bei SetPosition die WorldMatrix nehme, sehe ich gar nichts mehr von meiner Welt.
Also hab ich nur GetPosition damit benutzt. Das Problem ist, dass anscheinend manches Stimmt, aber manches auch nicht. Es entstehen seltsame Zahlengebilde, sowie anfangs immer die selbe Kombination pro Objekt (also 10, 10 oder 0,0 usw.). Hat das Sinn? Wieso passiert das bei mir, wenn ich oben die WorldMatrix nutze? Ich denke irgendetwas verstehe ich an den Matrizen nicht.
Vor allem:
Warum ist der selbe Punkt einmal meinetwegen -10, 6 und ein zweites Mal, -4, 23 ?? Um Aufklaerung waere ich dankbar... |
|
Nach oben |
|
|
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 07.08.2003, 12:09 Titel: |
|
|
Hallo,
es bleibt leider trotzdem beim gleichen Problem. Zwar bewegt sich das Vieh jetzt auf korrekten Pfaden, aber es laeuft dem anderen Mesh, was vorher bewegt wurde immer noch hinter her.
Das ist natuerlich auch klar warum, nur weiß ich nicht, wie ich das beseitigen soll.
Code: |
void CScene::ClickGround()
{
if(terrain->MHitTest(&v, &ViewMatrix, &HitVec))
{
if(m_lpCurPicked != NULL)
{
vGoto = HitVec - ObjektXYZ;
//D3DXVec3Normalize (&vGoto, &vGoto);
ObjektXYZ += vGoto * moveSpeed;
m_lpCurPicked->SetMeshPosition(D3DXVECTOR3(ObjektXYZ.x, -10.0 , ObjektXYZ.z));
}
}
}
|
Also wie gesagt, ist es klar, dass es dem vorher bewegtem Mesh hinterher rennt. Die erste "if"-Funktion bleibt ja nach dem ersten Mal immer erfuellt. HitVec kann ich auch nicht einfach auf 0 setzen, weil es dann ja auch 0 rennt. Also muesste ich, wenn ich alles richtig ueberlegt habe, die erste if-Schleife immer auf "Nicht erfuellt setzen" nach einem Durchlauf.
Aber das geht nicht. Wie mache ich das denn?
In der eigentlichen Funktion (also MHitTest) kann ich die Bedingung zwar auf False setzen, aber das bringt nichts.
Ach so... Damit sich die Objekte bewegen, rufe ich diese Funktion natuerlich jedes Bild auf?! |
|
Nach oben |
|
|
|