Tracés 2D et 3D

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
KrisJNT
Messages : 110
Inscription : ven. 31/oct./2008 16:51

Tracés 2D et 3D

Message par KrisJNT »

Bonjour à tous !

Je me suis lancé dans la 3D avec PureBasic, ça a été un succès !
Seul bémol : as moyen de faire du tracé en 2D sur l'écran.

En effet : ScreenOutput() me renvoie 0 seulement si j'ai InitEngine3D() avant.

J'ai bien essayé avec des Sprites, mais rien y fait ! SpirteOutput(#MonSprite) me renvoie aussi 0 en présence d'InitEngine3D().

J'ai donc essayé de charger un Sprite depuis un fichier extérieur quelconque : LoadSpirte() ne fonctionne pas !

J'ai alors essayé de changer les commandes d'ordre mais le seul qui fonctionne est celui-ci :

InitEngine3D() > InitSprite() > OpenScreen() > CreateSprite()/LoadSprite()

Si bien que créer un sprite, récupérer le ScreenOutput() avant InitEngine3D() n'est pas possible.

A croire que le dessin en 2D m'en veut ! :D

J'ai trouvé une alternative temporaire : utiliser l'API de Windows, mais ça n'est pas efficace : l'API ne fonctionne pas avec le FlipBuffers(), donc on voit le tracé clignoter.

Si vous avez une piste pour moi, n'hésitez pas !

Je posterai le code au besoin (sachant qu'il nécessite des fichiers externes).

Merci pour vos réponses,

Kris
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

la seule réelle alternative, c'est N3XT-D

qui va te permettre bien mieux, et sans effort !! ;)
KrisJNT
Messages : 110
Inscription : ven. 31/oct./2008 16:51

Message par KrisJNT »

Je viens juste d'aller sur le site :D ! Y'a-t-il une doc avec ?
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Les inits sont à placer une seule fois en début de programme. Si tu utilises la 3d, tu dois mettre l'InitEngine3D() en tout premier. Après ça, tu peux ouvrir/fermer et récupérer le ScreenOutput de tous les écrans que tu veux. Pourquoi voudrais-tu faire un ScreenOutput() avant l'InitEngine3D()???
Si c'est un problème avec la version 4.30 de Purebasic, tu peux revenir à la 4.20.
KrisJNT
Messages : 110
Inscription : ven. 31/oct./2008 16:51

Message par KrisJNT »

En fait j'avais essayé ca :

InitSprite()
ScreenOutput()
OpenScreen()
id = ScreenOutput() ;==> La je récupère l'id du screen
InitEngine3D()
StartDrawing(id) ;==>Là je m'en sert

Mais évidemment, ça n'a pas marché... (je m'étais dit : psuique ScreenOutput() me renvoie 0 après un InitEngine3D(), pourquoi ne pas récupérer l'id avant ?)
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

En fait les inits() sont plus des sortes de directives qui disent au compilateur quel type de code il doit générer pour les routines comme sprite() etc. Par exemple, quand on met l'initengine3d, le code généré pour l'openscreen est complètement différent! Il est donc inutile d'essayer de bidouiller, ça ne fonctionnera jamais.
Grâce à ces astuces, un programme purebasic est toujours le plus léger possible, puisqu'il n'embarque que ce dont il a besoin :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

quoiqu'il en soit, le Purebasic est assez lourding !!


toutes ces commandes a la noix, qui ne servent a rien
comme initsprite,start3D , stop3D , ect !!

c'est un peu naze !!

elles devraient etre implicite a l'utilisation des commande de dessins point barre

etre obligé de se coltiner ces trucs, c'est quand meme assez nul non ? :?

allez quelques exemples naze !

on fait

Code : Tout sélectionner

     StartDrawing(SpriteOutput(#sprite_fond))
        Box(0,0,EcranX,EcranY,RGB(0,0,0))
    StopDrawing()

il vaudrai mieux une commande differente pour chaque sortie
genre

Code : Tout sélectionner

 StartDrawing_Sprite(#sprite_fond)
        Box(0,0,EcranX,EcranY,RGB(0,0,0))
    StopDrawing()

StartDrawing_screen(#sprite_fond)
        Box(0,0,EcranX,EcranY,RGB(0,0,0))
    StopDrawing()
ça ferai deja moins de parentheses :lol:

etc ..............

voila encore un exemple :

on fait :
CreateSprite(#fourmi, 8, 16,#PB_Sprite_Texture) ; c'est la meme image qui est employé
; dessine le sprite
StartDrawing(SpriteOutput(#fourmi))
Box(2,0,4,16, RGB($D6,$74,$3F))
StopDrawing()

CreateSprite3D(#fourmi3D, #fourmi)

on pourrai faire :
CreateSprite(#fourmi, 8, 16,#PB_Sprite_Texture, 3D) ;

StartDrawing(SpriteOutput(#fourmi))
Box(2,0,4,16, RGB($D6,$74,$3F))
StopDrawing()

plus besoin de ce " CreateSprite3D(#fourmi3D, #fourmi)"
il suffirai que Fred ajoute un flag dans la commande createsprite()

j'en ai plein d'autres des comme ça :lol:

le purebasic , demande a etre sérieusement épuré !! :)

de toute façon ça sert visiblement a rien de faire des suggestions

Fred et son equipe , sont comme le gouvernement actuelle
il dise oui! oui ! mais ne change rien ! :?
(d'ailleurs , je suis injuste , ils ne disent meme pas "oui oui", ils ne disent rien ... )

la dictature c'est "Ferme ta gueule"
la republique c'est "cause toujours"
Dernière modification par Backup le sam. 23/mai/2009 20:04, modifié 7 fois.
Anonyme

Message par Anonyme »

on fait
Code:

CreateSprite(#sprite_fond,EcranX,EcranY)
StartDrawing(SpriteOutput(#sprite_fond))
Box(0,0,EcranX,EcranY,RGB(0,0,0))
StopDrawing()


on pourrai faire

Code:

CreateSprite(#sprite_fond,EcranX,EcranY)
StartDrawing(#sprite_fond)
Box(0,0,EcranX,EcranY,RGB(0,0,0))
StopDrawing()

ben oui on s'en fou nous du spriteoutput()

Bah , non , on lui dit directement dans quel buffer dessiné , si tu lui passe un vulgaire pointeur sans l'output() , la fct° Startdrawing() va devoir énumérer les output() valide et trouvé le bon !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

comme par hasar tu as retenu l'exemple le plus foireux !!
c'est meme pour ça que je me suis empressé d'en donner un autre ;)
Anonyme

Message par Anonyme »

Parce que pour les autres je suis d'accord avec toi :D
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

:D
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

pour mélanger 2D et 3D , tu dois passer par des sprites, et dans le sous système directx9.


tu as un exemple d'affichage de sprite sur de la 3D ici

http://www.purebasic.fr/english/viewtopic.php?t=34593

tu peux dessiner, écrire sur ton sprite comme tu le ferais sur l'écran.
ou encore cet exemple , je dessine une ligne à l'écran sur de la 3D en passant par un sprite.

http://www.purebasic.fr/english/viewtopic.php?t=37127
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
KrisJNT
Messages : 110
Inscription : ven. 31/oct./2008 16:51

Message par KrisJNT »

Les exemples sont intéressants, mais SpriteOutput renvoie aussi 0 :(
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

juste pour être sûr, tu as bien été dans les options du compilateur ?
ensuite tu as bien tapé directx9 dans le champ bibliothèque du sous système ?

Ensuite regarde le fichier ogre.log il y a peut-être des infos intéressantes
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
KrisJNT
Messages : 110
Inscription : ven. 31/oct./2008 16:51

Message par KrisJNT »

Euh... j'ai pas trop compris : où dois-je taper DirectX9 ?
Sinon, j'ai un peu de mal avec les log, mais je peux toujours essayer de le comprendre.
Répondre