CAM
d3dmouse_init(xfrom,yfrom,zfrom,xto,yto,zto,xup,yup,zup,angle,aspect)
esatto, gli script li sopra fanno piu ho meno quello che hai detto, solo che non saprei come fare con u3d , su jak dammi una maniiiinaaaJak ha scritto:Se è un topdown ed il personaggio è al centro non vedo quale possa essere il problema
Ancora non ho capito bene cosa vuoi fare
Comunque una soluzione che mi viene in mente è quella di trasformare coordinata mouse in un vettore di direzione(cè una funzione apposta) e testare questo su un piano con il ray tracing(un'altra funzione apposta). U3D a quel punto ti restituisce le esatte coordinate 3d del punto indicato dal mouse sul piano.
Codice: Seleziona tutto
mousePos = ScreenCoordToVector(-1,mouse_x,mouse_y,camera);
ray=CheckRayIntersection(<terreno>,camera.x,camera.y,camera.z+camera.height,CalculateVectorLongitude(mousePos),CalculateVectorLatitude(mousePos),<room_index>);
move_to_x= GetVector(mousePos,1); //ritorna la parte x del vettore
move_to_y= GetVector(mousePos,2); //ritorna la parte y del vettore
ReleaseVector(mousePos);
Ho provato comunque e mi da errore a te funziona?fra3point ha scritto:Esatto ritornano rispettivamente le componenti x ed y del vettore, quindi è come lavorare su un piano.
Provo anche io un secondo a farlo e vediamo cosa esce...
EDIT:
guarda ho trovato questo esempio che è molto completo e ben fatto, provalo!
http://filebeam.com/13713df73aad4bde839aeddbb83bea82
Codice: Seleziona tutto
CamToCursor=ScreenCoordToVector(-1,mouse_x,mouse_y,0);
NormalizeVector(CamToCursor);
Longi=CalculateVectorLongitude(CamToCursor);
Lati=CalculateVectorLatitude(CamToCursor);
Dist=CheckRayIntersection(floor_obj,x,y,z,Longi,Lati,0);
if (Dist > 90000)
ReleaseVector(CamToCursor);
//Destinazione
CalculateVectorScalarProduct(CamToCursor,CamToCursor,Dist);
X=x+GetVector(CamToCursor,1);
Y=y+GetVector(CamToCursor,2);
Z=z+GetVector(CamToCursor,3); //eventualmente trovi anche la z, ma non serve
ReleaseVector(CamToCursor);
fra3point ha scritto:che errore ti da?
EDIT:
Prova così:
Codice: Seleziona tutto
CamToCursor=ScreenCoordToVector(-1,mouse_x,mouse_y,0); NormalizeVector(CamToCursor); Longi=CalculateVectorLongitude(CamToCursor); Lati=CalculateVectorLatitude(CamToCursor); Dist=CheckRayIntersection(floor_obj,x,y,z,Longi,Lati,0); if (Dist > 90000) ReleaseVector(CamToCursor); //Destinazione CalculateVectorScalarProduct(CamToCursor,CamToCursor,Dist); X=x+GetVector(CamToCursor,1); Y=y+GetVector(CamToCursor,2); Z=z+GetVector(CamToCursor,3); //eventualmente trovi anche la z, ma non serve ReleaseVector(CamToCursor);
Codice: Seleziona tutto
You have attempted to read fromwith id 1, which does nt exists.Please make sure,that you haven't released it already and that the parameters for the math functions are corret.
In questo modo sembra funzionare,anche se in modo un po impreciso , come posso visualizzare il cursore ?fra3point ha scritto:mmm.. Togli il release vector e mettilo nel destroy event!
Codice: Seleziona tutto
DrawTex(<texture>,mouse_x,mouse_y,1,0,255); //L'immagine da disegnare sarà il cursore (ad. es. una freccetta)
EDIT: sorry ho fatto un po di confusione tra i due diversi codici comunque con il secondo codice "il piu funzionante" viene invertito il rilevamento della y, mentre la x viene rilevata correttamente.. se sei riuscito a farlo funzionare credo che la soluzione piu semplice a questo punto sia quella di postare l esmpiofra3point ha scritto:Facile! Disegni un'immagine in (mouse_x,mouse_y).
In uno step event metti:
Codice: Seleziona tutto
DrawTex(<texture>,mouse_x,mouse_y,1,0,255); //L'immagine da disegnare sarà il cursore (ad. es. una freccetta)
Visitano il forum: Nessuno e 16 ospiti