Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 23:00

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Rotation von Zahlen
BeitragVerfasst: Fr Dez 01, 2006 09:08 
Offline
DGL Member

Registriert: Di Nov 21, 2006 08:57
Beiträge: 7
Wohnort: Berlin
Hallo,

Ich möchte eine Scheibe rotieren, auf der am Rande Zahlen
sind, nur das die Zahlen ihre senkrechte-lesbare Position
beibehalten sollen. Das gelingt mir zwar schon, indem ich
die Zahlen vorher auf Ihren Ursprung zurückführe, dann
entgegengesetzt rotiere und wieder an den Ort auf der Scheibe
schiebe, aber vielleicht gibt's da eine Einfache Function oder
Verfahrensweise, die nicht so viel Performance kostet?


Vielen Dank für's reinschauen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 01, 2006 10:02 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jun 20, 2003 13:59
Beiträge: 134
hi,
mmh mal sehen
du zeichnest eine scheibe und drehst ("rotationswinkel") die dann, richtig?
danach zeichnest du zahlen die "an der scheibe locker hängen soll", richtig?
die zahlen befinden sich an bei einem bestimmten winkel ("positionswinkel") an der scheibe, richtig?

also dann könntest du die scheibe zwischen glpushmatrix() und glpopmatrix() drehen und zeichnen und danach die position der zahlen berechnen
ich geh mal davon aus das 0° oben in der mitte der scheibe sind:
X= sin(degtorad(rotationswinkel+positionswinkel))*radius;
Y= cos(degtorad(rotationswinkel+positionswinkel))*radius;

ich hoffe mal
1. das deine frage richtig verstanden habe,
2. das ich dir irgendwie helfen konnte.

_________________
ghost-site.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 01, 2006 11:28 
Offline
DGL Member

Registriert: Di Nov 21, 2006 08:57
Beiträge: 7
Wohnort: Berlin
Danke für die Antwort, alles richtig erkannt. Werde Deine Vorschalg ausprobieren.
Kann mir aber vorstellen, das die Berrechnungen Performance kosten.

Also was ich bisher habe:


Code:
  1.  
  2.  
  3. ...
  4.  
  5. glRotatef(0.0f+ROTATE,0.0f,0.0f,1.0f);  // Drehung Scheibe
  6.  
  7. //... Scheibe zeichnen
  8.  
  9. GLfloat x_korrect = -0.055f; //Zahlen in der Mitte drehen
  10. GLfloat y_korrect = -0.036f;
  11.  
  12. glPushMatrix();
  13.  
  14. //von der Scheibenposition zum Ursprung u. wieder zurück,
  15. //Korrektur Eckpunkt Zahlenbitmap zur Mitte
  16. glTranslatef(-0.053f-x_korrect, 0.581f-y_korrect,0.0f);
  17. glRotatef(0.0f-ROTATE,0.0f,0.0f,1.0f);
  18. glTranslatef(0.053f+x_korrect, -0.581f+y_korrect,0.0f);
  19. //selbstdefinierte Bitmap-Zahlen
  20. ShowText("00", weiss, 0.9, -0.053f, 0.581f, -0.4); //Zahlenposition schon ermittelt
  21. glPopMatrix();
  22.  
  23.  
  24. glPushMatrix();
  25.  
  26. glTranslatef( 0.249f-x_korrect, 0.501f-y_korrect,0.0f);
  27. glRotatef(0.0f-ROTATE,0.0f,0.0f,1.0f);
  28. glTranslatef(-0.249f+x_korrect, -0.501f+y_korrect,0.0f);
  29. ShowText("03", weiss, 0.9, 0.249f, 0.501f, -0.4);
  30.  
  31. glPopMatrix(); .....//usw. für alle Zahlen
  32.  
  33. glLoadIdentity();
  34.  
  35.  


Was wäre jetzt rein rechentechnisch besser (schneller) ?
Ich könnts sicher irgendwie messen, aber vielleicht gibt's da
schon Erfahrungswerte.

Viele Grüsse Tom.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 01, 2006 12:02 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jun 20, 2003 13:59
Beiträge: 134
die antwort liegt jetzt aber mal auf der hand:

was ist nun schneller? für jede zahl die du zeichnest die modelviewmatrix auf den stack schreiben, einpaar matrixtransformationen machen und die matrix wieder von stack nehmen oder mal kurz einen sinus und einen cosinus errechnnen?

kannst du dir die richtige anwort denken? :wink:

_________________
ghost-site.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 01, 2006 14:50 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
PhoenixGL hat geschrieben:
was ist nun schneller? für jede zahl die du zeichnest die modelviewmatrix auf den stack schreiben, einpaar matrixtransformationen machen und die matrix wieder von stack nehmen oder mal kurz einen sinus und einen cosinus errechnnen?

kannst du dir die richtige anwort denken? :wink:

Hmmm. Ich will ja nicht unken aber ich wäre da nicht so überzeugt. ;-)

Seit der Geforce besitzen Grafikkarten eine T&L (Transformation und Lightning) Einheit die nicht Anderes macht als die Positionen und die Lichter zu berechnen. Diese Einheit wurde Speziell dafür gebaut damit man eben nicht mehr alles mögliche auf der CPU berechnen sollte.

Außer Frage steht auf jeden Fall, dass das Pushen und Popen der Matrix sehr anspruchsvoll sind aber Sinus und Cosinus sind auch nicht ohne. In Shadern sind die sogar die mit Abstand rechenintensivste Anweisung.

Ich muss aber gestehen, dass ich es selber nicht genau weiß aber in meinen Augen hat es durchaus einen Grund warum das erfunden wurde. Um es genau zu wissen müsste man das aber mal messen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 01, 2006 15:39 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jun 20, 2003 13:59
Beiträge: 134
hoppla ja ok die standart sinus und cosinus funktionen errechnen ja auf unmengen (weis grad nich wieviele) stellen genauigkeit.
da könnte man ne eingene schreiben die nur sagen wir 3 oder 4 Stellen genauigkeit (sollte reichen für das problem) errechnet.
Oder noch besser eine mit wählbarer genauigkeit :)

mmh T&L Einheit hab ich ja noch nie gehört, naj man lernt ja nie aus, aber irgendwann *ineinegeldreichezukunftblick* werd ich mir wohl auch mal ne GeForce kaufen.

_________________
ghost-site.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 01, 2006 15:45 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
An die Einführung von T&L erinnere ich mich noch gut ... das stammt aus dem Jahre 2000 und wurde damals erstmals bei DX7 unterstützt und brachte einen merklichen Geschwindigkeitsvorteil bei der Berechnung. Ich würde wie Lossy ebenfalls darauf setzen, dass die Berechnung per CPU wesentlich mehr kostet als dies über die Grafikkarte zu schieben.

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Dez 02, 2006 10:09 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
In diesem Fall würde ich (wenns wirklich schnell gehen soll) Sinus/Cosinus Tables verwenden und die Winkel im 256er Maß angeben.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Dez 02, 2006 11:47 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 10:44
Beiträge: 991
Wohnort: Karlsfeld (nahe München)
Im Wiki findest du auch was zu dem Thema: Billboard

MfG
Flo

_________________
Danke an alle, die mir (und anderen) geholfen haben.
So weit... ...so gut


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]