
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.







La date/heure actuelle est 03/08/2025 16:56:27
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
Voir le sujet précédent ¤ Voir le sujet suivant | |
---|---|
Auteur | Message |
BenGorre Légende vivante ![]() Messages: 301 |
Moi j'ai posé la question qu'estce que c'est, pas à quoi ca sert, c'est bizarre cette manie chez certaines personne de répondre à une autre question que celle posée.
Bon je vais poser une question plus précise alors: les coordonnées du vecteur correspondent à quoi EXACTEMENT? Et quand je demandais c'était justement que non ces vecteurs ne sont pas comme ceux que j'ai vue en maths, en maths un vecteur était déterminé par 2 ensembles de coordonnées et un sens. Merci quand même d'avoir essayer de me répondre, c'est l'intention qui compte, je ne t'en veus pas^^. _________________ La mort n'est rien seul le fait de mourir est terrible Henry Fielding 1745 ![]() Le serveur Filandre a été stoppé pour le moment, je on travail à la conversion vers NWN2. |
Revenir en haut | ![]() ![]() ![]() |
Sith Vicious Grand Sage du Conseil ![]() Messages: 693 |
Tu prends ton vecteur (une flêche quoi). A l'origine tu imagine un repère orthonormé. Tu prends la pointe du vecteur, tu fais des projections (à angle droit je sais plus le mot) sur chaque axe, ça te donne les coordonnées x,y,z du vecteur.
Je pense que ça revient à faire une soustraction entre les 2 ensemble de coordonnées dont tu parles (point arrivée - point origine, selon le "sens"). Dans NWN, l'origine par défaut d'un vecteur est le point (0,0,0) de la zone (soit le coin sud ouest). |
Revenir en haut | ![]() ![]() ![]() |
BenGorre Légende vivante ![]() Messages: 301 |
Merci beaucoup Sith, maintenant Semcatala a parlé du vecteur du joueur, ce vecteur est défini par rapport à l'origine du décor ou par rapport au joueur?
_________________ La mort n'est rien seul le fait de mourir est terrible Henry Fielding 1745 ![]() Le serveur Filandre a été stoppé pour le moment, je on travail à la conversion vers NWN2. |
Revenir en haut | ![]() ![]() ![]() |
Semcatala Grand Sage du Conseil ![]() Messages: 951 |
BenGorre> Ben en fait c'est sur que si tu n'as jamais assisté a un cours de math sur les vecteurs en 3eme , tu ne peux pas comprendre de quoi on parles.
Et on ne peut pas te refaire l'intégralité du cours sur le forum , par contre il y a des liens ..... [http] C'est super bien expliqué et ça pourra pas mal t'aider. Quand tu aura bien compris le sens des mots " coordonnées " , " axe des X ", etc etc etc et de l'ensemble de ces mots clé , tu saisira mieux de quoi on parles ! ![]() Je ne fais pas ce post pour essayer de t'embêter ou te prendre pour un imbécile , mais faut juste être réaliste .... c'est sur que si tu n'a pas un minimum de bases , on ne peut pas non plus tout t'apprendre ...... ! Et puis ouvre l'éditeur et regarde en bas a gauche en déplacant ta souris sur la zone , tu y vera les X et les Y qui changent en même temps que tu positionne ta souris sur la zone , et tu verra donc bien ou sont les cordonnées. _________________ " La ruse doit être employée pour faire croire que l'on est où l'on est pas, que l'on veut ce qu'on ne veut pas. " CdG " La véritable école du Commandement est la culture générale. " CdG " Une société prête à sacrifier un peu de liberté contre un peu de sécurité ne mérite ni l'une ni l'autre et finit par perdre les deux. " B.F " La gloire se donne seulement à ceux qui l'ont toujours rêvée. " CdG " La fin de l'espoir est le commencement de la mort. " CdG |
Revenir en haut | ![]() ![]() ![]() |
BenGorre Légende vivante ![]() Messages: 301 |
J'ai des bases, j'ai suivis les cours de maths de 3eme, j'avais 17 de moyenne même (1er de la classe en maths) et jai eu 18 au bachalauréat^^.
Tout ca pour te dire que si je dit que le système des vecteurs de NWN est pas tout à fait le même que celui vu en maths, je sais de quoi je parle(ou tous mes profs de Lycée et collèges étaient débiles). JE ne dis pas qu'un vecteur en lui même est une chose différente mais il n'est pas définit de la même facon (ne pas entendre définit par "qu'est ce que ca veut dire"). Voilà grace à Sith Vicious je comprend maintenant, il me reste juste la réponse à ma dernière question et je vais faire des merveilles avec les vecteurs(ca va me servir à une amélioration du NIC où on vérrait vraiment le personnage monter et descendre du cheval). _________________ La mort n'est rien seul le fait de mourir est terrible Henry Fielding 1745 ![]() Le serveur Filandre a été stoppé pour le moment, je on travail à la conversion vers NWN2. |
Revenir en haut | ![]() ![]() ![]() |
Sith Vicious Grand Sage du Conseil ![]() Messages: 693 |
Théoriquement, un vecteur c'est une direction et une longueur dans un repère, ça n'a pas une origine définie.
Dans NWN, c'est pareil. Mais c'est le moyen d'obtenir les vecteurs qui pose problème. Le repère, c'est les coordonnées de la zone, unité le mètre (1/10 d'un carré de terrain). Il y a une confusion possible entre vecteur et position, du fait de la fonction : NWScript :
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème. Elle renvoit un vecteur, qui n'est rien d'autre que l'ensemble des coordonnées de oTruc dans la zone. Tu parles du vecteur du joueur. Tout dépend de ce qu'on entend par là. Soit ce vecteur là (GetPosition). Soit, et je pense que c'est plus ce que tu cherches, un vecteur orienté comme le joueur, en gros partant de ses pieds et allant en face de lui. Je viens de faire ce script, je pense que ça devrait t'aider à mieux comprendre : ça crée un effet visuel à 1 mêtre devant le PC (mettre dans le onitemactivated) : NWScript :
void main() { object oItem = GetItemActivated(); object oPC = GetItemActivator(); vector vNorm = Vector(1.0,1.0,0.0); //SendMessageToPC(oPC,VectorTo String(vNorm)); //dans x0_i0_position float fFacing = GetFacing(oPC); //orientation du joueur vNorm.x*=cos(fFacing); vNorm.y*=sin(fFacing); vNorm = VectorNormalize(vNorm); //SendMessageToPC(oPC,VectorTo String(vNorm)); location lNew = Location(GetArea(oPC),GetPosition(oPC)+vNorm,0.0); effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S); ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eVis,lNew); } Note : les angles sont définis dans le rpère à 2 dimension (x,y) à moins que j'ai raté un épisode. J'espère que ça peut t'aider, moi les maths c'est pas mon truc (ça m'a fait mal de réviser mes cosinus et sinus pour scripter huhu ![]() |
Revenir en haut | ![]() ![]() ![]() |
-MeteZ- Seigneur ![]() Messages: 205 Localisation: Région Parisienne (95) |
Je me suis amusé à faire une bibliothèque qui sert à manipuler les vecteurs. Elle demande qu'à s'agrandir
![]() NWScript :
//: ![]() //:: Name Fonctions de vecteurs /// //:: Filename in_res_vecteurs \\\ //:: Created By: -MeteZ- \\\ // \\\ // Si vous desirez modifier/arranger, faire part /// // de vos appreciations/remarques, n'hesitez pas, /// // a me le faire savoir. /// ////////////////////////////// ///////////////////// /* VERSION : 0.1 vec_ precedant la fonction : manipule les vecteurs cal_ precedant la fonction : manipule les nombres Contient plusieurs fonction permettant de manipuler plus simplement les vecteurs nwn. Note : Les vecteurs de nwn ont une particularite, ils sont dotes d'une valeur z car nous sommes dans un plan orthonorme a 3 axes. */ // Eleve fNb au carre float cal_eleverAuCarre(float fNb); float cal_eleverAuCarre(float fNb) { return pow(fNb, 2.0); } // Renvoie le x milieu entre vecteur1 et vecteur 2 // Une valeur inferieure a 0 sort de l'"ecran" de la zone nwn float vec_xMilieu(vector vecteur1, vector vecteur2); float vec_xMilieu(vector vecteur1, vector vecteur2) { return (vecteur1.x + vecteur2.x) / 2; } // Renvoie le y milieu entre vecteur1 et vecteur 2 // Une valeur inferieure a 0 sort de l'"ecran" de la zone nwn float vec_yMilieu(vector vecteur1, vector vecteur2); float vec_yMilieu(vector vecteur1, vector vecteur2) { return (vecteur1.y + vecteur2.y) / 2; } // Renvoie le z milieu entre vecteur1 et vecteur 2 // Une valeur inferieure a 0 sort de l'"ecran" de la zone nwn float vec_zMilieu(vector vecteur1, vector vecteur2); float vec_zMilieu(vector vecteur1, vector vecteur2) { return (vecteur1.z + vecteur2.z) / 2; } // Renvoie la distance (en therme de vecteur) entre vecteur1 et vecteur2 // Cette fonction renvoie les memes valeurs que GetDistanceBetween // et GetDistanceBetweenLocations mais n'utilise que les vecteurs float vec_distanceEntre(vector vecteur1, vector vecteur2); float vec_distanceEntre(vector vecteur1, vector vecteur2) { float fX = cal_eleverAuCarre(vecteur2.x - vecteur1.x); float fY = cal_eleverAuCarre(vecteur2.y - vecteur1.y); float fDistance = sqrt(fX + fY); return fDistance; } // Renvoie le vecteur AB a partir des coordonnees points A et B // Utile pour faire une translation de vecteur AB vector vec_vecteurAB(vector vecteurA, vector vecteurB); vector vec_vecteurAB(vector vecteurA, vector vecteurB) { float x = vecteurB.x - vecteurA.x; float y = vecteurB.y - vecteurA.y; float z = vecteurB.z - vecteurA.z; return Vector(x, y, z); } // Renvoie un vecteur ayant les coordonnes de la translation de vTranslation // par vOrigine. Pour avoir un vecteur comme translation vous pouvez // utilisez la fonction vec_vecteurAB vector vec_translation(vector vOrigine, vector vTranslation); vector vec_translation(vector vOrigine, vector vTranslation) { float x = vOrigine.x + vTranslation.x; float y = vOrigine.y + vTranslation.y; float z = vOrigine.z + vTranslation .z; return Vector(x, y, z); } Par exemple grâce à elle les translations entre deux objets deviennent très simple. Prenons trois objets a, b, c. On veut qu'un VFX apparaisse par la translation du vecteur ab en origine c. Ca donne : NWScript :
object oA = nimporte quoi; object oB = nimporte quoi; object oC = nimporte quoi; vector vA = GetPositionFromLocation(GetLocation(oA)); vector vB = GetPositionFromLocation(GetLocation(oB)); vector vC = Vector(2.0, 15.0, 0.0); // par exemple effect eVisual = EffectVisualEffect(VFX_FNF_TIME_STOP); ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVisual, Location(GetArea(oPC), vec_translation(oC, vec_vecteurAB(oA, oB)), 0.0), 0.0); Lu en francais, la dernière ligne donne : Faire un effet visuel instantannée à la location de la translation du vecteur ab par le vecteur origine c. Et comme je vais qu'on aime bien les schémas ici. Je vais en faire un aussi ![]() Donc on a toujours a, b et c, on nomme l'effet visuel d ![]() Citation : ------------------------- ------------------------- ---c------>d------------- ------------------------- -------------a------>b---- Voili voilou, si vous avez des idées pour agrandir la bibliothèque, faites le savoir. _________________ "Ne dit pas affronter les ténèbres celui qui n'a jamais connu la tombée de la nuit." |
Revenir en haut | ![]() ![]() ![]() |
Sith Vicious Grand Sage du Conseil ![]() Messages: 693 |
Heu, je voudrais pas me la ramener de trop mais :
NWScript :
// Renvoie un vecteur ayant les coordonnes de la translation de vTranslation // par vOrigine. Pour avoir un vecteur comme translation vous pouvez // utilisez la fonction vec_vecteurAB vector vec_translation(vector vOrigine, vector vTranslation); vector vec_translation(vector vOrigine, vector vTranslation) { float x = vOrigine.x + vTranslation.x; float y = vOrigine.y + vTranslation.y; float z = vOrigine.z + vTranslation .z; return Vector(x, y, z); } Ca s'appelle : NWScript :
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème. Tout simplement. Sinon NWScript :
vector vA = GetPositionFromLocation(GetLocation(oA)); // Tu as directement : vector vA = GetPosition(oA); Pour : NWScript :
// Renvoie la distance (en therme de vecteur) entre vecteur1 et vecteur2 // Cette fonction renvoie les memes valeurs que GetDistanceBetween // et GetDistanceBetweenLocations mais n'utilise que les vecteurs float vec_distanceEntre(vector vecteur1, vector vecteur2); float vec_distanceEntre(vector vecteur1, vector vecteur2) { float fX = cal_eleverAuCarre(vecteur2.x - vecteur1.x); float fY = cal_eleverAuCarre(vecteur2.y - vecteur1.y); float fDistance = sqrt(fX + fY); return fDistance; } //Il y a : float vDistance = VectorMagnitude(vecteur2-vecteur1); Pour les positions tout ça pour ceux qui connaissent pas il y a déjà l'incontournable "x0_i0_position" avec plein des trucs bien dedans. |
Revenir en haut | ![]() ![]() ![]() |


Page 2 sur 2 ¤ Aller à la page Précédente 1, 2
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum