AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia [OpenGL] - Text im 3D darstellen klappt nicht so recht...
Thema durchsuchen
Ansicht
Themen-Optionen

[OpenGL] - Text im 3D darstellen klappt nicht so recht...

Ein Thema von turboPASCAL · begonnen am 13. Jun 2011 · letzter Beitrag vom 13. Jun 2011
Antwort Antwort
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#1

[OpenGL] - Text im 3D darstellen klappt nicht so recht...

  Alt 13. Jun 2011, 11:05
Hi,

ich bastle gerade an 'nem kleinem Projekt.
Dabei wollte ich "normalen" Text im 3D-Raum darstellen, was leider nicht so klappen möchte. (siehe Anhang)

Zur "Umrechnung" von 3D zu 2D nutze ich gluProject() was ja die Koordinaten liefern soll, doch leider
ist der Text bzw. die 2D-Koordinaten versetzt.

Delphi-Quellcode:
procedure Get2DCoordFrom3D(Pos3D: TVector_3d; var Pos2D: TVector_3d);
var
  modelMatrix: array [0..15] of GLdouble;
  projMatrix: array [0..15] of GLdouble;
  viewport: array [0..3] of glint;
  xyz2D: array [0..3] of GLdouble;
begin
  glGetDoublev(GL_MODELVIEW_MATRIX, @modelMatrix);
  glGetDoublev(GL_PROJECTION_MATRIX, @projMatrix);
  glGetIntegerv(GL_VIEWPORT, @viewport);

  gluProject(
         Pos3D.X,
         Pos3D.Y,
         Pos3D.Z,
         @modelMatrix,
         @projMatrix,
         @viewport,
         xyz2D[0],
         xyz2D[1],
         xyz2D[2]
      );

   Pos2D.X := xyz2D[0];
   Pos2D.Y := xyz2D[1];
   Pos2D.Z := xyz2D[2];
end;

Wer kann helfen ?
Miniaturansicht angehängter Grafiken
image001.jpg  
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser

Geändert von turboPASCAL (13. Jun 2011 um 15:34 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: [OpenGL] - Text im 3D darstellen klappt nicht so recht...

  Alt 13. Jun 2011, 11:08
Was meinst du mit versetzt?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#3

AW: [OpenGL] - Text im 3D darstellen klappt nicht so recht...

  Alt 13. Jun 2011, 14:03
Naja, die Umrechnung haut nicht hin, siehe Bild oben.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
670 Beiträge
 
#4

AW: [OpenGL] - Text im 3D darstellen klappt nicht so recht...

  Alt 13. Jun 2011, 14:27
Liegt es vielleicht daran, dass Opengl den Ursprung unten/links hat und ein Panel oder Form oben/links Nein, das ist es nicht!

Geändert von Jens01 (13. Jun 2011 um 14:32 Uhr)
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
670 Beiträge
 
#5

AW: [OpenGL] - Text im 3D darstellen klappt nicht so recht...

  Alt 13. Jun 2011, 14:39
So, nochmal..
Ich weiss nicht, wie Du die Kamera und die Verschiebungen machst. Hier aber eine Function aus einer Kamera, die Text immer zur Kamera ausrichtet:

Delphi-Quellcode:
procedure TCamera.ApplyInvers;
var
  M: TArrMatrix;
begin
  // Um Objekte immer zum benutzer ausrichten, darf nur die drehung angewendet
  // werden und nicht die verschiebung. Verschiebung wird hier zurückgenommen.
  // Vorher muss die Kamera angewendet und die nötigen Verschiebungen/
  // Drehungen ausgeführt werden.
  M := InvertedMatrix; //das ist die inverse Matrix der aktuellen Kameraposition
  M[12] := 0;
  M[13] := 0;
  M[14] := 0;
  M[15] := 1;
  glMultMatrixd(@M);
end;
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#6

AW: [OpenGL] - Text im 3D darstellen klappt nicht so recht...

  Alt 13. Jun 2011, 15:40
Also ich nutze gluLookAt() als Kamera, die Planeten werden per glTranslatef() auf die Koordinaten gesetzt die ich berechnet habe.

Delphi-Quellcode:
  // Planeten Positionen berechnen
  for i := 1 to length(Planets) - 1 do
  begin
    Planets[i].Pos.X := sin(tc/Planets[i].rot) * Planets[i].distance;
    Planets[i].Pos.Y := 0;
    Planets[i].Pos.Z := cos(tc/Planets[i].rot) * Planets[i].distance;
  end;
Delphi-Quellcode:
 for i := 1 to length(Planets) - 1 do
  begin
    glPushMatrix;
      glTranslatef(Planets[i].Pos.X, Planets[i].Pos.Y, Planets[i].Pos.Z);


      if (mnuSelect > 0) and (mnuSelect = i) then
      begin
        Get2DCoordFrom3D(Planets[i].Pos, xPos);

      glBindTexture(GL_TEXTURE_2D, Textures[Planets[i].Texture]);
      glPushMatrix;
        if i <> 7
          then glRotatef(gtc / Planets[i].selfRot, 0,1,0)
          else glRotatef(gtc / Planets[i].selfRot, 1,0,0); // Uranus
        glPushMatrix;
          case i of
            6: glRotatef(83, -1,0,0); // Saturn
            7: glRotatef(90, 0,1,0); // Uranus
            else glRotatef(90, -1,0,0);
          end;
          gluSphere(qoSphere, Planets[i].radius, 32, 32);

      glPopMatrix;
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
670 Beiträge
 
#7

AW: [OpenGL] - Text im 3D darstellen klappt nicht so recht...

  Alt 13. Jun 2011, 17:19
Ich könnte Dir das Programmteil ja vorschlagen:
http://www.delphigl.com/forum/viewtopic.php?f=13&t=9811
Das sieht nur anfangs kompliziert aus. Im Programm sind das dann aber nur ein paar Zeilen.

Du kannst den Text damit an eine Stelle verschieben mit glTranslate und einmal zur Kamera ausrichten. Es bleibt dann immer so (vom Winkel her) zur Kamera ausgerichtet, auch wenn sich die Kamera in eine andere Position begibt.

Für Text ist diese Komponente übrigens unschlagbar :http://www.dev-center.de/projects/textsuite

Geändert von Jens01 (13. Jun 2011 um 17:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#8

AW: [OpenGL] - Text im 3D darstellen klappt nicht so recht...

  Alt 13. Jun 2011, 20:49
Danke, aber in der Zwischenzeit hab ich es hin bekommen.

Der Trick lag darin die Abfrage gleich hinter einem glLookAt zu setzen.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser

Geändert von turboPASCAL ( 3. Jul 2011 um 11:09 Uhr)
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
670 Beiträge
 
#9

AW: [OpenGL] - Text im 3D darstellen klappt nicht so recht...

  Alt 13. Jun 2011, 21:02
Sieht gut aus.
  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 08:18 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