JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Ich gebs auf mit meinen dusseligen Modellen ;)

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
X-FILE
Super JLI'ler



Anmeldedatum: 12.07.2003
Beiträge: 349

Medaillen: Keine

BeitragVerfasst am: 05.08.2003, 20:02    Titel: Ich gebs auf mit meinen dusseligen Modellen ;) Antworten mit Zitat

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 Wink

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 Wink)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 05.08.2003, 20:05    Titel: Antworten mit Zitat

Wieso hast du denn die Position des Meshes nicht?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
X-FILE
Super JLI'ler



Anmeldedatum: 12.07.2003
Beiträge: 349

Medaillen: Keine

BeitragVerfasst am: 05.08.2003, 21:17    Titel: Antworten mit Zitat

Es muss was dran sein an der Frage. Die hoere ich nicht zum ersten Mal Wink

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
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 05.08.2003, 21:22    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 05.08.2003, 22:37    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
X-FILE
Super JLI'ler



Anmeldedatum: 12.07.2003
Beiträge: 349

Medaillen: Keine

BeitragVerfasst am: 06.08.2003, 10:44    Titel: Hmmm Antworten mit Zitat

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 Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
X-FILE
Super JLI'ler



Anmeldedatum: 12.07.2003
Beiträge: 349

Medaillen: Keine

BeitragVerfasst am: 06.08.2003, 12:31    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 06.08.2003, 12:37    Titel: Antworten mit Zitat

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. Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
X-FILE
Super JLI'ler



Anmeldedatum: 12.07.2003
Beiträge: 349

Medaillen: Keine

BeitragVerfasst am: 06.08.2003, 13:06    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 06.08.2003, 13:53    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
X-FILE
Super JLI'ler



Anmeldedatum: 12.07.2003
Beiträge: 349

Medaillen: Keine

BeitragVerfasst am: 06.08.2003, 14:01    Titel: Antworten mit Zitat

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 Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 06.08.2003, 14:07    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
X-FILE
Super JLI'ler



Anmeldedatum: 12.07.2003
Beiträge: 349

Medaillen: Keine

BeitragVerfasst am: 06.08.2003, 19:32    Titel: Antworten mit Zitat

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 ?? Wink Um Aufklaerung waere ich dankbar...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
X-FILE
Super JLI'ler



Anmeldedatum: 12.07.2003
Beiträge: 349

Medaillen: Keine

BeitragVerfasst am: 07.08.2003, 12:09    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
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