Jump to content
Sign in to follow this  
alves077

[Opengl] Luzes

Recommended Posts

alves077

Boa tarde,

Estou aqui com um problema se alguém puder ajudar agradecia.

Queria pôr uma luz numa cena 3D, mas não estou a conseguir, quer dizer noto que a luz lá está, mas não consigo alterar a sua intensidade, e verificar onde está mesmo o foco dessa luz. Sendo uma luz tipo foco, não consigo aumentar a sua intensidade.

Excerto do codigo:

GLfloat foco[] = {100.0f,260.0f,100.0f,1.0};
GLfloat dfoco[] = {100.0f,0.0f,100.0f};
GLfloat light_specular[] = { 1.0f, 0.0f, 1.0f, 1.0f  };
GLfloat LightDiffuse[]= { 1.0f, 1.0f, 1.0f, 1.0f };

glLightfv(GL_LIGHT3,GL_POSITION,ponto);
glLightfv(GL_LIGHT3,GL_SPOT_DIRECTION,dfoco);
glLightf(GL_LIGHT3,GL_SPOT_CUTOFF,180.0);
glLightf(GL_LIGHT3,GL_SPOT_EXPONENT,0.0);
glLightfv(GL_LIGHT3,GL_SPECULAR,light_specular);
glLightfv(GL_LIGHT3,GL_DIFFUSE,lightDiffuse);


glEnable(GL_LIGHT3);

Para sempre a cena iluminada, mas sem perceber onde está o foco, e sem conseguir alterar a sua intensidade, já andei a alterar os respectivos dados dos vector de definicao mas nada até agora...

Estou a cometer algum tipo de erro a definir as luzes?

Obrigado pela atenção,

alves077

Share this post


Link to post
Share on other sites
HappyHippyHippo

mas tu tens a luz na sua intensidade máxima:


GLfloat light_specular[] = {1.0f, // <- vermelho máximo
0.0f,
1.0f, // <- azul máximo
1.0f};
GLfloat LightDiffuse[] = {1.0f, // <- vermelho máximo
1.0f, // <- verde máximo
1.0f, // <- azul máximo
1.0f};
[/Code]

altera para 0.5 e verás a luz com metade de intensidade


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
alves077

Hm..

Tambem ja tinha alterado mas nada acontece, mas acho que ja estou a perceber porque não, não defino as normais aos objectos que desenho....

Estive aqui a ver o glnormal3d, mas nao percebo bem como definir, por exemplo num cubo os parâmetros dessa função, dependendo do lado..

Obrigado pela atenção,

alves077

Share this post


Link to post
Share on other sites
KTachyon

Tens que calcular as coordenadas do vector normal. Os parâmetros são o x, y e z desse vector.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
alves077

Já calculei as normais, já defini em todos os objetos as normais. Mas agora estou com outro problema..

Queria definir uma luz espécie lâmpada no teto de uma sala. Mas não consigo sequer liga-la...


GLfloat foco[] = {300.0f,460.0f,300.0f,1.0};
GLfloat local_con =2.0;
GLfloat local_lin =1.0;
GLfloat local_qua =0.5;
GLfloat localDifusa[4] ={ 1.0, 1.0, 1.0, 1.0};
GLfloat localCor[4] ={0.1,0.1,0.1,1.0};

glLightfv(GL_LIGHT0, GL_POSITION,foco);
glLightfv(GL_LIGHT0, GL_AMBIENT,localCor);
glLightfv(GL_LIGHT0, GL_DIFFUSE,localDifusa);
glLightf (GL_LIGHT0, GL_CONSTANT_ATTENUATION, local_con);
glLightf (GL_LIGHT0, GL_LINEAR_ATTENUATION,   local_lin);
glLightf (GL_LIGHT0, GL_QUADRATIC_ATTENUATION,local_qua);

 glEnable(GL_LIGHTING);
 glEnable(GL_LIGHT0);

Não será este tipo de luz para simular a luz numa lâmpada?

Não porque motivo não assume nenhuma cor com estas definições, não faço disable em lado nenhum no código...

Para ter iluminação ambiente local a global tem que estar definida ?

Obrigado pela atenção,

alves077

Edited by alves077

Share this post


Link to post
Share on other sites
KTachyon

Consegues ver a cena? É que se consegues, significa que tens iluminação. E se desactivares a iluminação deves conseguir ver a cena.

A posição da tua luz e a atenuação pode ser outra explicação para o teu problema. O factor de atenuação para uma distância de valor 300 é:

1 / (2 + 1*300 + 0.5*300*300) = 0.000022074

A fórmula é:

1 / (GL_CONSTANT_ATTENUATION + GL_LINEAR_ATTENUATION * distância + GL_QUADRATIC_ATTENUATION * distância * distância)

Para a escala em que estás a trabalhar, os teus valores de atenuação são demasiado elevados.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
alves077

Ver vejo, muito escura, a questão e que estar glenable ou gldisable dá no mesmo resultado...

modificquei os vaores para..

GLfloat local_con =1.0;
GLfloat local_lin =0.05;
GLfloat local_qua =0.0;

Não teve reação alguma... Se colocar ambiente global já da resultados com

glLightModelfv(GL_LIGHT_MODEL_AMBIENT, luz);

Mas queria simular luz no teto de uma sala por isso acho que não têm grande lógica usar global, mas sim local..

Obrigado pela atenção,

alves077

Share this post


Link to post
Share on other sites
HappyHippyHippo

deixaste de configurar a luz como um foco ?

glLightfv(GL_LIGHT3,GL_SPOT_DIRECTION,dfoco);
glLightf(GL_LIGHT3,GL_SPOT_CUTOFF,180.0);
glLightf(GL_LIGHT3,GL_SPOT_EXPONENT,0.0);


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
KTachyon

Com a linear a 0.05 a atenuação ainda fica a 0.0625 para 300 unidades de distância, ou seja, 6.25% de luz. Se considerares uma escala que vai de preto a branco, 6.25% é pouco mais que preto.

Experimenta retirar a atenuação linear por completo e vê o resultado. Depois ajustas para um valor adequado.

Edited by KTachyon

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
alves077

Sim, com foco tinha alguns efeitos que não gostava muito, decidi experimentar ambiente local, parece me que tem mais lógica neste caso. Mas não vejo grande diferença...

Sem atenuação já mostra alguma iluminação, mas acho que continua com alguns efeitos estranhos, não sei ate que ponto são "efeitos" normais.. Isto é, mexo a visão do observador e o que a volta do centro da visão fica escuro, só fica mais claro se estiver mesmo ao centro da sua visão, mesmo com a posição da luz no teto da sala. Estou a falar ao centro mas não é bem ao centro.. vou andando para a esquerda e a luz anda em sentido contrário..

Mas por exemplo o teto está escuro o que é normal já que a luz esta um pouco a baixo, penso eu..

Estes tipo de efeitos são normais com este tipo de iluminação?

Obrigado pela atenção,

alves077

Share this post


Link to post
Share on other sites
KTachyon

Lembra-te que a luz que estás a meter não é direccional, por isso o tecto devia ver-se. Tens a certeza que colocaste as normais correctas?


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
alves077

Hm... pois, o teto vê-se mas escuro, mas não definindo uma direção deveria aparecer mais claro provavelmente.

Estando o observador dentro do cubo, define as normais do seguinte modo:

ymax = (0,-1,0)

ymin = (0,1,0)

zmax = (0,0,-1)

zmin = (0,0,1)

xmax = (-1,0,0)

xmin = (1,0,0)

Não deveria ser assim?

É preciso ter algum cuidado especial na relação texturas e iluminação ?

Outra problema é a limitação da luz a um cubo, queria por só num cubo com a iluminação, já tentei alterar o angulo do parâmetro GL_SPOT_CUTOFF, mas a diferença e muito pouca..

Obrigado pela atenção,

alves077

Edited by alves077

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.