JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Wieder mal Kamera...tut leid
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 15.12.2003, 13:25    Titel: Wieder mal Kamera...tut leid Antworten mit Zitat

jo, tut mir echt leid, aber ich checks echt noch nicht so mit den ganzen berechnungen im 3D raum...also:
in einem editorfenster soll sich die kamera immer um den nullpunkt rotieren lassen (später kann man dann obekte als LookAt vector auswählen). drum brauch ich eine funktion, die mir einen vector(camera pos.) um einen anderen positionsvektor(pos. des objekts=LookAt der camera) kreisförmig um bestimmte winkel dreht. soweit, so gut...
jetzt hab ich mir mal folgendes gebastelt, was aber nicht ganz stimmen dürfte (ist mal auf rotation um y beschränkt):
Code:

mleRotateVecInCircle(D3DXVECTOR3 vRotPoint, D3DXVECTOR3* vDestPoint, float fAngle1)
{
   // richtungsvektor der beiden punkte bestimmen
   D3DXVECTOR3 vTemp;
   vTemp.x = vRotPoint.x - vDestPoint->x;
   vTemp.y = vRotPoint.y - vDestPoint->y;
   vTemp.z = vRotPoint.z - vDestPoint->z;
   // radius berechnen (länge des richtungsvektors)
   float fRad = sqrt(vTemp.x * vTemp.x + vTemp.y * vTemp.y + vTemp.z * vTemp.z);

   // neue position berechnen
   vDestPoint->x += vRotPoint.x + cosf(fAngle1) * fRad;
   vDestPoint->z += vRotPoint.z + sinf(fAngle1) * fRad;
}

bin wie immer für jede hilfe dankbar!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 15.12.2003, 15:03    Titel: Antworten mit Zitat

vDestPoint->x = vRotPoint.x + cosf(fAngle1) * fRad;
vDestPoint->z = vRotPoint.z + sinf(fAngle1) * fRad;

Sonst sieht die Funktion recht gut aus.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 15.12.2003, 15:10    Titel: Antworten mit Zitat

kann trotzdem nicht stimmen, wenn:
vCamPos = 20, 0, 0;
fAngle = 90;

müßte sie eigentlich auf 0, 0, 20 stehen, rauskommen tut aber -17, 0, -9, oder so ein mist...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 15.12.2003, 16:16    Titel: Antworten mit Zitat

hehe der rechnet ja auch mit Rad und nicht mir Grad.

Du musst deinen Winkel erst umwandeln:

360°=2PI
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 16.12.2003, 00:01    Titel: Antworten mit Zitat

ach du kacke, das ist mir ja vollkommen entfallen...

edit: ok, und wie übertrage ich das jetzt auf eine kugel, sodass ich um x auch rotieren kann?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 16.12.2003, 02:42    Titel: Antworten mit Zitat

so funktioniert das fast, nur wird die kamera ab einer rotation auf x um +-90 grad 'geflipt':
Code:

   vDestPoint->x = vRotPoint.x + cosf(fAngle1 * MLE_TORAD) * sinf(fAngle2 * MLE_TORAD) * fRad;
   vDestPoint->y = vRotPoint.y + cosf(fAngle2 * MLE_TORAD) * fRad;
   vDestPoint->z = vRotPoint.z + sinf(fAngle1 * MLE_TORAD) * sinf(fAngle2 * MLE_TORAD) * fRad;


ich hab im netz noch ein paar andere beispiele gefunden, die aber auch alle ihre macken haben...
Code:

void CVector::Circle(CVector& vDestination, float fRotX, float fRotY, float fRotZ)
{
   CVector vTemp = (*this - vDestination);

   if(fRotX != 0.0f)
   {
      fZ = (float)(vDestination.fZ + sinf(fRotX)*vTemp.fY + cos(fRotX)*vTemp.fZ);
      fY = (float)(vDestination.fY + cosf(fRotX)*vTemp.fY - sin(fRotX)*vTemp.fZ);
   }
   if(fRotY != 0.0f)
   {
      fZ = (float)(vDestination.fZ + sin(fRotY)*vTemp.fX + cos(fRotY)*vTemp.fZ);
      fX = (float)(vDestination.fX + cos(fRotY)*vTemp.fX - sin(fRotY)*vTemp.fZ);
   }
   if(fRotZ != 0.0f)
   {
      fX = (float)(vDestination.fX + sin(fRotZ)*vTemp.fY + cos(fRotZ)*vTemp.fX);      
      fY = (float)(vDestination.fY + cos(fRotZ)*vTemp.fY - sin(fRotZ)*vTemp.fX);
   }
}

