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

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




Criar novo tópico Responder  [ 6 mensagens ] 
Autor Mensagem
 Título: Colocar um bitmap em um plano (como textura?)
MensagemEnviado: Dom Mar 04, 2012 11:35 pm 
Offline
Membro novo

Registrado em: Dom Mar 04, 2012 9:55 pm
Mensagens: 4
Oi gente, to começando com o GLScene, e é claro, apanhando de monte por aqui. Estou tentando mostrar vários bitmaps em tempo de execução na minha cena colocados em posições específicas e pensei que o melhor objeto pra isso fosse o plano. A idéia era posicionar o plano e usar o bitmap como textura pra ele. Posicionar os planos eu já consigo, mas mostrar os bitmaps, nem com reza brava, o que estou fazendo de errado, ou o que está faltando no meu código?

Plane := TGLPlane(GLScene1.Objects.AddNewChild(TGLPlane));
Plane.Position:= Dummy1.Position;
Plane.Direction := Dummy1.Direction;
Plane.Direction.Invert;
Plane.Width:= 0.5;
Plane.Height:= 2;
Plane.Material.Texture.Image.AssignToBitmap(bmpFt); // bmpFt é o bitmap que eu quero mostrar
Plane.Material.Texture.Disabled := false;
Planes.Add(Plane);

Obs: ví vários outros tópicos aqui perguntando mais ou menos a mesma coisa, mas infelizmente nenhum deles foi respondido, estão todos com zero respostas. Bom, não custa tentar, né?

Obrigado

Francesco


Voltar ao topo
 Perfil  
 
 Título: Re: Colocar um bitmap em um plano (como textura?)
MensagemEnviado: Seg Mar 05, 2012 10:44 am 
Offline
Membro veterano
Avatar do usuário

Registrado em: Dom Mai 20, 2007 8:42 am
Mensagens: 1114
Localização: Belo Horizonte
Para poder texturizar você precisa utilizar MaterialLibrary.
http://glscene.pbworks.com/w/page/64375 ... ialLibrary

_________________
Imagem


Voltar ao topo
 Perfil  
 
 Título: Re: Colocar um bitmap em um plano (como textura?)
MensagemEnviado: Seg Mar 05, 2012 5:36 pm 
Offline
Membro júnior
Avatar do usuário

Registrado em: Seg Ago 25, 2008 10:07 pm
Mensagens: 37
Quando você usa a linha

Código:
Plane.Material.Texture.Image.AssignToBitmap(bmpFt); // bmpFt é o bitmap que eu quero mostrar


você na verdade está designando a imagem que o plano está usando atualmente (que não é nenhuma) para a sua variável "bmpFt". Com isso eu acredito que ela seja até apagada.

Em vez de usar essa linha use esta:


Código:
Plane.Material.Texture.Image.LoadFromFile(bmp.bmp); // bmp.bmp é um arquivo de bitmap que eu quero carregar


Ou (eu acho não tenho certeza):

Código:
Plane.Material.Texture.Image.Assign(bmpFt); // bmpFt é o bitmap que eu quero mostrar


Porém você já deve ter algo desenhado no bmpFt (eu acho que o código é esse, mas não lembro de cabeça pois estou numa lan house sem o glscene aqui).

Para mais informações, se você já não conhece, veja o meu guia de glscene aqui:

http://jersonseling.wikispaces.com/GLScene

Ou o wiki do glscene onde eu e um dos russos desenvolvedores do glscene (Predator)
colocamos várias coisas interessantes:

http://wiki.glscene.info/index.php?title=Main_Page (Em inglês)

Em breve eu pretendo colocar um tutorial sobre materiais lá.

Aguarde...

_________________
Conheçam meu projeto de GLScene em:

http://jersonseling.wikispaces.com


Voltar ao topo
 Perfil  
 
 Título: Re: Colocar um bitmap em um plano (como textura?)
MensagemEnviado: Seg Mar 05, 2012 8:39 pm 
Offline
Membro novo

