A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

LSL - Linden Scripting Language Trabalhando com Scripts Parte 3

Apresentações semelhantes


Apresentação em tema: "LSL - Linden Scripting Language Trabalhando com Scripts Parte 3"— Transcrição da apresentação:

1 LSL - Linden Scripting Language Trabalhando com Scripts Parte 3
Monitora: Cintia Caetano Mestrado UFF – IC 2009/01 1

2 Movimentação e Rotação
Na vida real, nos preocupamos apenas em ir para frente, para trás, para algum lado, vários aspectos relacionados a movimentação são totalmente desnecessários para que possamos viver sem problemas. Já no SL, certos fundamentos de física são necessários. Vamos verificar alguns conceitos necessários, e depois vamos ver e estudar algumas funções relacionadas. 2

3 Movimentação e Rotação
No SL, temos também os pontos cardeais, que podem ser verificados observando o mini-mapa. Como na vida real, também pode andar para frente, de costas, e para os lados. Isso não se aplica somente a você, os diversos objetos, incluindo veículos, balas, etc., também fazem uso destes dois sistemas de referência. 3

4

5 Global X Local No SL, definimos nossos movimentos e rotações para serem executados local ou globalmente. Global - é toda movimentação ou rotação relativa a norte, sul, leste e oeste (ao mundo). Uma movimentação global não leva em conta se você, assim como seu objeto, esta de lado, de frente ou de costas. 5

6 Global X Local Local – é toda movimentação ou rotação relativa unicamente a você, ou ao objeto. Não importa se é norte ou sul, se esta de frente para onde deseja chegar, está indo para frente, se o seu destino esta atrás de você, está andando de costas, e se deseja chegar a um local que esta em um dos seus lados, esta andando de lado. 6

7 Representação Matemática
Utiliza-se o plano cartesiano para representar tanto a movimentação global quanto a local. O plano cartesiano é composto de três retas, a qual chamamos a cada uma de: eixo x, eixo y e eixo z. O eixo x representa, no SL, a movimentação relativa à Leste-Oeste. O eixo y a movimentação relativa à Norte-Sul. O eixo z é relativo à altitude. 7

8 Representação Matemática
No SL, a unidade de medida é metros, alcançando um precisão de até 1 milímetro. Com isto temos que nossos eixos poderão variar de 0,001 metros (um milímetro) até o limite da região onde estamos. Nota: Cada território é um quadrado 255x255. Ao trabalhar com movimentação, usaremos um valor do tipo vector. <float, float, float> 8

9 Representação Matemática
Crie um novo objeto, e verifique os eixos de movimentação sobre ele. Observe no mini-mapa os pontos cardeais que eles apontam. Observe que o eixo x (cor vermelha), o eixo y (cor verde) e o eixo z (cor azul). Na opção girar, observe que as cores continuam indicando exatamente sobre qual eixo giram. 9

10 Representação Matemática
Por mais que movimente e gire seu objeto, os eixos permanecem inalterados. Este comportamento é devido ao fato de estarmos utilizando referencia global. 10

11 Representação Matemática
Todo objeto, mesmo uma bola, possui uma face, ou lado, que é considerado como sua frente. Caso emitirmos um comando para o objeto ir para frente, é a direção em que esta face aponta que nosso objeto seguira. 11

12 llGetPos / llSetPos llGetPos();
Esta função simplesmente retorna um valor do tipo vector, representado a localização do objeto, em relação ao território onde esta. llSetPos(posição); Informa ao objeto qual será sua nova posição. O valor passado como argumento da função é um vector com as coordenadas desejadas. Não funciona para objetos físicos. 12

13 llSetPos O objeto não se desloca até chegar a posição final, ele vai direto á posição informada. Esta função possui um delay de 0.2 segundos. Temos uma limitação de 10 metros na distância que definimos como destino. Nota: Se desejarmos que o objeto suba 30 metros, devemos fazer um loop para que a função seja executada 3 vezes, especificando 10 metros como incremento em seu eixo z. 13

14 llVecDist llVecDist(posição1, posição2);
Utilizado para saber a distância exata entre dois objetos. Retorna um float contendo a distância entre a posição 1 e a posição 2. Passa o vector da posição de cada um deles com primeiro e segundo argumento. 14

15 llVecMag llVecMag(posição);
Esta função retorna a distância que a posição passada como argumento esta da posição <0.0,0.0,0.0>. Esta função retorna um float. A distância é expressada em metros. 15

16 llGround / llStopMoveToTarget
llGround(deslocamento); Retorna um float com a altura da terra, na posição especificada por deslocamento. llStopMoveToTarget(); Faz o objeto parar de se mover. 16

