PDA

Ver la Versión Completa : textos 2D con glscene


andarcio
14-12-2008, 01:36:46
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:

"quisiera que el texto se represente directamente en el plano de pantalla" (esto se puede hacer con tglhudtext pero no con tglflattext)
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 (http://www.clubdelphi.com/foros/showthread.php?t=55143&highlight=glscene)

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.

"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
que significa esto bien bien?

aqui (http://glscene.sourceforge.net/wikka/TGLHudText) encontre algo que explica mejor lo que quiero decir

TGLHUDText Displays text on the screen using 2D screen coordinates. 3D direction and position arent used with hudtext. Use TGLFlatText (http://glscene.sourceforge.net/wikka/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

TGLFlatTexT (http://glscene.sourceforge.net/wikka/TGLFlatText) display text in 3D.
TGLFlatTexT (http://glscene.sourceforge.net/wikka/TGLFlatText) Draws text in 3D.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

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.

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:


//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:


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.