Page 1 sur 1

help transformsprite3D() !

Publié : jeu. 01/sept./2005 18:36
par bombseb
Salut, j'ai un probleme avec cette fonction...

j'affiche plusieurs centaines de sprite avec transform3Dsprite et il y en a toujours 4 ou 5 qui ne s'affichent jamais (jamais les même)
alors je suis obligé de faire ma boucle d'affichage 2 fois !

et j'ai une question :

avant de faire un transformsprite3D, on est obligé d'afficher le sprite avec displaysprite3D ?? parceque à chaque fois il faut que je l'efface avec un box de couleur 0...

Publié : jeu. 01/sept./2005 23:55
par filperj
Je vois 2 pistes:

Un sprite3D ne s'affichera pas si les coins ne se présentent pas dans le sens des aiguilles d'une montre.

Après chaque Flipbuffers(), il faut redessiner tout l'écran (avec clearscreen(), ou en le remplissant de sprites ou d'autre choses), parceque tu ne peus pas prévoir dans quel état sera le buffer qui revient de l'affichage (mais ce n'est vrai qu'en mode plein écran).

Bon, si ça se trouve c'est pas ça du tout... :roll:

Publié : ven. 02/sept./2005 0:17
par bombseb
Un sprite3D ne s'affichera pas si les coins ne se présentent pas dans le sens des aiguilles d'une montre.
hummm j'en suis pas si sur...je suis en train de programmer un "voxel" qui est quasiment fini d'ailleurs. je peut le faire tourner sur lui même autour de son centre : tout les sprites s'affichent (seulement si je les affiche 2 fois de suite). je peut t'envoyer le fichier tu verra que les sprites tournent, se retrouvent à l'envers etc...
j'ai vraiment l'impression que c'est aléatoire
d'ailleurs même en les affichant 2 fois, il y a certains sprites qui "buggent"

(le voxel est mappé avec mes sprites au fait)

Publié : ven. 02/sept./2005 0:29
par Dr. Dri
quand je touchai aux sprites 3D je ne pouvais pas les afficher "dos à l'écran" donc dans le sens inverse des aiguilles d'une montre...

enfin bon ca date d'un truc comme purebasic 3.91 (je sais plus trop lol =)

Dri

Publié : ven. 02/sept./2005 0:48
par Dr. Dri
ici j'ai créé un sprite avec un ligne qui "decend vers la droite"
si le sprite3d s'affichait à l'envers on devrai voir cette ligne inclinée vers la gauche, hors quand c'est censé être le cas je n'ai rien à l'écran...

PB 3.94 8O

Code : Tout sélectionner

ExamineDesktops()

If ( InitSprite() And InitSprite3D() And InitKeyboard() ) = 0
  End
EndIf

OpenScreen(DesktopWidth(0), DesktopHeight(0), DesktopDepth(0), "")

CreateSprite  (0, 32, 32, #PB_Sprite_Texture)

If StartDrawing( SpriteOutput(0) )
  Box (0, 0, 32, 32, $00FFFF)
  Line(0, 0, 32, 32, $FF0000)
  StopDrawing()
EndIf

CreateSprite3D(0, 0)

Repeat
  ClearScreen(0, 0 ,0)
  ExamineKeyboard()
  
  i = Int(f.f) % 32
  
  If Start3D()
    
    TransformSprite3D(0, i, 0, 31-i, 0, 31-i, 31, i, 31)
    DisplaySprite3D(0, 20, 20)
    
    Stop3D()
  EndIf
  
  If StartDrawing( ScreenOutput() )
    
    Locate(0, 0)
    If i < 16
      chaine$ = "face"
    Else
      chaine$ = "dos"
    EndIf
    DrawText("le sprite est de " + chaine$)
    
    StopDrawing()
  EndIf
  
  f + 0.5
  FlipBuffers()
Until KeyboardPushed(#PB_Key_All)
Dri :!:

Publié : ven. 02/sept./2005 8:27
par bombseb
Un sprite3D ne s'affichera pas si les coins ne se présentent pas
dans le sens des aiguilles d'une montre.
pardon, je crois que j'avais mal compris cette phrase effectivement si les points ne sont pas dans le sens des aiguilles d'une montre le sprite ne s'affiche pas (j'ai pas essayé mais apparement c'est vrai).

sauf que les points de mes sprites sont dans le bon sens. et qu'il y a toujours 4 ou 5 sprites qui ne s'affichent pas (jamais les mêmes) alors je suis obligé de tous les réafficher une deuxieme fois et là ca marche
je crois que le mieux est de vous donner le code source que vous puissiez voir par vous même, je le posterais ce soir.

Publié : dim. 04/sept./2005 11:00
par bombseb
personne n'a une idée ???

Publié : dim. 04/sept./2005 12:37
par Dr. Dri
Moi je veux bien essayer de faire une fonction pour savoir si on est dans le sens des aiguilles d'une montre pour que tu puisses vérifier... mais c'est pas évident...

Dri