PDA

Visualizza Versione Completa : Move oggetti e luci in lseditor



buffer
25-02-08, 16:25
Ciao ragazzi,
dopo aver cercato in giro nel forum chiedo esplicitamente il vostro aiuto. Devo fare uno script per estrarre una serie di frame da una scena con un oggetto e una luce in movimento. Molto semplicemente ho un ascena con un oggetto che carico, una luce e una camera fissa. Il problema è: come faccio a prendere l'handle dell'oggetto (così come della luce) e assegnargli delle coordinate precise?

mikadit
25-02-08, 19:25
Hai dato un'occhiata alla documentazione?
http://dodgy.ghostoutpost.com/Lscript/Lscript%20Index.html

Credo che devi dare un'occhiata all'interno del Scene Object Agent:
http://dodgy.ghostoutpost.com/Lscript/Source/Scenes.htm

Forse questa è la parte che ti serve (?):
http://dodgy.ghostoutpost.com/Lscript/Source/Common_Data.htm#getWorldPosition

getWorldPosition(time)
getWorldRotation(time)
getWorldRight(time)
getWorldUp(time)
getWorldForward(time)

Each of these methods returns a vector containing the three numeric values corresponding to the parameter at the specified time index.

mypos = myobj.param(POSITION);

mywrot = myobj.getWorldRotation(time);

buffer
25-02-08, 22:36
Hai dato un'occhiata alla documentazione?
http://dodgy.ghostoutpost.com/Lscript/Lscript%20Index.html

Credo che devi dare un'occhiata all'interno del Scene Object Agent:
http://dodgy.ghostoutpost.com/Lscript/Source/Scenes.htm

Forse questa è la parte che ti serve (?):
http://dodgy.ghostoutpost.com/Lscript/Source/Common_Data.htm#getWorldPosition


ciao!
ti ringrazio per i link, ci avevo dato uno sguardo ma non sapendo cosa cercare esattamente mi era sfuggito e ora che la guardo meglio la trovo molto più utile della reference e userguide ufficiali.
Ad ogni modo mi accorgo che mi sono spiegato male. Più che un "get" mi servirebbe un "set". In sostanza ho un array di punti che sono le posizioni che devono assumere oggetto e luce e devo ricavare un frame per ogni possibile configurazione. Questo perchè voglio fare un batch per ricavare automaticamente i frame (circa 2000) per ogni soggetto. Scusami ma mi torna molto difficile, finora avevo programmato solo in c e in matlab.

Ancora grazie mille.

loriswave
26-02-08, 09:25
le strade sono due, una più o meno è:
select( item); POSITION( x,y,z); ROTATION(h,p,b); createkey(currentframe);
selezioni l'oggetto che ti serve muovere, gli dai la nuova posizione e crei un keyframe, cerca la giusta dicitura dei comandi, non ho sotto mano la documentazione.
la seconda strada, lavori su i singoli canali (x,y,z per le posizioni e h,p,b per le rotazioni)con il comando setkeyvalue( time, value) o forse è Value e poi time. comunque il comando per ottenere il canale delle x e object.firstchannel, poi gli altri tramite object.nextchannel. così hai i canali e gli assegni un valore se la key esiste, altrimenti createkey( time , value) se non esisite.

scusa la confusione ma sono sempre di fretta e mi raccomando controlla bene i comandi che sono andato a memoria.

mikadit
26-02-08, 10:58
[...], finora avevo programmato solo in c e in matlab.
Guarda che puoi benissimo lavorare in C, dai un'occhiata al SDK:
http://www.newtek.com/lightwave/developers/
;)

buffer
28-02-08, 23:18
ok ragazzi,
dover aver smazzato abbondantemente la documentazione ho il seguente problema:
ottengo l'identificatore per il mio oggetto mesh, per l'oggetto camera e per quello light, ma a questo punto mi sembra di aver capito che per poterli muovere cioè utilizzare il method "set(attribute,value)" i miei oggetti debbano essere dei "motion object agent" e non capisco come farli diventare tali. Sono sulla strada giusta? e se si come si fa a fare questa cosa? se invece sto sbagliando alla grande da che parte ricominciare?

grazie

mikadit
01-03-08, 14:20
Avendo l'ID dell'oggetto non dovresti avere difficoltà a darli i nuovi attributi (http://dodgy.ghostoutpost.com/Lscript/Source/Motions.htm).
Sto cercando di capire meglio se posso darti dei suggerimenti o indirizzarti meglio, almeno fin tanto che si tratta di LScript, cosa che quando sento la necessità uso un pochino per velocizzare o migliorare alcune procedure, ma non sono un programmatore, per cui avrei bisogno di capire meglio di cosa esattamente o, meglio, praticamente devi fare. Ci possono essere delle funzioni o degli script esistenti che potrebbero fare al caso tuo, o che ti potrebbero indirizzare rapidamente nella direzione giusta.

buffer
01-03-08, 20:00
Ciao!
ti ringrazio per aver preso a cuore la mia situazione. La funzione che mi hai indicato è proprio quella che vorrei usare io ma ricevo sempre come errore che il metodo che sto utilizzando non vale per la tipologia di oggetto che considero.
Riassumendo io apro il Layout, carico un file .LWS che ho già. Questo file contiene già un oggetto .LWO creato precedentemente, una camera e una luce. A questo punto io con il mio script vorrei semplicemente fare questa cosa: posizionare l'oggetto e la luce in dei punti precisi da assegnare attraverso un vettore di coordinate.
In giro non ho trovato nulla che facesse qualcosa del genere e l'esempio sulla documentazione non è affatto chiarificatore. Io credo sia una cosa abbastanza semplice da fare ma non capisco l'errore.
Se può essere utile il "mio oggetto" è una mesh di punti rappresentante una testa 3D. Inoltre vorrei muovere l'oggetto nella sua globalità e non punto per punto (oggetto è costituito da più di 16000 punti!) e quindi evitare di utilizzare il comando "move".
Grazie mille!! ;)