AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Rotation einer Skysphere
Thema durchsuchen
Ansicht
Themen-Optionen

Rotation einer Skysphere

Offene Frage von "AlphaBug"
Ein Thema von AlphaBug · begonnen am 14. Dez 2006 · letzter Beitrag vom 16. Dez 2006
Antwort Antwort
AlphaBug

Registriert seit: 2. Mär 2004
Ort: hinterm Transistor 246 gleich links
46 Beiträge
 
Delphi 6 Enterprise
 
#1

Rotation einer Skysphere

  Alt 14. Dez 2006, 13:22
Hallo.

Ich versuche mich gerade an OpenGL und habe nun folgendes Problem:

Ich habe eine Kugel an den Raumkoordinaten 0,0,0 erstellt und mit einer Textur belegt.
Verschiebungen habe ich keine vorgenommen.
Also befindet sich die Kamera innerhalb der Kugel an den Raumkoordinaten 0,0,0 .

Delphi-Quellcode:
  glBindTexture(GL_TEXTURE_2D, Images[2]);
  vSkySphere := gluNewQuadric;
  gluQuadricDrawStyle(vSkySphere, GLU_FILL);
  gluQuadricNormals(vSkySphere, GLU_SMOOTH);
  gluQuadricTexture(vSkySphere, GL_TRUE);
  gluSphere(vSkySphere, 1.00, 32, 32);
  glClear(GL_DEPTH_BUFFER_BIT);
Diese Kugel soll als Skysphere dienen, also als Himmelskugel.
Um diese Kugel zu rotieren, frage ich die Mauskoordinaten ab,
berechne die Differenzen auf X- und Y-Achse zum Fenster-Zentrum und berechne daraus die Rotation.

Delphi-Quellcode:
  GetCursorPos(MPos);
  A := (MPos.Y - WndCenterPos.Y);
  B := (MPos.X - WndCenterPos.X);
  CurrView.AngleX := CurrView.AngleX + (B * 0.0002);
  CurrView.AngleY := CurrView.AngleY + (A * 0.0002);
Zur Rotation und Darstellung wird dann folgender Code ausgeführt:

Delphi-Quellcode:
  glRotate(CurrView.AngleX, 0.00, 1.00, 0.00);
  glRotate(CurrView.AngleY, 1.00, 0.00, 0.00);
  glBindTexture(GL_TEXTURE_2D, Images[2]);
  vSkySphere := gluNewQuadric;
  gluQuadricDrawStyle(vSkySphere, GLU_FILL);
  gluQuadricNormals(vSkySphere, GLU_SMOOTH);
  gluQuadricTexture(vSkySphere, GL_TRUE);
  gluSphere(vSkySphere, 1.00, 32, 32);
  glClear(GL_DEPTH_BUFFER_BIT);
Nun zu meinem Problem:
Wenn bei der Berechnung der Rotation (s. o.) A oder B Null ist,
rotiert die Kugel korrekt um die X- oder Y-Achse.
Sobald jedoch beide Zahlen ungleich Null sind, also um X- UND Y-Achse rotiert wird,
rotiert die Kugel nicht mehr wie gewünscht.
Befindet sich der Cursor bspw. unten rechts in einem 45°-Winkel, rotiert die Kugel in einer Acht
von der Mitte nach unten rechts, unten links, oben rechts, oben links zurück zur Mitte.

Kann mir jemand sagen sagen was ich da falsch mache.
Delphi 4ever !
  Mit Zitat antworten Zitat
AlphaBug

Registriert seit: 2. Mär 2004
Ort: hinterm Transistor 246 gleich links
46 Beiträge
 
Delphi 6 Enterprise
 
#2

Re: Rotation einer Skysphere

  Alt 16. Dez 2006, 22:33
Ich habe noch mal weiter herumprobiert, und folgendes herausgefunden:

Dieser Code rotiert die Kugel korrekt im 45°-Winkel:

  glRotate(CurrView.AngleX, 1.00, 1.00, 0.00); Dieser dagegen nicht:

Delphi-Quellcode:
  glRotate(CurrView.AngleX, 0.00, 1.00, 0.00);
  glRotate(CurrView.AngleY, 1.00, 0.00, 0.00);
Was ich nun brauche ist eine Möglichkeit die 3 Winkel für eine Rotation um die X-, Y- und Z-Achsen umzuwandeln in einen einzelnen Winkel und einen dazugehörigen Rotationsvektor.

Ich bin bei der Suche nach Lösungen über einige Begriffe wie
Skalarprodukt, Vektorprodukt, Euler-Winkel und Quaternionen gestolpert,
mit denen ich jedoch im Moment nicht viel anfangen kann.

Ihr könnt mir hoffentlich bei diesem Problem helfen,
denn ich sitze mittlerweile schon eine ganze Woche an diesem Problem.
Delphi 4ever !
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz