Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 15.12.2003, 13:25 Titel: Wieder mal Kamera...tut leid |
|
|
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 |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 15.12.2003, 15:03 Titel: |
|
|
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 |
|
|
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 15.12.2003, 15:10 Titel: |
|
|
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 |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 15.12.2003, 16:16 Titel: |
|
|
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 |
|
|
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 16.12.2003, 00:01 Titel: |
|
|
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 |
|
|
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 16.12.2003, 02:42 Titel: |
|
|
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 |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 16.12.2003, 10:26 Titel: |
|
|
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 |
|
|
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 16.12.2003, 11:21 Titel: |
|
|
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 |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 16.12.2003, 11:22 Titel: |
|
|
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 |
|
|
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 16.12.2003, 11:25 Titel: |
|
|
das is ein bißchen schwierig, wegen dll, usw...oder willst du nur die exe? |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 16.12.2003, 11:26 Titel: |
|
|
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 |
|
|
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 16.12.2003, 11:29 Titel: |
|
|
ok, ich schick dir mal eine kompilierte version mit relevanten codeteilen, muß nur noch ein paar sachen anpassen...danke dir!! |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 16.12.2003, 12:19 Titel: |
|
|
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 |
|
|
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 16.12.2003, 12:28 Titel: |
|
|
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 |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 16.12.2003, 12:36 Titel: |
|
|
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 _________________ 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 |
|
|
|