Entrar
Últimos assuntos
» player não consegue andarpor lovn7 Qui 21 Nov 2024, 13:33
» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22
» (Resolvido) Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31
» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23
» (RESOLVIDO) Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49
» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58
» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36
» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36
» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33
» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51
» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28
» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18
» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08
» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10
» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16
» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40
» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01
» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45
» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34
» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28
» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48
» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54
» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14
» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50
Projeção de luz e sombra usando cálculo vetorial
3 participantes
GMBR :: Ensine & Aprenda :: Exemplos :: Game Maker (engines)
Página 1 de 1
Projeção de luz e sombra usando cálculo vetorial
Vector Easy Lighting 1.1 beta
Vantagens de usar a projeção de luz pelo vetor:
>> Controle total sobre a performance e qualidade da luz, podendo ajustar de acordo com o fps automaticamente se necessário. Nos testes que eu fiz em um computador bem modesto, consegui desenhar até 50 luzes na tela, com ótima qualidade no render e fps aceitável.
>> Controle total do efeito, podendo ser reajustado em tempo real, a fim de criar ambientes de acordo com a situação e/ou desempenho.
>> Não requer nenhuma mudança no projeto. O exemplo que postei faz o uso de uma surface, porém, o script também pode ser usado diretamente no evento Draw. Além disso não é necessário usar nenhum sprite adicional nem implementar nenhum código aos demais objetos pois o efeito é um vetor, que é calculado com base na instância que emite a luz e as demais que circundam ela.
>> Rápido. Nos testes que eu fiz, consegui desenhar vetores com quase 1000 vértices por luz, com fps muito bom.
>> Você pode adaptar a precisão do efeito de acordo com a máscara de colisão do objeto. Isso significa que você pode usá-lo em um jogo com perspectivas diferentes de visão ou isométrico, em casos onde "a base" do objeto é a própria máscara. E como o efeito é fácil de usar (apenas um script pra cada tipo de luz), você desenhá-lo na surface e distorcê-la depois se achar melhor.
>> Fácil de usar. É só usar um script para cada tipo de efeito. Por enquanto só criei dois tipos de luz, uma "spot" e uma "lighting point", mas quero criar mais, e a medida que eu for criando vou complementando o tópico.
>> O donwload é para Game Maker 8 mas o script também pode ser usado em versões anteriores (6 ou 7). O exemplo ficou bem básico, pois experimentei até agora apenas dois blends, mas usando outros o efeito é bem bonito e dá "um up" bem legal nos gráficos do jogo.
>> Controle total do efeito, podendo ser reajustado em tempo real, a fim de criar ambientes de acordo com a situação e/ou desempenho.
>> Não requer nenhuma mudança no projeto. O exemplo que postei faz o uso de uma surface, porém, o script também pode ser usado diretamente no evento Draw. Além disso não é necessário usar nenhum sprite adicional nem implementar nenhum código aos demais objetos pois o efeito é um vetor, que é calculado com base na instância que emite a luz e as demais que circundam ela.
>> Rápido. Nos testes que eu fiz, consegui desenhar vetores com quase 1000 vértices por luz, com fps muito bom.
>> Você pode adaptar a precisão do efeito de acordo com a máscara de colisão do objeto. Isso significa que você pode usá-lo em um jogo com perspectivas diferentes de visão ou isométrico, em casos onde "a base" do objeto é a própria máscara. E como o efeito é fácil de usar (apenas um script pra cada tipo de luz), você desenhá-lo na surface e distorcê-la depois se achar melhor.
>> Fácil de usar. É só usar um script para cada tipo de efeito. Por enquanto só criei dois tipos de luz, uma "spot" e uma "lighting point", mas quero criar mais, e a medida que eu for criando vou complementando o tópico.
>> O donwload é para Game Maker 8 mas o script também pode ser usado em versões anteriores (6 ou 7). O exemplo ficou bem básico, pois experimentei até agora apenas dois blends, mas usando outros o efeito é bem bonito e dá "um up" bem legal nos gráficos do jogo.
Download:
http://dl.dropbox.com/u/77818756/Game%20Maker/vector_easy_lighting_v1_11.gmk
http://dl.dropbox.com/u/77818756/Game%20Maker/vector_easy_lighting_v1_11.gmk
Última edição por Ninja8086 em Qui 28 Jun 2012, 10:39, editado 2 vez(es)
GameMakerTutoriais- Data de inscrição : 29/01/2011
Reputação : 26
Número de Mensagens : 800
Prêmios :
x 0 x 4 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Projeção de luz e sombra usando cálculo vetorial
Genial!
Eu gostei muito dessa engine.
Ficou muito boa mesmo. Rodou sem lentidão. Você usou bem as surfaces.
Valeu cara!
Até mais!
Eu gostei muito dessa engine.
Ficou muito boa mesmo. Rodou sem lentidão. Você usou bem as surfaces.
Valeu cara!
Até mais!
Última edição por PedroX em Ter 14 maio 2013, 13:10, editado 1 vez(es)
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Re: Projeção de luz e sombra usando cálculo vetorial
.
Última edição por brendan640 em Sáb 08 Jun 2013, 20:36, editado 1 vez(es)
GameMakerTutoriais- Data de inscrição : 29/01/2011
Reputação : 26
Número de Mensagens : 800
Prêmios :
x 0 x 4 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Projeção de luz e sombra usando cálculo vetorial
Esqueci de falar no meu post:
Será que tem como fazer o ambiente ficar mais escuro, ficando claro somente onde a luz alcança?
Até mais!
Será que tem como fazer o ambiente ficar mais escuro, ficando claro somente onde a luz alcança?
Até mais!
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Re: Projeção de luz e sombra usando cálculo vetorial
ótima engine,nota dez .
nem conhecia esse recurso .
continue assim
nem conhecia esse recurso .
continue assim
Convidad- Convidado
Re: Projeção de luz e sombra usando cálculo vetorial
Pedro Henrique escreveu:Esqueci de falar no meu post:
Será que tem como fazer o ambiente ficar mais escuro, ficando claro somente onde a luz alcança?
Até mais!
Tem sim! Nesse caso é só usar um blend diferente, daria pra fazer usando dest color e source color. Vai lá do Draw, troca o blend que tá lá por esse aqui:
- Código:
draw_set_blend_mode_ext( bm_dest_color, bm_src_color);
Mas esse blend que eu coloquei é bem básico, se você for experimentando outros misturados com os efeitos do engine, fica muito legal. Eu vou postar uns exemplos mais legais depois que eu terminar ele.
Pedro, se ficar lento quando você usar muitos efeitos juntos, eu tenho uma dica pra acelerar todos de uma vez, saca só: cria uma variável "prevfps" no create com o valor do fps;
- Código:
prevfps := fps;
Daí, na hora em que você desenhar o efeito, no valor de "beams" você usa isso:
- Código:
(perfeicao/30) * max(1,prevfps)
Ficaria mais ou menos assim:
- Código:
eff_lighting_point(x, y, 250, c_white, c_red, 1, 0, (300/30) * max(1,prevfps), 2, 0, 1);
Depois que você desenhar o efeito (tem que ser depois de tudo, a última coisa), você atualiza a variável prevfps.
- Código:
prevfps := fps;
Vai tudo ser desenhado de acordo com o fps do jogo, diminuindo ou aumentando a qualidade quando for preciso.
TRFN escreveu:ótima engine,nota dez .
nem conhecia esse recurso .
continue assim
Valeu! Obrigado por baixar e testar!
GameMakerTutoriais- Data de inscrição : 29/01/2011
Reputação : 26
Número de Mensagens : 800
Prêmios :
x 0 x 4 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Projeção de luz e sombra usando cálculo vetorial
Eu naum acredito cara... Logo quando eu ia baixar o 4shared em manutenção..., manda o Script por favor !! Eu estou precisando desse code agora!
Eu tenho uma duvida....
Como esse efeito ficaria em um jogo 3d com a luz ativada !?
Eu tenho uma duvida....
Como esse efeito ficaria em um jogo 3d com a luz ativada !?
uriel.56- Data de inscrição : 13/02/2010
Reputação : -2
Número de Mensagens : 430
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Projeção de luz e sombra usando cálculo vetorial
Deu certinho. Ficou mais legal ainda.Tem sim! Nesse caso é só usar um blend diferente, daria pra fazer usando dest color e source color. Vai lá do Draw, troca o blend que tá lá por esse aqui:
Teria como você fazer uma explicação dos calculos usados?
Não precisa ser hoje (nem amanhã), mas é que seria legal saber como funciona.
Até mais!
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Re: Projeção de luz e sombra usando cálculo vetorial
uriel.56 escreveu:Eu naum acredito cara... Logo quando eu ia baixar o 4shared em manutenção..., manda o Script por favor !! Eu estou precisando desse code agora!
Eu tenho uma duvida....
Como esse efeito ficaria em um jogo 3d com a luz ativada !?
O 4shared ficou em manutenção hoje mesmo um tempão... mas eu dei uma olhada agora, parece que já tá ok. A questão do 3D, eu nunca tentei, na verdade parece que o GM não aceita muito bem o uso de surfaces quando o modo 3D estiver ativado...
Pedro Henrique escreveu:
Teria como você fazer uma explicação dos calculos usados?
Não precisa ser hoje (nem amanhã), mas é que seria legal saber como funciona.
Até mais!
Então, na verdade a única coisa que eu fiz foi desenhar dois triângulos e fazer com que os vértices colidissem com os objetos. Eu fiz um loop pra e ir repetindo de acordo com o nível de "perfeição" do desenho. Quanto maior for o loop, mais triângulos ele iria desenhar, e então teria uma probabilidade maior dele encontrar um objeto "em um espaço menor" de distância, daí o desenho fica com um acabamento melhorzinho...
Daí é só usar a função draw_primitive() e escolher o tipo de vetor que vc quer desenhar, como eu queria triângulos, eu usei o tipo pr_trianglelist que "cria" um triângulo a cada 3 vértices que a gente põe. Cada vez que você chama a draw_vertex(), você tá definindo um ponto a mais no desenho.
Daí o que eu fiz foi só projetar o desenho de acordo com o ângulo e o "alcance" da "lanterna"! A medida que ele vai colidindo, ele vai pegando a forma do objeto! É tosco mas fica massa. Se vc colocar várias bolinhas uma do lado da outra, quando a luz colide fica parecendo uma grade! Eu achei da hora d+
GameMakerTutoriais- Data de inscrição : 29/01/2011
Reputação : 26
Número de Mensagens : 800
Prêmios :
x 0 x 4 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Projeção de luz e sombra usando cálculo vetorial
Então eu poderia usar um draw_triangle() normal para desenhar a faixa de luz? Claro, usando as funções de blend. Como seria?
Edit: Agora que pensei melhor, acho que ia ser complicado fazer o triângulo colidir com os objetos, mas espero sua resposta.
Até mais!
Edit: Agora que pensei melhor, acho que ia ser complicado fazer o triângulo colidir com os objetos, mas espero sua resposta.
Até mais!
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Re: Projeção de luz e sombra usando cálculo vetorial
Pedro Henrique escreveu:Então eu poderia usar um draw_triangle() normal para desenhar a faixa de luz? Claro, usando as funções de blend. Como seria?
Pode sim, nesse caso você pode escolher duas alternativas diferentes. A primeira seria o tipo pr_trianglestrip: os 3 primeiros pontos q vc fizer com draw_vertex() vai formar um triângulo e se vc fizer mais um ponto, dos dois últimos pontos do triângulo vão se juntar a esse novo ponto formando mais um triângulo, um "pra cima" e outro "pra baixo", fazendo um retângulo.
O outro jeito seria usar o pr_trianglelist e usar 6 pontos pra fazer dois triângulos igual eu fiz no engine. Eu podia ter usado o pr_trianglestrip pq eu ia ganhar velocidade de cálculo jogando fora 2 pontos por vetor, mas como eu fiz o esquema de reflexão de luz, eu precisava de uma medição mais exata e também dá pra colocar textura no meu engine sem distorcer, justamente pq eu usei esse kind que fica fácil calcular os pontos da textura.
Se eu colocar uma textura tipo de folhagem, quando eu refletir a luz, vai dar a impressão que a luz ta pegando de cima de uma árvore! Fica bem legal, mas é um pouco mais trabalhoso usar textura. Não é complicado, só é chato.
Pedro Henrique escreveu:Agora que pensei melhor, acho que ia ser complicado fazer o triângulo colidir com os objetos, mas espero sua resposta.
Na verdade não é. O lance é fazer colidir rápido porque são muitos vetores pra desenhar. Esse que é o segredo. Eu até pedi ajuda o pessoal do fórum, tem um tópico que a galera toda, a gente tava vendo um jeito rápido de testar a posição de objeto usando collision_line ao invés de place_meeting (ou position_metting). Usei esse esquema e o resultado é o engine!
Daí fazer a colisão fica fácil, é só direcionar a collision_line com lenght_dir da direção da lanterna e correr pro abraço!
GameMakerTutoriais- Data de inscrição : 29/01/2011
Reputação : 26
Número de Mensagens : 800
Prêmios :
x 0 x 4 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Projeção de luz e sombra usando cálculo vetorial
Eu me referia àquelas funções básicas, como draw_circle(), draw_rectangle() e draw_triangle(). Não referia ao draw_vertex e pr_trianglestrip. Se entendeu, poderia mostrar como seria?Pode sim, nesse caso você pode escolher duas alternativas diferentes. A primeira seria o tipo pr_trianglestrip: os 3 primeiros pontos q vc fizer com draw_vertex() vai formar um triângulo e se vc fizer mais um ponto, dos dois últimos pontos do triângulo vão se juntar a esse novo ponto formando mais um triângulo, um "pra cima" e outro "pra baixo", fazendo um retângulo.
Até mais!
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Re: Projeção de luz e sombra usando cálculo vetorial
Pedro Henrique escreveu:Eu me referia àquelas funções básicas, como draw_circle(), draw_rectangle() e draw_triangle(). Não referia ao draw_vertex e pr_trianglestrip. Se entendeu, poderia mostrar como seria?
Até mais!
Dá pra desenhar com o draw_triangle(), mas com com draw_vertex é melhor e mais fácil, além de você poder definir um alpha pra cada vértice. Com draw_retangle já fica impossível, já que não tem jeito de rotacionar o retângulo usando só ela.
Mas com draw_triangle, é tranquilo. É só desenhar 2 triângulos. Salva esse script como "desenha_traco" e testa. Fiz de cabeça, se não funcionar me fala, mas eu tô sem o GM aqui agora...
- Código:
var origemx, origemy, destinox, destinoy, largura, p1x, p1y, p2x, p2y, p3x, p3y, p4x, p4y, dir;
origemx := argument0;
origemy := argument1;
destinox := argument2;
destinoy := argument3;
largura := argument4/2;
dir := point_direction(origemx, origemy, destinox, destinoy);
p1x := origemx + lengthdir_x(largura, dir + 90);
p1y := origemy + lengthdir_y(largura, dir + 90);
p2x := origemx + lengthdir_x(largura, dir - 90);
p2y := origemy + lengthdir_y(largura, dir - 90);
p3x := destinox + lengthdir_x(largura, dir + 90);
p3y := destinoy + lengthdir_y(largura, dir + 90);
p4x := destinox + lengthdir_x(largura, dir - 90);
p4y := destinoy + lengthdir_y(largura, dir - 90);
draw_set_color(c_black);
draw_triangle(p1x, p1y, p3x, p3y, p4x, p4y, 0);
draw_triangle(p1x, p1y, p2x, p2y, p4x, p4y, 0);
Daí você usa em um objeto qualquer só pra testar o que eu falei:
- Código:
desenha_traco(x, y, mouse_x, mouse_y, 10);
----------------- Edit -----------------
Atualizei o exemplo e corrigi um bug.
GameMakerTutoriais- Data de inscrição : 29/01/2011
Reputação : 26
Número de Mensagens : 800
Prêmios :
x 0 x 4 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Tópicos semelhantes
» erro com projeção esquisito.....
» Duvida sobre projeção 3d
» GM3D 02 – Projeção e Movimento da Câmera
» [Resolvido] [GM:S] Projeção 3D para Surface?
» Ajuda com projeção 3D, tela invertida
» Duvida sobre projeção 3d
» GM3D 02 – Projeção e Movimento da Câmera
» [Resolvido] [GM:S] Projeção 3D para Surface?
» Ajuda com projeção 3D, tela invertida
GMBR :: Ensine & Aprenda :: Exemplos :: Game Maker (engines)
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos