![]() |
[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 ? |
AW: [OpenGL] - Text im 3D darstellen klappt nicht so recht...
Was meinst du mit versetzt?
|
AW: [OpenGL] - Text im 3D darstellen klappt nicht so recht...
Naja, die Umrechnung haut nicht hin, siehe Bild oben.
|
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!
|
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; |
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; |
AW: [OpenGL] - Text im 3D darstellen klappt nicht so recht...
Ich könnte Dir das Programmteil ja vorschlagen:
![]() 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 : ![]() |
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. |
AW: [OpenGL] - Text im 3D darstellen klappt nicht so recht...
Sieht gut aus.:thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:03 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