• Nenhum resultado encontrado

LSL - Linden Scripting Language Trabalhando com Scripts Parte 3. Monitora: Cintia Caetano Mestrado UFF IC 2009/021

N/A
N/A
Protected

Academic year: 2021

Share "LSL - Linden Scripting Language Trabalhando com Scripts Parte 3. Monitora: Cintia Caetano Mestrado UFF IC 2009/021"

Copied!
42
0
0

Texto

(1)

LSL - Linden Scripting Language

Trabalhando com Scripts

Parte 3

Monitora: Cintia Caetano

Mestrado

UFF – IC

(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.

(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.

(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.

(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.

(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.

(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.

(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.

(10)

Representação Matemática

 Por mais que movimente e gire seu objeto, os

eixos permanecem inalterados.

 Este comportamento é devido ao fato de

(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.

(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.

(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.

(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

(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.

(16)

llGround /

llStopMoveToTarget

llGround(deslocamento);

 Retorna um float com a altura da terra, na

posição especificada por deslocamento.

llStopMoveToTarget();

(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 “mova-segundos, e permaneça lá ate outra ordem”.

(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

(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

(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. 

(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,1415...

 Para especificar uma rotação de 360º em

(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

(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

(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.

(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.

(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.

(27)

Euler

 Quando emitimos um comando para que um

objeto se mova, temos 2 opções:

1. 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.

(28)

Euler

1. 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.

(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.

(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

(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.

(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á.

(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).

(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

(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.

(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

(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);

(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()

(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); }

(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) {

(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;

} }

(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: 978-0-470-17114-1  Second Life For Dummies. By Sarah Robbins, Mark Bell. Wiley

Publishing, Inc. ISBN: 978-0-470-18025-9.

Second Life: o Guia Oficial. By A P Watt Ltd. Editora: Ediouro. Ano: 2007. Edição: 1. ISBN: 9788500019616.

Referências

Documentos relacionados

Implementar um plano de intervenção com vistas à redução da incidência da Diabetes mellitus descompensada na Unidade Básica de Saúde Vilas Reunidas tem uma grande

Deste modo, o adequado zoneamento e sua observância são fundamentais para a conciliação da preservação ou conservação de espécies, hábitats e paisagens dentre outras e

E também confirma, em tarefas de Física que envolvem as representações, o que Duval (2003, 2009) considera para a Matemática:

A extração de bromelina a partir de resíduos agroindustriais da produção de abacaxi pode se tornar vantajosa, tanto aos produtores do fruto e ao mercado de enzimas quanto ao meio

O candidato e seu responsável legalmente investido (no caso de candidato menor de 18 (dezoito) anos não emancipado), são os ÚNICOS responsáveis pelo correto

Sua produção anual é de 3,4 bilhões de barris e que conseguiu mais de 100 campos de petróleo e gás na Arábia Saudita, pelo menos, tot alizando 264,000 milhões de barris

Embora os judeus possuam apenas um sexto de 1% de toda a terra árabe, eles são, não obstante, detestados pela maioria dos árabes.. Por que o povo judeu

Na apresentação dos dados estatísticos, ficou demonstrada à todos os participantes a dimensão da pesquisa, abrangendo o setor produtivo como um todo, enfocando a produção