|
Re: OpenGL ou comment afficher un texte en 3D |
|
---|---|---|
OverdOzed
![]() ![]() Inscrit:
23/02/2006 19:10 De Sideula
Post(s): 2063
|
Je ne connais pas bien Python, mais GLU est une bibliothèque C. Donc elle utilise la nomenclature C pour les types de données.
Un "double" est un nombre à virgule flottante sur 64 bits. En C, il existe un type de nombres à virgule flottante sur 32 bits (nommé simplement "float"). D'après mes souvenirs de Python, confirmés ici, les nombres à virgule flottante sont déjà sur 64 bits. Tu n'as donc pas à t'en soucier. Citation : Almost all platforms represent Python float values as 64-bit “double-precision” values, according to the IEEE 754 standard. Pour l'aspect ratio, c'est pour définir par exemple si ton image est en 16/9 ou en 4/3. Tu divises la largeur par la hauteur de ton image, ça te donne l'"aspect ratio". Ton zNear me paraît élevé. D'habitude il est plus proche de la caméra, ça peut expliquer des choses pour l'absence de texte. En gros, il n'est pas dans la partie rendue par la caméra (ce qu'on appelle le frustum). Essaie avec un zNear de 0.1 pour tester ? Je ne connais pas le reste, notamment BLF.
Contribution le : 17/07 10:36:43
|
|
_________________
Développement en cours du hARMful Engine |
||
![]() ![]() |
|
Re: OpenGL ou comment afficher un texte en 3D |
|
---|---|---|
OverdOzed
![]() ![]() Inscrit:
23/02/2006 19:10 De Sideula
Post(s): 2063
|
Je n'utilise pas GLU qui est dépréciée avec les versions récentes d'OpenGL (en fait ça se base sur de vieilles choses qui ne sont plus utilisées). Donc je sais pas si je pourrai t'aider énormément, on va essayer quand même.
![]() Si tu bloques pour les paramètres de gluProject, je te les explique. Pour les matrices d'OpenGL, tu peux les avoir via la fonction glGetDoublev. Reste à voir où cette fonction se trouve dans BGL... Je pars sur du bgl.glGetDoublev() dans les exemples. Il faudra corriger si c'est pas ça. Apparemment, les matrices sont récupérées sous forme de donnée de type bgl.Buffer. J'imagine qu'il faut créer un bgl.Buffer de flottants et les donner en paramètres. Un truc au pif dans ce style (je ne code pas en Python, donc il faudra ajuster pour que ça passe ! ![]()
Maintenant, ton "model_view" contiendrait les valeurs nécessaires au paramètre "model" de gluProject(). Pour les suivants, c'est pareil sauf que tu utilises bgl.GL_PROJECTION_MATRIX (16 floats aussi) et bgl.GL_VIEWPORT (4 floats seulement).
Une fois que tu as ces matrices, tu peux utiliser gluProject() pour récupérer la position à l'écran de l'objet dans les paramètres winX, winY et winZ.
Contribution le : 17/07 12:47:10
|
|
_________________
Développement en cours du hARMful Engine |
||
![]() ![]() |
|
Re: OpenGL ou comment afficher un texte en 3D |
|
---|---|---|
OverdOzed
![]() ![]() Inscrit:
23/02/2006 19:10 De Sideula
Post(s): 2063
|
Oui en effet, ça plante. J'ai Blender sous la main pour tester.
En fait, la doc que j'ai consultée était celle d'une vieille version... Quelle patate, j'ai pas vérifié ! Voilà, avec ça, ça ne crashe pas.
Edit: la différence réside dans le bgl.GL_DOUBLE pour allouer le Buffer. Avec GL_FLOAT (deux fois plus petit), il écrivait en dehors du tableau... ![]() Si c'est plus lisible pour toi, tu peux aussi utiliser la notation :
La sortie dans la console en faisant un 'print(model_view)' est un peu plus facile à lire, si jamais tu en as besoin.
Contribution le : 17/07 16:25:25
|
|
_________________
Développement en cours du hARMful Engine |
||
![]() ![]() |
|
Re: OpenGL ou comment afficher un texte en 3D |
|
---|---|---|
OverdOzed
![]() ![]() Inscrit:
23/02/2006 19:10 De Sideula
Post(s): 2063
|
Je n'ai jamais eu besoin d'utiliser cette fonction, mais ce que j'en comprends : tu donnes la position de l'objet 3D qui est dans la scène. La fonctionne calcule ce qu'il faut pour te donner sa position à l'écran, comme si c'était un élément 2D.
Une chose qui s'en approche, ce sont les billboards : un plan de la scène mais toujours orienté vers la caméra. Les trois premiers paramètres sont donc la position (world position) de l'objet dont tu veux avoir la position à l'écran. Viennent ensuite les trois matrices dont nous avons discuté. Les trois derniers sont ceux que tu récupères : cette fameuse position à l'écran. C'est à cette position que tu peux afficher le texte. En particulier, je pense qu'il te faudrait passer en vue orthographique (gluOrtho) pour pouvoir l'afficher en 2D. Instinctivement, je dirais que tu peux utiliser ces trois derniers paramètres dans ton appel :
Je sais pas si c'est plus clair. Je vais essayer d'utiliser BLF pour voir un peu tout ça et revenir avec plus d'informations si je parviens à quelque chose !
Contribution le : 17/07 19:53:05
|
|
_________________
Développement en cours du hARMful Engine |
||
![]() ![]() |
|
Re: OpenGL ou comment afficher un texte en 3D |
|
---|---|---|
OverdOzed
![]() ![]() Inscrit:
23/02/2006 19:10 De Sideula
Post(s): 2063
|
Oui, j'ai eu cette erreur aussi.
En fait, comme la fonction écrit dedans mais qu'en Python c'est pas possible, il faut lui passer un Buffer de 1 flottant. Je te passe le blend que j'ai fait. Le texte s'affiche mais ça me frustre qu'il ne soit pas là où il le faut. https://sharefiles.app/download/5b0de08df5353d0aab0f4ccc4c5bdf7cb9efa7b8 Je voudrais le positionner à l'endroit où se trouve le Empty. Je ne comprends pas trop d'où vient le problème pour l'instant... ![]()
Contribution le : 17/07 21:36:48
|
|
_________________
Développement en cours du hARMful Engine |
||
![]() ![]() |