A comunidade brasileira de desenvolvimento e programação de jogos.
Bem-vindo: Qua Abr 14, 2021 11:00 am

Todos os horários são GMT - 3 horas




Criar novo tópico Responder  [ 18 mensagens ]  Ir para página Anterior  1, 2
Autor Mensagem
 Título: Re: GLscene - AJUDA POR FAVOR!!!
MensagemEnviado: Seg Out 17, 2011 3:32 pm 
Offline
Membro novo
Avatar do usuário

Registrado em: Seg Jan 10, 2011 2:35 pm
Mensagens: 11
Então, meu objetivo é simples: criar uma classe de cubos (TGLcube) com uma variável a mais: uma valor real atribuído

Olha o que eu fiz ( um resumo das operações que envolvem essa nova classe):


type
//===========Isso é só para criar a classe "TGLvalcube" - Um cubo com variável=================
TGLvalcube = class(TGLCube)
private
FValor: real;
published
property Valor: Real read FValor write FValor;
public
constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
end;
//==============================================================================

private
{ Déclarations privées }
mx,my : Integer;
public
{ Déclarations publiques }
valcube:TGLvalcube;
end;


constructor TGLvalCube.Create(AOwner : TComponent);
begin
inherited;
end;

destructor TGLvalCube.Destroy;
begin
inherited;
end;

procedure TForm2.FormCreate(Sender: TObject);

valcube.Assign(GLcube1); // Um cubo previamente criado naquele form2 que era referência de master p/ o TGLcolorproxy, meu plano era que o valcube copiasse as propriedades dele, aqui já começa a dar pau...


valcube.Material.BlendingMode:=bmTransparency;
valcube.Scale.Scale(cubeSize);
valcube.Visible:=False;
//============================Criação dos blocos================================
for i:=1 to nptos do
begin
cube:=TGLColorProxy(DummyCube1.AddNewChild(TGLColorProxy)); // a variável cube é um TGLcolorproxy
cube.MasterObject:=valcube;
cube.Position.SetPoint(bloco[i].n/30, bloco[i].e/30, bloco[i].cota*1.33);


Aí vem outro problema: como eu uso TGLcolorproxys, parece que o delphi não reconhece que o objeto mestre tem uma propriedade chamada "valor", assim quando eu digito "cube." , não aparece valor nem Fvalor como propriedades dele.
O que está errado no meu procedimento?

Att
Luiz


Voltar ao topo
 Perfil  
 
 Título: Re: GLscene - AJUDA POR FAVOR!!!
MensagemEnviado: Sáb Out 22, 2011 8:39 pm 
Offline
Membro júnior
Avatar do usuário

Registrado em: Seg Ago 25, 2008 10:07 pm
Mensagens: 37
Em vez de fazer uma classe descendente do TGLCube (o master), você deve fazer uma classe descendente do TGLcolorproxy.

A classe
Código:
type
//===========Isso é só para criar a classe "TGLvalcube" - Um cubo com variável=================
TGLvalcube = class(TGLColorProxy)
private
    FValor: Single;
published
    property Valor: Single read FValor write FValor;
public
    constructor Create(AOwner : TComponent); override;
    destructor Destroy; override;
end;



O código

Código:
procedure TForm2.FormCreate(Sender: TObject);

//Não faça isto!!! O assign não copia as propriedades do objeto, ele copia ele completamente.
//Na verdade, ele não copia, ele cria um ponteiro para o outro objeto (o glcube1)
//valcube.Assign(GLcube1);

{Não faça isto
valcube.Material.BlendingMode:=bmTransparency;
valcube.Scale.Scale(cubeSize);
valcube.Visible:=False;}

//deixa assim
//isso porque estas propriedades não podem ser mudados no TGLColorProxy.
GLcube1.Material.BlendingMode:=bmTransparency;
GLcube1.Scale.Scale(cubeSize);
GLcube1.Visible:=False;

//============================Criação dos blocos================================
for i:=1 to nptos do
begin
    //aqui criamos os seus novos cubos
    cube:=TGLvalcube(DummyCube1.AddNewChild(TGLvalcube)); // a variável cube é um TGLvalcube (que é um descendente do color proxy)
    cube.MasterObject:=GLcube1;
    cube.Position.SetPoint(bloco[i].n/30, bloco[i].e/30, bloco[i].cota*1.33);

    //e aqui podemos atribuir um valor a nova propriedade
    cube.Valor:=bloco[i].valor;
end;


Isso resolve o próximo problema, que estava acontecendo porque os cube's criados eram TGLColorProxys e não TGLValCube. O TGLColorProxy não tem a propriedade que você criou por isso ela não aparece.

O seu problema foi um mal entendido, você achou que a classe nova criada deveria substituir o master object, mas ela deve substituir é os cube's que você cria. O master object só tem por função fornecer uma malha 3D para os proxys usarem.

Essa é a vantagem dos proxys, em vez de você ter muitos objetos idênticos carregados na memória, você precisa só de um, que é então redesenhado para cada proxy que tem ele por master object.

Espero ter ajudado, ando meio sem tempo para ligar o computador.

_________________
Conheçam meu projeto de GLScene em:

http://jersonseling.wikispaces.com


Voltar ao topo
 Perfil  
 
 Título: Re: GLscene - AJUDA POR FAVOR!!!
MensagemEnviado: Dom Nov 13, 2011 1:54 pm 
Offline
Membro novo
Avatar do usuário

Registrado em: Seg Jan 10, 2011 2:35 pm
Mensagens: 11
Grande Jerson! como vai?
Não sabe como meu programa está indo, muito bem! Consegui criar a classe de blocos com variável, implementar umas funções extras e agora estou fazendo uma legenda utilizando o GLcanvas, assim que terminar a legenda pretendo mandar o programa no seu email pra vc divulgar mais um trabalho do GLscene!
Eu tinha só uma curiosidade: Pra evitar gambiarras na legenda ( que é a situação atual), tem algum tipo de texto 2D do GLscene que fica por cima da renderização? Qualquer objeto não pertencente ao GLscene fica por baixo, vc usaria flattext ou GLlabel?

Att
Luiz


Voltar ao topo
 Perfil  
 
Exibir mensagens anteriores:  Ordenar por  
Criar novo tópico Responder  [ 18 mensagens ]  Ir para página Anterior  1, 2

Todos os horários são GMT - 3 horas


Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante


Enviar mensagens: Proibido
Responder mensagens: Proibido
Editar mensagens: Proibido
Excluir mensagens: Proibido
Enviar anexos: Proibido

Ir para:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traduzido por: Suporte phpBB