17 llMoveToTarget llMoveToTarget(posição, tempo);
Esta função atua sobre objetos físicos, fazendo com que o objeto alcance a posição passada como parâmetro, dentro do tempo (em segundos). Nota: o objeto se mantém movimentando para a posição, mesmo depois de chegar a ela. Seria como se disséssemos ao objeto, “mova-se para tal posição, em tantos segundos, e permaneça lá ate outra ordem”. 17

18 llMoveToTarget A posição especificada não pode estar a mais de 66 metros de distância. Se especificarmos um tempo de 0.0 segundos, o objeto para de se mover. 18

19 Relembrado Rotation Este tipo manipula rotações.
Representa um elemento matemático chamado de quaternion. É formado pelos eixos x, y e z, e um quarto número, representa se a rotação será pela esquerda ou direita. Em SL, para acessar cada elemento deste vetor, especificando .x, .y, .z ou .s 19

20 Graus e Radiandos Escalas que medem as rotações de um objeto.
Infelizmente, o SL não trabalha diretamente com graus, e sim com radianos.  Porém, temos algumas facilidades (funções) que nos permitem converter de graus para radianos sem maiores dificuldades.  20

21 Graus e Radiandos Para nós, o importante é saber que:
360º = 2 * PI = TWO_PI radianos Nota: PI é uma constante matemática que vale aproximadamente 3,14. Para especificar uma rotação de 360º em radianos, utilizamos 2*P ou TWO_PI. 21

22 Graus e Radiandos 180º = PI radianos (mesmo racionio anterior)
Para especificar uma rotação de 180º em radianos, utilizamos PI 90º = PI_BY_TWO = PI/2 radianos Para especificar uma rotação de 360º em radianos, utilizamos PI_BY_TWO 22

23 Graus e Radiandos DEG_TO_RAD Graus para Radianos.
Quando o ângulo (em radianos) não for um dos casos falados anteriormente, podemos converte-lo para radianos multiplicando o mesmo pela constante DEG_TO_RAD. RAD_TO_DEG Converte radianos para graus. Nota: as constantes citadas acima são em MAIUSCULAS. 23

24 Euler Leonhard Euler foi um matemático e físico que desenvolveu um sistema de referência chamado Ângulos de Euler. Para dar uma orientação a um objeto específico, é necessário submetê-lo a uma seqüência de três rotações descritas pelos ângulos de Euler. Trabalhar diretamente com o tipo rotation não é tarefa fácil. 24

