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 ?
Angehängte Grafiken
Dateityp: jpg Image001.jpg (79,9 KB, 58x aufgerufen)
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.875 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
673 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
673 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
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 21:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz