Bon alors comme tu l'as compris il y a plusieurs types de coordonnées.
Il y a tout un processus qui permet de passer des coordonnées locales (souvent appelé en anglais "object space" ou "model space" ) aux coordonnées de fenetre ("window space" ou parfois "image space" , mais ça dépend du contexte). Entre ces 2 systemes, plusieurs intermédiaires sont utilisés.
Il y a tout d'abord les coordonnées globales ("world space" ). On y parvient en appliquant les transformations (translate/rotate/scale) liées à l'objet (où se trouve-t-il, quelle est son orientation etc...).
Ensuite, on passe des coordonnées globales aux coordonnées caméra ("camera space" ou plus souvent "eye space" ). Pour y parvenir, on applique les transformations liées à la caméra (ou se trouve l'observateur, vers ou regarde-t-il).
Une fois les coordonnées caméra connues, on passe dans ce qu'on appelle les coordonnées de clipping ("clip space" ). Pour cela, on applique la transformation liée au volume visualisation, appelé aussi frustum. C'est ce qu'on appelle la projection.
Apres le clipping, on applique la perspective, ce qui nous amene dans ce qu'on appelle les coordonnées de périphérique normalisées ("normalised device coordinates" ).
Enfin, on applique une derniere transformation qui correspond au viewport, c'est à dire la portion de fenetre qui va etre utilisée pour le dessin. Ceci nous donne (enfin) les coordonnées de fenetre ("window coordinates" ).
gluProject permet d'effectuer toutes ces étapes (de la meme maniere que ce sera effectué quand tu enverras tes vertex dans le pipeline) et de fournir le résultat. Si j'ai bien compris, toi ce qui t'intéresse c'est la premiere étape uniquement : passer de local en global. Pour ça il te faut la matrice objet. Comme tu le sais, OpenGL utilise une matrice MODELVIEW qui englobe les étapes 1 et 2. C'est à dire que dans la meme matrice, tu inscris la transformation liée à la caméra (par exemple avec gluLookAt) et la transformation liée à l'objet (glTranslate / Rotate / Scale).
Sachant tout cela, tu as le choix : soit tu géneres directement la matrice objet, soit tu utilises OpenGL. Dans ce cas, tu pars d'une matrice identité, tu accumules les transformations (glTranslate & co), et tu récuperes le résultat avec un glGetFloatv(GL_MODELVIEW_MATRIX, mat); (mat etant un tableau de 16 floats).
Une fois que tu as la matrice objet, il ne reste qu'a multiplier les points à coordonnées locales par cette matrice pour obtenir les coordonnées globales.