25 Euler Precisamos especificar o valor de rotação (em radianos, para cada eixo, e especificar o sentido e quantidade de rotações. Para facilitar nossa vida, podemos usar um valor do tipo vector, na qual apenas trabalharemos com 3 valores, representando cada um dos eixos. 25

26 Euler Esta forma de representar rotações, é conhecida com Representação Euler de uma rotação. A representação de Euler pode ser convertida para Rotation através de funções. Na representação Euler trabalha com graus. Sendo assim, além de convertê-la para rotation, também precisamos converter os valores em graus para radianos. 26

27 Euler Quando emitimos um comando para que um objeto se mova, temos 2 opções: Sabemos para qual posição queremos que nosso objeto se mova, relativo a região em que esta. Podemos usar llSetPos para objetos não físicos, e llMoveToTarget para objetos físicos. 27

28 Euler Quisermos que o objeto se mova para frente, tantos metros. Precisamos conhecer a rotação de um objeto, para saber se aponta para a direção correta que queremos que se mova, caso esteja fora da rotação adequada, teremos que saber quanto e sobre qual eixo rotacionar o objeto, para que nosso movimento seja exato. 28

29 llEuler2Rot llEuler2Rot(rotação);
Retorna um valor do tipo rotation, a partir do vector rotação passado como argumento. Após definirmos uma rotação, na representação Euler, convertemos para rotation passando a mesma para esta função. Observe que precisamos também converter o valor em graus para radianos, fazendo uso da constante DEG_TO_RAD. 29

30 llRot2Euler llRot2Euler(rotação);
O inverso da função anterior. Transforma o valor do tipo rotation passado como parâmetro, para um vector em representação Euler. Nota: Não se esqueça de usar a constante RAD_TO_DEG para transformar os radianos em graus. 30

31 llGetRot / llSetRot llGetRot();
Retorna um valor do tipo rotation, represen-tando a orientação do objeto. llSetRot(rotação); Esta função rotaciona o objeto para a nova orientação, especificada pelo parâmetro passado com um valor do tipo rotation. Funciona apenas com objetos não-físicos. 31

32 llTargetOmega llTargetOmega(eixo,volta,força);
Esta função rotaciona um objeto sobre o eixo especificado pelo valor do tipo vector, passado como parâmetro. O argumento volta, é uma valor do tipo float, e especifica o número de revoluções (voltas, girar em torno do eixo especificado) que o objeto fará. As revoluções são em radianos por segundo, e basicamente determina quão rápido nosso objeto ira girar. 32

33 llTargetOmega O último parâmetro, força, é útil apenas em objetos físicos, apesar de não poder ser 0 em objetos não físicos. Basicamente determina a força com que o objeto ira girar. llTargetOmega atua diferentemente em objetos físicos e não físicos. Objetos físicos = utiliza os eixos do objeto (rotação local). Objetos não-físicos = utiliza eixos globais. 33

34 Diferença A diferença entre llTargetOmega e llSetRot
llSetRot rotaciona o objeto apenas uma vez, orientando o mesmo na rotação indicada llTargetOmega rotaciona o objeto continuamente. 34

35 Exercício 7 Crie uma esfera (não-física) e insira o seguinte código:
default { state_entry() llTargetOmega(<0.0,0.0,1.0>,TWO_PI,1); } Faz com que o objeto fique rotacionando sobre seu eixo z. O objeto completará uma volta completa a cada segundo. Altere o valor do segundo parâmetro, e verifique que o objeto aumenta, ou diminui a rotação, conforme o novo valor. 35

36 Exercício 8 Crie um cubo (não-físico) e insira o seguinte código:
vector e_rot; //variável Euler rotation rot; //variável rotation default { state_entry() } touch_start(integer c) e_rot=<50.0,90.0,90.0>; //atribui orientação ao vetor rot=llEuler2Rot(e_rot * DEG_TO_RAD); //atribuí o retorno da função llEuler2Rot sobre o vetor Euler - retorna um valor do tipo rotation llSetRot(rot); //rotaciona o objeto Altere o valor do segundo parâmetro, e verifique que o objeto aumenta, ou diminui a rotação, conforme o novo valor. Preste atenção, uma vez que a rotação tenha sido feita, nada mais ocorre, pois o objeto já se encontra na orientação desejada. 36

37 Exercício 9 //Não consegue um movimento uniforme devido ao delay da função llSetRot. vector e_rot=<0.0,0.0,45.0>; //declara vetor e atribui uma rotação de 45º em z rotation rot; default { state_entry() llSetTimerEvent(0.1); //prepara o evento timer p/ responder a cada 1 seg. rot=llGetRot(); //guarda a orientação atual na variável rot e_rot=e_rot * DEG_TO_RAD; //transforma graus em radianos } //evento Timer timer() rot= rot * llEuler2Rot(e_rot); llSetRot(rot); //atualiza a orientação do objeto, girando em mais 45º graus Não-físico 37

38 Exercício 10 Crie um objeto físico e coloque o seguinte código:
default { state_entry() llTargetOmega(<0.0,0.0,1.0>,TWO_PI,1.0); } touch_start(integer c) llMoveToTarget(<60.0,150.0,40.0>,5); llSetTimerEvent(2); timer() llStopMoveToTarget(); llSetTimerEvent(0.0); 38

39 Exercício 11 default { state_entry()
llSetText(" Objeto que gira sem parar ", <0.0,1.0,0.0>,1.0); // rotacionando o eixo x uma vez por segundo // rotacionando o eixo y 3 vez por segundo // rotacionando o eixo z uma vez por segundo llTargetOmega(<1.0,3.0,1.0>,TWO_PI,1.0); } 39

40 Exercício 12 default { state_entry()
llSetText(" Clique para girar ", <0.0,1.0,0.0>,1.0); state voltar; } state ir touch_start(integer total_number) llSetText(" Clique para parar ", <0.0,1.0,0.0>,1.0); llTargetOmega(<1.0,3.0,0.5>,TWO_PI,1.0); 40

41 Exercício 12 state voltar { touch_start(integer total_number)
llTargetOmega(<0.0,0.0,0.0>,0,0.0); llSetText(" Clique para girar ", <0.0,1.0,0.0>,1.0); state ir; } 41

42 Bibliográfia Guia de Script no Second Life. By Valdinei Rodrigues dos Reis Creating Your World: The Official Guide to Advanced Content Creation for Second Life. by Aimee Weber, Kimberly Rufer-Bach and Richard Platel. Wiley Publishing, Inc. ISBN: Second Life For Dummies. By Sarah Robbins, Mark Bell. Wiley Publishing, Inc. ISBN: Second Life: o Guia Oficial. By A P Watt Ltd. Editora: Ediouro. Ano: Edição: 1. ISBN: LSL Guide 42


Carregar ppt "LSL - Linden Scripting Language Trabalhando com Scripts Parte 3"

Apresentações semelhantes


Anúncios Google