Code:

r = sqrt(x*x + y*y + z*z);

x=r * sin(winkel1) *cos(winkel2);
y=r * sin(winkel1) * sin(winkel2);
z=r * cos(winkel1);

Code:

camerax = radius * sin( deltay ) * cos( deltax )
cameray = radius * cos( deltay )
cameraz = radius * sin( deltay ) * sin( deltax )


HILFE!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 16.12.2003, 10:26    Titel: Antworten mit Zitat

Was genau meinst du mit geflippt ? Das die Kamera auf den Kopf steht, oer was ? Da musst du dann noch UpVector der Kamera anpassen. Wie das geht würde ich auch gerne wissen.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 16.12.2003, 11:21    Titel: Antworten mit Zitat

geflippt ist vielleicht der falsche ausdruck...
wenn ich die kamera jetzt um x rotiere, geht die rotation bei 90 grad in eine rotation um y über, bis sie um 180 grad gedreht ist, dann rotiert sie um x wieder zurück. das ist glaub ich eh ein recht häufiges problem, ich hatte sowas jetzt jedenfalls schon öfter, wenn ich mit sin und cos arbeite...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 16.12.2003, 11:22    Titel: Antworten mit Zitat

Kannst du mir mal das Beispiel senden damit ich mir das besser vorstellen kann ?
FallenAngel84@web.de
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 16.12.2003, 11:25    Titel: Antworten mit Zitat

das is ein bißchen schwierig, wegen dll, usw...oder willst du nur die exe?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 16.12.2003, 11:26    Titel: Antworten mit Zitat

Am besten so das es bei mir läuft.

Kann aber daran liegen das die Formel die du nutzt nicht ganz ausgereift ist. Mal schauen ob ich da was besseres habe.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 16.12.2003, 11:29    Titel: Antworten mit Zitat

ok, ich schick dir mal eine kompilierte version mit relevanten codeteilen, muß nur noch ein paar sachen anpassen...danke dir!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 16.12.2003, 12:19    Titel: Antworten mit Zitat

Ok das Problem kenne ich auch. Und das scheint zum grossen Teil an den Winkelfunktionen zu liegen, aber auch am UpVector. Werde mal nach ner Lösung suchen.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 16.12.2003, 12:28    Titel: Antworten mit Zitat

jup, das denke ich auch...den Up vector anzupassen sollte nicht so schwer sein, werd das bei gelegenheit mal ausprobieren. glaub aber nicht, das es viel bringt...soweit ich das verstanden haben, sollte man möglichst quaternions verwenden, nur blick ich da gar nicht mehr durch...

btw., du hast nicht zufällig ne funktion um zu checken,ob sich 2 linien schneiden?
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: 16.12.2003, 12:36    Titel: Antworten mit Zitat

Chewie hat Folgendes geschrieben:
btw., du hast nicht zufällig ne funktion um zu checken,ob sich 2 linien schneiden?

Zitat:
f(x)=mx+c
Schnittpunkt:
m1*x+c1=m2*x+c2

Diese Gleichung müsste man dann noch nach x auflösen. Wenn sie eine Lösung hat, ist diese der Schnittpunkt.

PS: Wenn du das ganze im 3-Dimansionalen Raum haben willst, musst du einfach zwei Projektionen der Linien überprüfen.
Bzw. einmal die beiden Linien von vorne und einmal von rechts/links.
So bekommst du dann auch noch(falls vorhanden) die Z-Koordinate des Schnittpunkts heraus Wink
_________________
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
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
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