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!