Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 24.07.2004, 15:06 Titel: Kameradrehung |
|
|
Nein ich bin nicht blöd und hab auch schon ein bischen Ahnung von 3D.
Ich möchte jetzt einen Kameraschwenk einbauen. Ich hab eine LookAt und die Kameraposition. Iwe kann ich die Kamera jetzt um eine gewisse Grahtzahl drehen? Also den LookAt um die Kameraposition drehen? _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 24.07.2004, 20:24 Titel: |
|
|
Ist LookAt nicht dieser Vektor, den du am Anfang bei der Initialisierung übergibst?
Kannst du den nicht einfach ändern? Dann sollte man mit Sinus/Kosinus/Tangenz den Winkel berechnen können.
PS: Hast du nicht das Buch? Da steht das eigentlich alles beschrieben. AFAIK geht das auch mit einfacher Grad-Angabe. Wie wenn du ein normales Objekt drehst, erstellst du da eben eine Matrix. _________________ 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 |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 24.07.2004, 22:07 Titel: |
|
|
naja, eine einfache Drehung hab ich ja auch schon gehabt.. Da hatte ich die Kameraposition und die position wo die hinschaut hab ich per Sinus und Cosinus berechnet. Nur jetzt hab ich schon beide Punkte, und muss also den einen um den anderen drehen. Aber ich schau noch mal genauer nach. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 25.07.2004, 10:48 Titel: |
|
|
Ok ich hab also eine Formel gefunden:
Code: |
NewVector.x=(NewVector.x * cosf(m_fIntroCounter))+(NewVector.z(-sinf(m_fIntroCounter)));
|
Fehler: Ausdruck ergibt keine Funktion
NewVector ist eine Klasse mit 3 floats für einen Vector. m_fIntroCounter gibt den Winkel an der sich ahlt immer mal wieder verändert.
Aber was ist daran den jetzt falsch? Ich hab die Formle sehr gewissenhaft in Quelltext umgesetzt. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 26.07.2004, 11:52 Titel: |
|
|
Hast du auch die nötigen Header eingebunden?
Wenn mich nicht alles täuscht, muss man für sin, cos und tan den Header <math> einbinden. _________________ 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 |
|
|
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 27.07.2004, 15:08 Titel: |
|
|
ich hab mir damals diese funktion gebastelt:
Code: |
MLE_API void mleRotateVecAroundPoint(D3DXVECTOR3 vRotPoint, D3DXVECTOR3* vDestPoint, float fAngle, float fOnX, float fOnY, float fOnZ)
{
D3DXVECTOR3 vNewPos;
// richtungsvektor der beiden punkte bestimmen
D3DXVECTOR3 vTemp;
vTemp.x = vDestPoint->x - vRotPoint.x;
vTemp.y = vDestPoint->y - vRotPoint.y;
vTemp.z = vDestPoint->z - vRotPoint.z;
float fCosTheta = cosf(fAngle * MLE_TORAD);
float fSinTheta = sinf(fAngle * MLE_TORAD);
vNewPos.x = (fCosTheta + (1 - fCosTheta) * fOnX * fOnX) * vTemp.x;
vNewPos.x += ((1 - fCosTheta) * fOnX * fOnY - fOnZ * fSinTheta) * vTemp.y;
vNewPos.x += ((1 - fCosTheta) * fOnX * fOnZ + fOnY * fSinTheta) * vTemp.z;
vNewPos.y = ((1 - fCosTheta) * fOnX * fOnY + fOnZ * fSinTheta) * vTemp.x;
vNewPos.y += (fCosTheta + (1 - fCosTheta) * fOnY * fOnY) * vTemp.y;
vNewPos.y += ((1 - fCosTheta) * fOnY * fOnZ - fOnX * fSinTheta) * vTemp.z;
vNewPos.z = ((1 - fCosTheta) * fOnX * fOnZ - fOnY * fSinTheta) * vTemp.x;
vNewPos.z += ((1 - fCosTheta) * fOnY * fOnZ + fOnX * fSinTheta) * vTemp.y;
vNewPos.z += (fCosTheta + (1 - fCosTheta) * fOnZ * fOnZ) * vTemp.z;
vDestPoint->x = vRotPoint.x + vNewPos.x;
vDestPoint->y = vRotPoint.y + vNewPos.y;
vDestPoint->z = vRotPoint.z + vNewPos.z;
}
|
über die floats wird entschieden um welche achse gedreht wird...entweder 0.0 oder 1.0 übergeben. |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 27.07.2004, 15:24 Titel: |
|
|
ok, Problem ghat sich gelöst. Ich hatte in der Formle ien "+" vergessen. Nun geht es. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 27.07.2004, 15:40 Titel: |
|
|
kannst ja dann auch mal deine funktion posten wenn sie fertig ist. dann können wir mal vergleichen und schauen welche besser ist (in bezug auf performance, ...). würd mich interessieren. |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 27.07.2004, 15:43 Titel: |
|
|
meine natürlich:
Code: |
Vector3 NewVector=LookAt-CameraPosition;//Richtungvektor errechnen
//den Richtugnsvektor drehen
float fFactor=3.5f;
NewVector.x=(NewVector.x * cosf(m_fIntroCounter/fFactor*D3DX_PI))+(NewVector.z*(-sinf(m_fIntroCounter/fFactor*D3DX_PI)));
NewVector.z=(NewVector.x*sinf(m_fIntroCounter/fFactor*D3DX_PI))+(NewVector.z*cosf(m_fIntroCounter/fFactor*D3DX_PI));
LookAt=NewVector+CameraPosition;//Und den neuen LookAt mit dem Richtungsvekzotr bestimmen
|
_________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
|