Registrado em: Dom Mar 04, 2012 9:55 pm
Mensagens: 4
Olá, e obrigado pelas dicas.

Tydres,

eu estava querendo evitar o uso da library neste caso. As imagens são capturadas por uma câmera de vídeo em tempo de execução e só servem para texturizar um único objeto, e mesmo assim podem nem ficar muito tempo no objeto. O projeto é de um sistema de navegação e mapeamento 3D em um robozinho que carrega uma câmera , a ideia é que conforme ele se move pelo ambiente vai criando um mapa 3d do ambiente, então é bem provável que mais adiante ele consiga imagens melhores (mais próximas ou com um angulo melhor) dos objetos texturizados antes e aí a textura será substituída pela novas imagens, então ficar armazenando essas imagens em uma library não é necessário e nem eficiente, a não ser que não exista mesmo outra forma de fazer isso.

Jerson,

Depois que vc falou eu me toquei, eu devia ter percebido pelo nome da função que AssignToBitmap é uma função de saída e não de entrada, falha minha.

Testei as opções que vc sugeriu e não funcionaram, acho até que são essas funções mesmo, mas deve estar faltando alguma coisa no meu código, talvez alguma propriedade que deva ser modificada, não sei.

Testei com o LoadFromFile, que também eu queria evitar de usar, já que a imagem está em memória, fiz o seguinte:

bmpFt.SaveToFile('bmpFt.bmp');
Plane.Material.Texture.Image.LoadFromFile('bmpFt.bmp');

mas ela continua não aparecendo no plano, ele continua cinza.
Com o Assign, a mesma coisa:

Plane.Material.Texture.Image.Assign(bmpFt);

Por isso eu acho que deve ter algo faltando, mas não faço idéia do que seja.
Tentei acrescentar notificações como:

Plane.Material.Texture.NotifyImageChange;
e
Plane.Material.NotifyChange(self);

Mas tb não adiantaram.

E, by the way, queria aproveitar pra agradecer pelo excelente trabalho que vc fez com o Super-Guia, ajudou e continua ajudando muito, valeu mesmo. Eu tinha visto lá o uso do LoadFromFile, mas como disse, minhas imagens estão em memória, não em arquivos.

Grato,

Francesco


Voltar ao topo
 Perfil  
 
 Título: Re: Colocar um bitmap em um plano (como textura?)
MensagemEnviado: Qua Mar 07, 2012 1:17 am 
Offline
Membro novo

Registrado em: Dom Mar 04, 2012 9:55 pm
Mensagens: 4
Bom, depois de dois dias apanhando finalmente consegui descobrir o que faltava, sem isso não funciona mesmo.

Antes de carregar a textura para o objeto, seja pelo Assign ou pelo LoadFromFile tem que mudar o modo da textura para tmReplace e pra isso precisa incluir a unit GLTexture no uses do programa. Então ficou assim:

Código:
    Plane := TGLPlane(GLScene1.Objects.AddNewChild(TGLPlane));
    Plane.Position:= Dummy1.Position;
    Plane.Direction := Dummy1.Direction;
    Plane.Direction.Invert;
    Plane.Width:= 0.5;
    Plane.Height:= 2;
    Plane.Material.Texture.Disabled := false;
    Plane.Material.Texture.TextureMode:= tmReplace;  // sem esta linha não funciona
    Plane.Material.Texture.Image.Assign(bmpFt);
    Planes.Add(Plane);


e agora funcionou direitinho, como eu queria, finalmente.

Abraços,

Francesco


Voltar ao topo
 Perfil  
 
 Título: Re: Colocar um bitmap em um plano (como textura?)
MensagemEnviado: Sex Jan 06, 2017 6:50 am 
Offline
Membro novo

Registrado em: Sex Jan 06, 2017 6:45 am
Mensagens: 4
:mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen:



ดูหนังใหม่


Voltar ao topo
 Perfil  
 
Exibir mensagens anteriores:  Ordenar por  
Criar novo tópico Responder  [ 6 mensagens ] 

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