Texte 3d et quelques fonctions

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Texte 3d et quelques fonctions

Message par comtois »

En feuilletant un livre sur DirectX , j'ai lu une page qui expliquait comment faire des textes 3D avec Direct3D , et je me suis dis "tiens ! ça pourrait être sympa ça ".
En plus apparemment il est possible de transformer son texte3D en mesh , ce qui est encore mieux.
Et les commandes permettent de panacher texte 2D et 3D dans un monde tridimensionnel .

Par contre j'ai vite refermé le livre , je n'y comprends rien :)

Il reste l'idée , que peut-on en faire ?

Bon comme c'est OGRE qui gère la 3D, ce n'est peut-être pas possible de l'ajouter ?
Mais peut-être que ça pourrait entrer dans la catégorie Sprite3D ?

------------------------------------------------------------

Ensuite , différentes fonctions que j'utilise souvent pour la 3D ,qui seraient intéressantes d'avoir directement dans purebasic:

Math


SinD() : Calcul le sin d'un angle en degré
CosD() .... etc ...

CurveValue(valeur cible, valeur en cours,vitesse)
cette commande renvoie une valeur d'auto-interpolation basée sur une vitesse donnée. Cette commande recalcule une valeur en l'amenant progressivement de la valeur actuelle à la valeur cible, et ce à une certaine vitesse.
La façon dont je m'y suis pris pour cette fonction n'est pas terrible , si quelqu'un a une idée pour faire autrement je suis preneur .

CurveAngle(Valeur cible,valeur en cours, vitesse)
la différence avec la fonction précédente c'est que l'angle est maintenu entre 0 et 360°
cette fonction permet une gestion de caméra plus souple.

Wrapvalue()
Renvoie une valeur corrigée de façon à ce qu'elle soit toujours comprise entre 0 et 360°.

------------------------------------------------

Bon et pour celles-ci , je ne sais pas si c'est vraiment utile , mais je les colle quand même , si elles sont incluses dans purebasic ,c'est aussi bien .

NewXvalue(valeur X en cours, angle,distance)
calcule la nouvelle position en X selon l'angle et la distance
Par contre ,ça serait bien d'avoir un paramètre supplémentaire pour tenir compte de la 3ème dimension d'un terrain , parce qu'actuellement comme je fais , ce n'est valable qu'en 2D .Sur un terrain bosselé , il faudrait prendre en compte la pente du terrain.

NewZvalue(valeur Z en cours, angle,distance)
idem pour Z
filperj
Messages : 395
Inscription : jeu. 22/janv./2004 1:13

Message par filperj »

En feuilletant un livre sur DirectX , j'ai lu une page qui expliquait comment faire des textes 3D avec Direct3D , et je me suis dis "tiens ! ça pourrait être sympa ça ".
En plus apparemment il est possible de transformer son texte3D en mesh , ce qui est encore mieux.
Et les commandes permettent de panacher texte 2D et 3D dans un monde tridimensionnel .

Par contre j'ai vite refermé le livre , je n'y comprends rien

Il reste l'idée , que peut-on en faire ?

Bon comme c'est OGRE qui gère la 3D, ce n'est peut-être pas possible de l'ajouter ?
Mais peut-être que ça pourrait entrer dans la catégorie Sprite3D ?
Peut-être en écrivant les caractères dans une image et en délimitant leurs contours à grands coups de "point" #pinkie (point! point!)
Après, reste à en tirer une mesh... hm... moi je dis ça comme ça :roll:
Le chaos l'emporte toujours sur l'ordre
parcequ'il est mieux organisé.
(Ly Tin Wheedle)
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message par Guimauve »

Math


SinD() : Calcul le sin d'un angle en degré
CosD() .... etc ...

Moi j'opterais plutôt pour quelque chose du genre :
Resultat.f = Sin(Angle.f [,Options])

'Options' est un paramètre optionnel et peut être une combinaison des constantes suivantes :

#PB_Angle_Radian : L'angle est spécifié en radian.
#PB_Angle_Degres : L'angle est spécifié en degré.
#PB_Angle_Gradian : L'angle est spécifié en gradian.
Ça ne deverais pas être bien difficile pour Fred d'ajouter ces option dans la librairie Math standard de PB.

C'est certain que c'est bien plus pratique de calculer en degré mais moi dans certain calculs en mécanique, j'ai pas le choix je dois utiliser valeur d'angle en radians.

Avec une procédure du genre :

Code : Tout sélectionner

DefType.f pi 
!fldpi 
!fstp dword[v_pi] 

; Conversion des Degré en Radian
Procedure.f DegToRad(Angle.f)
     ProcedureReturn Angle * pi / 180
EndProcedure
Tu pourrais faire comme ça :

Code : Tout sélectionner

Sin(DegToRad(Angle.f)) 
C'est pas tellement plus long et ça fonctionne avec toute les fonctions d'angles (Sin(Angle.f), Cos(Angle.f), Tan(Angle.f), ...).

A+

Guimauve
Répondre