Página 1 de 1
Como converter graus para vector (Iluminação do Game Maker)
Enviado: Qui Ago 02, 2018 2:40 pm
por Foxy Of Jungle
Há uma função no Game Maker Studio:
d3d_light_define_direction(id,vx,vy,vz,colour);
A direção da luz é em vetor, mas preciso saber qual cálculo usar para converter esses graus para valores de vetor (0 - 1) ~edit: (-1 a 1) ,erro meu :P
O jogo é Mobile, por isso estou a usar o sistema built-in de iluminação.
Re: Como converter degraus para vector (Iluminação do Game Maker)
Enviado: Qui Ago 02, 2018 5:10 pm
por None
Eu acho que não entendi a pergunta, você disse que um vetor vai de 0 a 1? Oo
Enfim, o game maker possui uma função chamada degtorad e radtodeg
Ela faz a conversão de graus
Eu estou falando dela porque acho que você confundiu radiano com vetor.
Re: Como converter degraus para vector (Iluminação do Game Maker)
Enviado: Qui Ago 02, 2018 5:37 pm
por None
Fui olhar a documentação, esta função é exclusiva para 3D e realmente o game maker diz que só vai de 0 a 1 (o que não é a definição de um vetor).
Ignore meu comentário anterior então
'
Re: Como converter degraus para vector (Iluminação do Game Maker)
Enviado: Qui Ago 02, 2018 5:50 pm
por All-x
Leia a documentação:
d3d_light_define_direction
Não é de
0 até
1, e sim de
-1 até
1.
Se tu quiser usar valores de 0 a 360, basta fazer isso:
Código: Selecionar todos
direcao = 180;
minha_direcao_x = -1 + ((direcao mod 360) / 180);
d3d_light_define_direction(1, minha_direcao_x, 0, 0, c_white);
No teste aqui deu certo, porém não sei se isso é correto de se fazer. Qualquer coisa edito.
FLWS!
Re: Como converter degraus para vector (Iluminação do Game Maker)
Enviado: Qui Ago 02, 2018 11:58 pm
por Ciro
Alex FC escreveu:Leia a documentação:
d3d_light_define_direction
Não é de
0 até
1, e sim de
-1 até
1.
Se tu quiser usar valores de 0 a 360, basta fazer isso:
Código: Selecionar todos
direcao = 180;
minha_direcao_x = -1 + ((direcao mod 360) / 180);
d3d_light_define_direction(1, minha_direcao_x, 0, 0, c_white);
No teste aqui deu certo, porém não sei se isso é correto de se fazer. Qualquer coisa edito.
FLWS!
Não é assim que vetores funcionam. A direção de um vetor é representada por um ponto em relação ao ponto de origem (0,0). Por exemplo, (1,0) seria 0 graus (direita), (-1,0) seria 180 graus (esquerda), (0,1) seria 90 graus (baixo) e (1,1) 45 graus.
A distância pode ser qualquer uma, por exemplo (10,10) também seria válido para 45 graus (caso não seja necessário que o vetor esteja normalizado, onde a distância deve ser sempre um)
Acho que esse artigo explica vetores bem:
Link
No caso do problema do tópico, achei a solução aqui:
Link
Adaptando para o Game Maker, eu
acho que ficaria assim (esse vetor é 3D então precisa de dois ângulos):
Código: Selecionar todos
//coloque seus próprios valores nessas 3 variáveis
var angleX = 180;
var angleY = 90;
var intensity = 1; //insira um valor de 0 à 1
angleX = angleX * 3.14159265 / 180;
angleY = angleX * 3.14159265 / 180;
var sinYaw = sin(angleX);
var cosYaw = cos(angleY);
var sinPitch = sin(angle.x);
var cosPitch = cos(angle.x);
var directionX = cosPitch * cosYaw * intensity;
var directionY = cosPitch * sinYaw * intensity;
var directionZ = -sinPitch * intensity;
d3d_light_define_direction(1, directionX, directionY, directionZ, c_white);
Eu também fiz uma adaptação para suportar intensidade na luz. Na função d3d_light_define_direction, ela é medida pela distância do vetor.
Re: Como converter degraus para vector (Iluminação do Game Maker)
Enviado: Sex Ago 03, 2018 12:37 am
por All-x
Justamente @Ciro, por isso disse que achava que não era essa a forma correta. Eu estava tentando encontrar um exemplo usando vetores, mas não consegui adaptar nenhum.
Abraços
Re: Como converter degraus para vector (Iluminação do Game Maker)
Enviado: Sex Ago 03, 2018 8:05 pm
por Foxy Of Jungle
Valeu pela atenção, ei @Alex eu escrevi errado sobre -1 até 1 :P
Obrigado pela ajuda de todos!