Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   textos 2D con glscene (https://www.clubdelphi.com/foros/showthread.php?t=62264)

andarcio 14-12-2008 01:36:46

textos 2D con glscene
 
Hola
Estoy haciendo un programa para representar proteinas con glscene, el problema es que necesito identificar cada atomos con una letra y ninguno de los objetos de glscene que he visto -tglflattext y tglhudtext- lo hace , ya que:
  1. "quisiera que el texto se represente directamente en el plano de
    pantalla" (esto se puede hacer con tglhudtext pero no con tglflattext)
  2. quisiera que el texto este enlazado a un pto en 3D,que al rotar la comara este cambie de posicion en la pantalla segun cambia el atomo. (esto se puede hacer con tglflattext pero no con tglhudtext )
gracias
y espero no quitarles tiempo
sldos

coso 14-12-2008 11:56:45

Hola,

prueba GLSpaceText

link

andarcio 14-12-2008 21:19:17

coso
con tglspacetext
sucede igual que con tglflattext
-no puedo representar el texto en el plano de la pantalla,
o sea, lo que se representa es el rendering de un modelo 3d de texto.
al mover la camara este modelo se ve de angulos diferente y no se
representa precisamente como las letras que ahora ves

si me dieran alguna otra solucion se lo agradeceria
sldos

coso 15-12-2008 11:04:00

Es raro, el tglflattext es para exactamente eso que dices. Y mediante el tglHudText o bien sacando texto a un tglHudSprite, tansolo tendras que encontrar las coordenadas proyectadas del objeto en el glscene a pantalla y recolocar. Aunque ya digo que el tglflattext es exactamente lo que hace: un objeto en 3D que siempre se ve plano.

Cita:

"quisiera que el texto se represente directamente en el plano de pantalla"
que significa esto bien bien?

PD: voy a revisarlo, luego si de caso contesto otra vez

andarcio 16-12-2008 06:10:47

Cita:

que significa esto bien bien?
aqui encontre algo que explica mejor lo que quiero decir

Cita:

TGLHUDText Displays text on the screen using 2D screen coordinates. 3D direction and position arent used with hudtext. Use TGLFlatText to display text in 3D.
o sea TGLHUDText muestra un texto usando las coordenadas 2D de la pantalla (que es exactamente lo que quiero). pero no se le puede asociar una posicion en el espacio 3D.
y por ultimo espero que me halla explicado mejor ahora

si tienen alguna idea benvenuti

sldos

andarcio 16-12-2008 11:05:04

acabo de resolver el problema utilizando tglflattext

he aqui el codigo
Código:

Camera.MoveAroundTarget(dy, dx);    //despues de mover la camara
        a:=tglcoordinates.Create(self);
          flattext.Up.X:=0; flattext.Up.Y:=1; flattext.Up.Z:=0;
          with Camera.Position do
            begin
            a.x:=((x)/sqrt(sqr(x)+sqr(z)+sqr(y)));
            a.z:=((z)/sqrt(sqr(x)+sqr(z)+sqr(y)));
            a.y:=((y)/sqrt(sqr(x)+sqr(z)+sqr(y)));
            end;
          flattext.Direction:=a;


andarcio 16-12-2008 11:06:40

acabo de resolver el problema utilizando tglflattext

he aqui el codigo qu e tuve que utilizar para mantener
el texto de frente a la camara.
Código:

Camera.MoveAroundTarget(dy, dx);    //despues de mover la camara
        a:=tglcoordinates.Create(self);
          flattext.Up.X:=0; flattext.Up.Y:=1; flattext.Up.Z:=0;
          with Camera.Position do
            begin
            a.x:=((x)/sqrt(sqr(x)+sqr(z)+sqr(y)));
            a.z:=((z)/sqrt(sqr(x)+sqr(z)+sqr(y)));
            a.y:=((y)/sqrt(sqr(x)+sqr(z)+sqr(y)));
            end;
          flattext.Direction:=a;

gracias por la ayuda

sldos

c4_esp_VR 07-04-2009 12:12:48

Hola compañeros:

Estoy intentando crear dinámicamente un texto con GLScene pero este no se me visualiza por pantalla. El código es el sigiuente:

Código:

//Creamos una clase que contiene los siguientes atributos
IDGraph : TGLHUDText; //Texto
GraphStoredBitmapFont: TGLStoredBitmapFont;//Biblioteca para el tratamiento de texto

//En el constructor ponemos

//Creamos el editor de texto
  self.GraphStoredBitmapFont:=TGLStoredBitmapFont.Create(self);
  self.GraphStoredBitmapFont.Font.Charset:=ANSI_CHARSET;
  self.GraphStoredBitmapFont.Font.Color:=clWhite;
  self.GraphStoredBitmapFont.Font.Height:=-11;
  self.GraphStoredBitmapFont.Font.Name:='Verdana';
  self.GraphStoredBitmapFont.Font.Size:=8;
  self.GraphStoredBitmapFont.Font.Style:=[fsBold,fsItalic];
  self.GraphStoredBitmapFont.Ranges[0].StartASCII:=#32;
  self.GraphStoredBitmapFont.Ranges[0].StartGlyphIdx:=0;
  self.GraphStoredBitmapFont.Ranges[0].StopASCII:='}';

//Creamos el texto
  self.IDGraph := TGLHUDText.Create(self.scene.Objects.AddNewChild(TGLHUDText));
  self.IDGraph.Text:='Graph';
  self.IDGraph.Position.SetPoint(0,0,0);
  self.IDGraph.Visible:=True;
  self.IDGraph.BitmapFont := self.GraphStoredBitmapFont;
  self.IDGraph.Alignment := taLeftJustify;
  self.IDGraph.Layout := tlTop;
  self.IDGraph.ModulateColor.AsWinColor:=clWhite;
  self.IDGraph.Scale.SetVector(1,1,1);
  self.IDGraph.Up.SetVector(0,1,0);

Si creo el texto estáticamente desde el editor del GLScene funciona perfectamente pero dinámicamente no me deja.

Soy capaz de crear dinámicamente una tetera, planos, lineas, etc...pero el texto soy incapaz y no sé porqué, cualquier ayuda sería de agradecer.

Sin más muchas gracias.

c4_esp_VR 08-04-2009 10:02:10

Hola compañeros:

He encontrado una solución, no es óptima, pero es una solución xD.

En el evento AfterRender del GLSceneViewer hay que crear un canvas y pintar en este, de la forma sigiuente:

Código:

procedure TForm1.GLSceneViewer2AfterRender(Sender: TObject);
var
  canvas : TCanvas;
begin
  canvas:=TCanvas.Create;
  try
      canvas.Handle:=GLSceneViewer2.RenderDC;
      canvas.Brush.Style := bsClear;
      canvas.Font.Name := 'Verdana';
      canvas.Font.Color := clWhite;

    canvas.TextOut(3, 3+canvas.TextHeight('A'), 'Texto');
      end;
  finally
      canvas.Free;
  end;
end;

Si alguien encuentra la solución óptima que la comparta :D

Un saludete y gracias.


La franja horaria es GMT +2. Ahora son las 09:06:20.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi