Ir para conteúdo
  • 0

[Resolvido] [Inativo]Fazer uma particula girando em volta..


_Kurimatzu_

Pergunta

26 respostass a esta questão

Posts Recomendados

Eu também já pensei fzr algo assim mas não descobri a lógica por trás da coisa então vou ficar aqui só esperando alguém com a resposta.

Editado por Mapr
Link para o comentário
Compartilhar em outros sites

É trigonométria, é difícilzin mas eu ja fiz uns testes...

 

Nao precisa usar Packet obrigatoriamente.

 

Tutorial Gringo: http://m.youtube.com/channel/UCIA3ywM1G19ZlIfD1HOKOjg

Esse cara faz as partículas do PvPDojo...

 

Caso queira uma API e pa mais simples, use o EffectLib

Link para o comentário
Compartilhar em outros sites

É trigonométria, é difícilzin mas eu ja fiz uns testes...

 

Nao precisa usar Packet obrigatoriamente.

 

Tutorial Gringo: http://m.youtube.com/channel/UCIA3ywM1G19ZlIfD1HOKOjg

Esse cara faz as partículas do PvPDojo...

 

Caso queira uma API e pa mais simples, use o EffectLib

Eu não achei oque eu queria..

 

e +- aquele sistema do battle que fica girando holograma, porém em vez de holograma é particulas.

Link para o comentário
Compartilhar em outros sites

Guest gkovalechyn

Supondo que você queira girar o negócio no plano XZ, a matriz de rotação é:

 

[cosθ   0   senθ]

[ 0       1      0   ]

[-senθ 0   cosθ]

 

Só lembre que você quando for aplicar isso a alguma localização vai girar em torno do ponto (0, 0, 0).

Link para o comentário
Compartilhar em outros sites

Supondo que você queira girar o negócio no plano XZ, a matriz de rotação é:

 

[cosθ   0   senθ]

[ 0       1      0   ]

[-senθ 0   cosθ]

 

Só lembre que você quando for aplicar isso a alguma localização vai girar em torno do ponto (0, 0, 0).

buguei ;-;

Link para o comentário
Compartilhar em outros sites

Guest gkovalechyn

buguei ;-;

Basicamente, você tem um vetor que é a localização, (x, y, z). Você quer girar isso no plano XZ para fazer a particula girar em volta do player.

Para fazer um ponto girar no plano XZ você rotaciona ele em relação a Y, para girar ele você aplica essa matriz a esse vetor (A posição).

 

Ou seja, se você aplicar:

[x]      [cosθ   0   senθ]         [xRot]

[y]  *  [ 0       1      0   ]       =  [yRot]

[z]      [-senθ 0   cosθ]         [zRot]

 

Onde:

[x, y, z] é a posição atual da partícula.

θ é o ângulo que você quer girar.

[xRot, yRot, zRot] é a posição final da partícula rotacionada.

 

(Isso sem contando a quarta dimensão porque você não vai precisar aqui)

 

Só que isso, assume que o centro da rotação é (0, 0, 0). Se você quer girar em volta de algum outro pronto, primeiro você translada, muda de posição, o centro para o ponto que você quer.

Para fazer isso é só subtrair a posição da partícula da posição do ponto que você quer que seja o centro. Ou seja:

posicaoParticula = (x, y, z)

centro = (playerX, playerY, playerZ)

 

posicaoRelativa = posicaoParticula - centro;

 

Daí ao invés de usar a posição real da partícula para calcular a rotação, só usar a posição relativa e transladar de volta para em volta do player.

 

resultado = posicaoRelativa * matrizDeRotacao;

resultado += centro;

Editado por gkovalechyn
Link para o comentário
Compartilhar em outros sites

Basicamente, você tem um vetor que é a localização, (x, y, z). Você quer girar isso no plano XZ para fazer a particula girar em volta do player.

Para fazer um ponto girar no plano XZ você rotaciona ele em relação a Y, para girar ele você aplica essa matriz a esse vetor (A posição).

 

Ou seja, se você aplicar:

[x]      [cosθ   0   senθ]         [xRot]

[y]  *  [ 0       1      0   ]       =  [yRot]

[z]      [-senθ 0   cosθ]         [zRot]

 

Onde:

[x, y, z] é a posição atual da partícula.

θ é o ângulo que você quer girar.

[xRot, yRot, zRot] é a posição final da partícula rotacionada.

 

(Isso sem contando a quarta dimensão porque você não vai precisar aqui)

Tem como enviar um codigo?

Editado por _Kurimatzu_
Link para o comentário
Compartilhar em outros sites

Guest gkovalechyn

Eu ainda não aprendi isso (na escola) ;-;

 

Tem como enviar um codigo?

 

Eu sou praticamente contra enviar còdigo, só quando a coisa é mais complicada mesmo. Fora o fato de que eu falei os passos que tem que fazer alí em cima. você só vai precisar saber multiplicação de matriz por vetor e adição de vetores.

 

