Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   [OpenGL] - Text im 3D darstellen klappt nicht so recht... (https://www.delphipraxis.net/161025-%5Bopengl%5D-text-im-3d-darstellen-klappt-nicht-so-recht.html)

turboPASCAL 13. Jun 2011 11:05


[OpenGL] - Text im 3D darstellen klappt nicht so recht...
 
Liste der Anhänge anzeigen (Anzahl: 2)
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. :gruebel:

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 ?

mkinzler 13. Jun 2011 11:08

AW: [OpenGL] - Text im 3D darstellen klappt nicht so recht...
 
Was meinst du mit versetzt?

turboPASCAL 13. Jun 2011 14:03

AW: [OpenGL] - Text im 3D darstellen klappt nicht so recht...
 
Naja, die Umrechnung haut nicht hin, siehe Bild oben.

Jens01 13. Jun 2011 14:27

AW: [OpenGL] - Text im 3D darstellen klappt nicht so recht...
 
Liegt es vielleicht daran, dass Opengl den Ursprung unten/links hat und ein Panel oder Form oben/links Nein, das ist es nicht!

Jens01 13. Jun 2011 14:39

AW: [OpenGL] - Text im 3D darstellen klappt nicht so recht...
 
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;

turboPASCAL 13. Jun 2011 15:40

AW: [OpenGL] - Text im 3D darstellen klappt nicht so recht...
 
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;

Jens01 13. Jun 2011 17:19

AW: [OpenGL] - Text im 3D darstellen klappt nicht so recht...
 
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

turboPASCAL 13. Jun 2011 20:49

AW: [OpenGL] - Text im 3D darstellen klappt nicht so recht...
 
Danke, aber in der Zwischenzeit hab ich es hin bekommen.

Der Trick lag darin die Abfrage gleich hinter einem glLookAt zu setzen.

Jens01 13. Jun 2011 21:02

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:10 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