essai de rotation sans sprite3d

Partagez votre expérience de PureBasic avec les autres utilisateurs.
filperj
Messages : 395
Inscription : jeu. 22/janv./2004 1:13

essai de rotation sans sprite3d

Message par filperj »

Bon, c'est brouillon tout ça, ça marche qu'en mode 256 couleurs, et bien sûr c'est beaucoup trop lent pour du rendu en temps réel (là ça va parsqu'il y a qu'un seul bob).
M'enfin... ça a l'air de marcher quand même...

Je me suis servi du logiciel à Denis pour les datas du champignon (sisi, c'est censé représenter un champignon).

Code : Tout sélectionner



Global pi.f
!fldpi
!fstp dword[v_pi]
;Debug pi



Procedure.f angle(sin.f,cos.f)
 If ASin(sin)<0
   ProcedureReturn -ACos(cos)
  Else
   ProcedureReturn ACos(cos)
 EndIf
EndProcedure


 Structure barr
  b.b[0]
 EndStructure
Structure bob
 sprt.l
 *pix.barr
 pitch.l
 larj.w
 haut.w
 clipx.w
 clipy.w
 larjtot.w
 hauttot.w
EndStructure
Procedure creebob(*bob.bob,sprite.l)
 *bob\sprt=sprite
 StartDrawing(SpriteOutput(sprite))
  *bob\pix=DrawingBuffer()
  *bob\pitch=DrawingBufferPitch()
 StopDrawing()
 w=SpriteWidth(sprite)
 h=SpriteHeight(sprite)
 *bob\larj=w
 *bob\haut=h
 *bob\larjtot=w
 *bob\hauttot=h
 *bob\clipx=0
 *bob\clipy=0
EndProcedure

Global *dbf.barr,dbw.l,dbh.l,dbp.l
Procedure drawbob(*bob.bob,x.f,y.f,ang.f,larj.l,hautr.l)
 ljr=*bob\larj
 htr=*bob\haut
 pic=*bob\pitch
 *pix.barr=*bob\pix
 bh=*bob\clipx+(*bob\clipy*pic)
 diag.f=Sqr(larj*larj+hautr*hautr)
 xc.f=x-(Sin(ang+pi/4)*diag/2)
 yc.f=y-(Cos(ang+pi/4)*diag/2)
 For xx=xc-diag To xc+diag : For yy=yc-diag To yc+diag : If xx>=0 And xx<dbw And yy>=0 And yy<dbh
  x=xx:y=yy
  dist.f=Sqr(Pow(x-xc,2)+Pow(y-yc,2))
  If dist<=diag
    angp.f=angle((x-xc)/dist,(y-yc)/dist)-ang
    xp=Sin(angp)*dist*ljr/larj
    yp=Cos(angp)*dist*htr/hautr
    If xp>=0 And xp<ljr And yp>=0 And yp<htr
      ;dbfpix=x2+y2*dbp
      coul.b=*pix\b[bh+xp+yp*pic]
      If coul
        x2=x:y2=y
        *dbf\b[x2+y2*dbp]=coul
      EndIf
    EndIf
  EndIf
 EndIf:Next:Next
EndProcedure


Procedure clipbob(*bob.bob,x.w,y.w,larj.w,haut.w)
 *bob\clipx=x
 *bob\clipy=y
 *bob\larj=larj
 *bob\haut=haut
EndProcedure




InitSprite()
OpenScreen(320,240,8,"")
InitPalette()
;LoadPalette(0,"champ.bmp")
;DisplayPalette(0)
CatchSprite(1,?champbmp,#pb_sprite_memory)
DefType.bob champ
creebob(@champ,1)

CreateSprite(0,320,240,#pb_sprite_memory)
InitKeyboard():InitMouse()
;Clipbob(@champ,champ\clipx,champ\clipy,champ\larj,champ\haut)
dbw=320 : dbh=240

Repeat
 
 If clyp<=16
   Clipbob(@champ,clyp,0,32-clyp,32)
  ElseIf clyp<=32
   clipbob(@champ,16,clyp-16,16,48-clyp)
  ElseIf clyp<=48
   clipbob(@champ,48-clyp,16,clyp-16,16)
  Else
   clipbob(@champ,0,64-clyp,32,clyp-32)
   ;If clip=128 : clyp=0 :Else: clyp+1 :EndIf
 EndIf
 clyp=clypg>>3
 clypg=(clypg+1)&$1ff

 
 
 ExamineKeyboard():ExamineMouse()
 angl.f+0.01
 StartDrawing(SpriteOutput(0))
  Box(0,0,320,240,$800080)
  For x=0 To 310 Step 10 : For y=0 To 230 Step 10
   Plot(x,y,0)
  Next:Next
  *dbf=DrawingBuffer() : dbp=DrawingBufferPitch()
  drawbob(@champ,MouseX(),MouseY(),angl,60,60)
 StopDrawing()
;  UseBuffer(0)
;   DisplayTransparentSprite(1,MouseX(),MouseY())
;  UseBuffer(-1)
 DisplaySprite(0,0,0)
 FlipBuffers()
 
Until KeyboardReleased(#pb_key_escape) Or IsScreenActive()=0

;Debug PeekS(champ\sprt\filename)
DataSection
champbmp:
Data.l $08364D42, $00000000, $04360000, $00280000, $00200000, $00200000
Data.l $00010000, $00000008, $04000000, $0AC30000, $0AC30000, $01000000
Data.l $01000000, $00000000, $00000000, $80000080, $80000000, $00800080
Data.l $00800000, $80800080, $C0C00000, $9DA100C0, $DFE3009D, $200000E0
Data.l $20000040, $20000060, $20000080, $200000A0, $200000C0, $400000E0
Data.l $40000000, $40000020, $40000040, $40000060, $40000080, $400000A0
Data.l $400000C0, $600000E0, $60000000, $60000020, $60000040, $60000060
Data.l $60000080, $600000A0, $600000C0, $800000E0, $80000000, $80000020
Data.l $80000040, $80000060, $80000080, $800000A0, $800000C0, $A00000E0
Data.l $A0000000, $A0000020, $A0000040, $A0000060, $A0000080, $A00000A0
Data.l $A00000C0, $C00000E0, $C0000000, $C0000020, $C0000040, $C0000060
Data.l $C0000080, $C00000A0, $C00000C0, $E00000E0, $E0000000, $E0000020
Data.l $E0000040, $E0000060, $E0000080, $E00000A0, $E00000C0, $004000E0
Data.l $00400000, $00400020, $00400040, $00400060, $00400080, $004000A0
Data.l $004000C0, $204000E0, $20400000, $20400020, $20400040, $20400060
Data.l $20400080, $204000A0, $204000C0, $404000E0, $40400000, $40400020
Data.l $40400040, $40400060, $40400080, $404000A0, $404000C0, $604000E0
Data.l $60400000, $60400020, $60400040, $60400060, $60400080, $604000A0
Data.l $604000C0, $804000E0, $80400000, $80400020, $80400040, $80400060
Data.l $80400080, $804000A0, $804000C0, $A04000E0, $A0400000, $A0400020
Data.l $A0400040, $A0400060, $A0400080, $A04000A0, $A04000C0, $C04000E0
Data.l $C0400000, $C0400020, $C0400040, $C0400060, $C0400080, $C04000A0
Data.l $C04000C0, $E04000E0, $E0400000, $E0400020, $E0400040, $E0400060
Data.l $E0400080, $E04000A0, $E04000C0, $008000E0, $00800000, $00800020
Data.l $00800040, $00800060, $00800080, $008000A0, $008000C0, $208000E0
Data.l $20800000, $20800020, $20800040, $20800060, $20800080, $208000A0
Data.l $208000C0, $408000E0, $40800000, $40800020, $40800040, $40800060
Data.l $40800080, $408000A0, $408000C0, $608000E0, $60800000, $60800020
Data.l $60800040, $60800060, $60800080, $608000A0, $608000C0, $808000E0
Data.l $80800000, $80800020, $80800040, $80800060, $80800080, $808000A0
Data.l $808000C0, $A08000E0, $A0800000, $A0800020, $A0800040, $A0800060
Data.l $A0800080, $A08000A0, $A08000C0, $C08000E0, $C0800000, $C0800020
Data.l $C0800040, $C0800060, $C0800080, $C08000A0, $C08000C0, $E08000E0
Data.l $E0800000, $E0800020, $E0800040, $E0800060, $E0800080, $E08000A0
Data.l $E08000C0, $00C000E0, $00C00000, $00C00020, $00C00040, $00C00060
Data.l $00C00080, $00C000A0, $00C000C0, $20C000E0, $20C00000, $20C00020
Data.l $20C00040, $20C00060, $20C00080, $20C000A0, $20C000C0, $40C000E0
Data.l $40C00000, $40C00020, $40C00040, $40C00060, $40C00080, $40C000A0
Data.l $40C000C0, $60C000E0, $60C00000, $60C00020, $60C00040, $60C00060
Data.l $60C00080, $60C000A0, $60C000C0, $80C000E0, $80C00000, $80C00020
Data.l $80C00040, $80C00060, $80C00080, $80C000A0, $80C000C0, $A0C000E0
Data.l $A0C00000, $A0C00020, $A0C00040, $A0C00060, $A0C00080, $A0C000A0
Data.l $A0C000C0, $C0C000E0, $C0C00000, $C0C00020, $C0C00040, $C0C00060
Data.l $C0C00080, $FBF000A0, $FBF000FF, $808000FF, $00000080, $FF0000FF
Data.l $FF000000, $00FF00FF, $00FF0000, $FFFF00FF, $FFFF0000, $000000FF
Data.l $E0E0E000, $E0E0E0E0, $E0E0E0E0, $E0E0E0E0, $E0E0E0E0, $E0E0E0E0
Data.l $00E0E0E0, $00000000, $000000E0, $00000000, $00000000, $64646464
Data.l $00000064, $00000000, $E0000000, $E0000000, $00000000, $00000000
Data.l $64640000, $64646464, $64646464, $00000000, $00000000, $00E000E0
Data.l $00000000, $FB000000, $FB64FBFB, $FBFB6464, $64646464, $00000064
Data.l $00000000, $00E0E000, $00000000, $FBFB0000, $FBFBFBFB, $FBFBFBFB
Data.l $FBFBFBFB, $0000FBFB, $00000000, $00E0E000, $00000000, $FBFBFB00
Data.l $FBFBFBFB, $FBFBFBFB, $FBFBFBFB, $0000FBFB, $00000000, $00E0E000
Data.l $00000000, $FBFBFB00, $FBFBFBFB, $FBFBFBFB, $FBFBFBFB, $00FBFBFB
Data.l $00000000, $00E0E000, $00000000, $FBFBFB00, $FBFBFBFB, $FBFBFBFB
Data.l $FBFBFBFB, $00FBFBFB, $00000000, $00E0E000, $00000000, $FBFBFB00
Data.l $FBFBFBFB, $FBFBFBFB, $FBFBFBFB, $0000FBFB, $00000000, $00E0E000
Data.l $00000000, $FBFBFB00, $FBFBFBFB, $FBFBFBFB, $FBFBFBFB, $00FBFBFB
Data.l $00000000, $00E0E000, $00000000, $FBFBFB00, $FBFBFBFB, $FBFBFBFB
Data.l $FBFBFBFB, $0000FBFB, $00000000, $00E0E000, $00000000, $FBFB0000
Data.l $FBFBFBFB, $FBFBFBFB, $FBFBFBFB, $0000FBFB, $00000000, $00E0E000
Data.l $00000000, $FBFB0000, $FBFBFBFB, $FBFBFBFB, $FBFBFBFB, $0000FBFB
Data.l $00000000, $00E0E000, $00000000, $FBFB0000, $FBFBFBFB, $FBFBFBFB
Data.l $FBFBFBFB, $000000FB, $00000000, $00E0E000, $00000000, $FBFB0000
Data.l $FBFBFBFB, $FBFBFBFB, $FBFBFBFB, $00000000, $00000000, $00E0E000
Data.l $00000000, $FB000000, $FBFBFBFB, $FBFBFBFB, $00FBFBFB, $00000000
Data.l $00000000, $00E0E000, $00000000, $00000000, $FBFBFBFB, $FBFBFBFB
Data.l $00FBFBFB, $00000000, $00000000, $00E0E000, $00000000, $00000000
Data.l $FBFBFBFB, $FBFBFBFB, $0000FBFB, $00000000, $00000000, $00E0E000
Data.l $00000000, $00000000, $FBFBFBFB, $FBFBFBFB, $000000FB, $00000000
Data.l $00000000, $00E0E000, $00000000, $00000000, $FBFBFB00, $FBFBFBFB
Data.l $000000FB, $00000000, $00000000, $00E0E000, $00000000, $00000000
Data.l $FBFBFB00, $FBFBFBFB, $00000000, $00000000, $00000000, $00E0E000
Data.l $F9F90000, $00F96767, $FBFBFB00, $FBFBFBFB, $F9000000, $0000F9F9
Data.l $00000000, $00E0E000, $6767F900, $F9676767, $FBFBFB00, $FBFBFBFB
Data.l $FFFF67F9, $F9FFFFFF, $000000F9, $00E0E000, $6767F900, $67676767
Data.l $FBFBFB67, $67F9FBFB, $F9F96767, $67F9FFFF, $00F96767, $00E0E000
Data.l $67F90000, $67676767, $FBFBF967, $6767F9FB, $67676767, $67676767
Data.l $00F96767, $00E0E000, $F9000000, $F9676767, $F9F9F9F9, $FFF967F9
Data.l $6767F9FF, $F9676767, $00F9F9F9, $00E0E000, $00000000, $FFFFF9F9
Data.l $6767FFFF, $FFFFF967, $6767FFFF, $00F96767, $00000000, $00E0E000
Data.l $00000000, $FFFFF900, $6767FFFF, $FFFFFF67, $6767FFFF, $00000067
Data.l $00000000, $00E0E000, $00000000, $FF000000, $6767FFFF, $FFFFF967
Data.l $F967F9FF, $00000000, $00000000, $E000E000, $00000000, $00000000
Data.l $6767FFFF, $67676767, $00F96767, $00000000, $00000000, $000000E0
Data.l $000000E0, $00000000, $6767F900, $67676767, $000000F9, $00000000
Data.l $E0000000, $00000000, $E0E0E000, $E0E0E0E0, $F9E0E0E0, $E0F9F9F9
Data.b  -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, 0, 0, 0