Como exemplo: https://streamable.com/fwsj

 

A única coisa diferente que eu tive que fazer foi desenhar o eixo Z como o eixo Y, por isso que no fillRect eu uso pos[2] ao invés de pos[1].

Editado por gkovalechyn
Link para o comentário
Compartilhar em outros sites

É trigonométria, é difícilzin mas eu ja fiz uns testes...

 

Nao precisa usar Packet obrigatoriamente.

 

Tutorial Gringo: http://m.youtube.com/channel/UCIA3ywM1G19ZlIfD1HOKOjg

Esse cara faz as partículas do PvPDojo...

 

Caso queira uma API e pa mais simples, use o EffectLib

 

Eu quero aprender isso *-*

 

Eu passo mal pra fazer um quadrado -q

Link para o comentário
Compartilhar em outros sites

Basicamente, você tem um vetor que é a localização, (x, y, z). Você quer girar isso no plano XZ para fazer a particula girar em volta do player.

Para fazer um ponto girar no plano XZ você rotaciona ele em relação a Y, para girar ele você aplica essa matriz a esse vetor (A posição).

 

Ou seja, se você aplicar:

[x]      [cosθ   0   senθ]         [xRot]

[y]  *  [ 0       1      0   ]       =  [yRot]

[z]      [-senθ 0   cosθ]         [zRot]

 

Onde:

[x, y, z] é a posição atual da partícula.

θ é o ângulo que você quer girar.

[xRot, yRot, zRot] é a posição final da partícula rotacionada.

 

(Isso sem contando a quarta dimensão porque você não vai precisar aqui)

 

Só que isso, assume que o centro da rotação é (0, 0, 0). Se você quer girar em volta de algum outro pronto, primeiro você translada, muda de posição, o centro para o ponto que você quer.

Para fazer isso é só subtrair a posição da partícula da posição do ponto que você quer que seja o centro. Ou seja:

posicaoParticula = (x, y, z)

centro = (playerX, playerY, playerZ)

 

posicaoRelativa = posicaoParticula - centro;

 

Daí ao invés de usar a posição real da partícula para calcular a rotação, só usar a posição relativa e transladar de volta para em volta do player.

 

resultado = posicaoRelativa * matrizDeRotacao;

resultado += centro;

Entendi mais ou menos, até porque trigonometria não é tão dificil ! 

 

Eu só peço a você que faça um exemplo em código do java tipo assim, pq não sei qual uso se é no caso Math ou alguma classe especifica Packet do Bukkit!

Link para o comentário
Compartilhar em outros sites

Entendi mais ou menos, até porque trigonometria não é tão dificil ! 

 

Eu só peço a você que faça um exemplo em código do java tipo assim, pq não sei qual uso se é no caso Math ou alguma classe especifica Packet do Bukkit!

Classe math do próprio java.

 

Math.cos, Math.sin, bla bla bla

Link para o comentário
Compartilhar em outros sites

Guest gkovalechyn

Entendi mais ou menos, até porque trigonometria não é tão dificil ! 

 

Eu só peço a você que faça um exemplo em código do java tipo assim, pq não sei qual uso se é no caso Math ou alguma classe especifica Packet do Bukkit!

 

No post em que eu falei que eu sou contra dar código tem um exemplo. Só que eu acho que ninguém pensou em olhar o que estava escrito na IDE.

 

O código em si é bem simples, se você copiar o código que está na IDE você deve ter algo básico funcionando. O que está dentro do método "update" é o que atualiza a posição da partícula para a próxima posição dela (Meio difícil de explicar, melhor ver o vídeo para entender). Daí é só fazer isso usar, ao invés da variável "center" só usar a posiçao do player. (Só que claro, tem que levar em conta o player mudando de posição também senão vai fuder com o giro da partícula).

Link para o comentário
Compartilhar em outros sites

Classe math do próprio java.

 

Math.cos, Math.sin, bla bla bla

 

 

No post em que eu falei que eu sou contra dar código tem um exemplo. Só que eu acho que ninguém pensou em olhar o que estava escrito na IDE.

 

O código em si é bem simples, se você copiar o código que está na IDE você deve ter algo básico funcionando. O que está dentro do método "update" é o que atualiza a posição da partícula para a próxima posição dela (Meio difícil de explicar, melhor ver o vídeo para entender). Daí é só fazer isso usar, ao invés da variável "center" só usar a posiçao do player. (Só que claro, tem que levar em conta o player mudando de posição também senão vai fuder com o giro da partícula).

Entendi, valeu aos dois, você foi o único que eu achei que deu pra entender um pouco mais, pois não sou fluente no inglês e ai não entendo muito os vídeos dos gringo ! 

 

Valeu mano, vou dar umas praticadas !

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...