Page 3 sur 3

Publié : dim. 05/févr./2006 16:51
par comtois
Dr. Dri a écrit :(sauf qu'à la fin j'avais envie de gerber lol)
Désolé :lol:

Publié : dim. 05/févr./2006 20:35
par Good07
Super Comtois ! 8O

Un peu Hypnotique, mais vraiment super. 8)

Publié : dim. 05/févr./2006 21:21
par Frenchy Pilou
http://www.rubiks.com/lvl3/index_lvl3.c ... vl3=clbsol#

la solution, mais moi j'ai jamais regardé, je veux trouver tout seul ! :)
Pas encore réussi :roll:

Publié : dim. 05/févr./2006 22:07
par Backup
voici la methode que j'utilise et qui est tres bien decrite la :

http://cyril.webzzanine.net/cube/index.html

sauf pour le dernier mouvement , j'en es trouvé un par moi meme
tres simple a retenir , contrairement a celui qui est donné dans cette methode



tu n'y arrivera jamais tous seul , car cela demande un sacres boulot
d'investigation, et de retenir, les test qui reussissent (dans le deplacement des couleurs) , etde ne pas s'embrouiller au millieu d'une recherche...
:?

Publié : dim. 05/févr./2006 22:43
par Frenchy Pilou
Super balèze la démo que l'on peut "rotationner" :D

13 seconde 57 8O Oh l'autre :)
http://members.chello.nl/r.vanbruchem/Ron_13.57.avi

trouvé sur ce site de fous furieux
http://www.speedcubing.com/

25 seconde 63 d'une main !
http://members.chello.nl/r.vanbruchem/3 ... on-Gyu.wmv
et de la gauche en plus :lol:

Et ce gamin de 6 ans (il a un peu plus de mal car ses mains sont encore trop petites ! )
37 secondes! http://studwww.ugent.be/~snhendri/UlfWong_3789.wmv
Dobro c'est pas possible tu ronffles pendant tes essais :lol:

Publié : mar. 07/févr./2006 10:26
par Dr. Dri
Je crois que j'ai trouvé un bug dans ton code

Code : Tout sélectionner

   ;Pole sud 
   *PtrV\px=0
   *PtrV\py=0    
   *PtrV\pz=-1
   CalculNormale
   *PtrV\Couleur=MaCouleur(Random(255),Random(255),Random(255))
   *PtrV\u=0
   *PtrV\v=0
   *PtrV + SizeOf(Vertex)
   
   ;Pole nord
   *PtrV\px=0
   *PtrV\py=0    
   *PtrV\pz=1
  CalculNormale
   *PtrV\Couleur=MaCouleur(Random(255),Random(255),Random(255))
   *PtrV\u=0
   *PtrV\v=0 
Les pôles sont opposés mais ont la même coordonnée de texture
Je serais tenté de dire que le pôle sud est en bas (u = 0 et v = 1)

Dri :)

Publié : jeu. 16/févr./2006 6:50
par comtois
pour le rubik , je dois sûrement m'y prendre comme un manche , un jour va falloir que je prenne le temps de comprendre comment fonctionne rotateEntity() avec PB :)
on tourne dans les repères de l'entity ? de la scène 3D ? Pourquoi faut-il faire un RotateEntity0,X,0,0) pour tourner sur l'axe des Y de la scène ?
Est-ce que la rotation sur chaque axe est indépendante des autres axes ?
Apparemment non.

Je ne sais pas si c'est un bug , en tout cas , ça ne m'arrange pas :d

Dans le code suivant j'ai un phénomène curieux :
Pour tester , l'ordre d'appui sur les touches est important , c'est une version light de mon code .

Après avoir lancé le programme , il faut appuyer sur la flèche haut du curseur. Le cube va tourner , et la face bleue va s'orienter correctement.
Jusque là tout va bien.

Ensuite si j'appuie sur la flèche droite, le cube va bien tourner autour de l'axe fixe (matérialisé par un cube vert) , et il se place à la bonne position , par contre il tourne sur l'axe X alors que je ne demande pas de rotation en X !
Voila mon problème , il ne devrait pas tourner en X , alors est-ce un bug ou je n'ai rien compris aux fonctionnement des rotations ? ce qui est fort possible.

Et ça c'est un exe qui montre concrètement le but de ce code.
http://perso.wanadoo.fr/comtois/sources/Rubik.exe
Si vous lancez le code , et que vous utilisez les flèches gauche et droite ,la face tourne bien . Par contre si vous utilisez les flèches haut et bas pour faire tourner la face de droite , et qu'ensuite vous utilisez les flèches gauche et droite , on retrouve le problème de rotation en X.

J'ai une version plus complète en cours ,il est maintenant possible de tourner dans tous les sens , mais toujours avec mon erreur de rotation en X :?

Code : Tout sélectionner

;- Initialisation
If InitEngine3D() = 0
 MessageRequester( "Erreur" , "Impossible d'initialiser la 3D , vérifiez la présence de engine3D.dll" , 0 )
 End
EndIf

If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse()=0
 MessageRequester( "Erreur" , "Impossible d'initialiser DirectX 7 Ou plus" , 0 )
 End
ElseIf OpenScreen( 800 , 600 , 32 , "M3D_Matrix3D" ) = 0
 MessageRequester( "Erreur" , "Impossible d'ouvrir l'écran " , 0 )
 End
EndIf
Structure Vertex
px.f
py.f
pz.f
nx.f
ny.f
nz.f
co.l
tu.f
tv.f
EndStructure

Structure Face
  p1.w
  p2.w
  p3.w
  p4.w
  p5.w
  p6.w
EndStructure
Structure s_Cube
  No.l
EndStructure
Structure s_Angle
  AngleX.f
  AngleY.f
  AngleZ.f
EndStructure
Macro MaCouleur(Rouge,Vert,Bleu)
  Rouge << 16 + Vert << 8 + Bleu
EndMacro

;-Texture
For i = 0 To 2
CreateTexture(i,64,64)
StartDrawing(TextureOutput(i))
Box(0,0,64,64,$111111)
If i = 0
  Box(1,1,62,62,$FFFFFF)
ElseIf i=1
  Box(1,1,62,62,$FF)
Else
  Box(1,1,62,62,$00FF00)
EndIf
StopDrawing()
;-Material
CreateMaterial(i,TextureID(i))
Next i
MaterialAmbientColor(0,-1)




;-Entity
Global Taille=50
Global AngleX.f,AngleY.f,AngleZ.f
Global Dim Entity.s_Angle(26)

;Création de 3 entitys
;L'entity 0 est mobile
;Les entitys 1 et 2 sont fixes , elles servent de repère
No=0
z = 1
y = 2
x = 2

For r = 0 To 2
  *Ptr.Vertex=AllocateMemory(SizeOf(Vertex)*24)
  CopyMemory(?Vertices,*Ptr,SizeOf(Vertex)*24)
  CreateMesh(No,10)
  ;Couleur dessus
  *Mem.Vertex = *Ptr
  For i = 0 To 3
    *Mem\co=MaCouleur(0,0,255)
    *Mem + SizeOf(Vertex)
  Next i 
  ;Couleur dessous
  *Mem.Vertex = *Ptr + 4 * SizeOf(Vertex)
  For i = 0 To 3
    *Mem\co=MaCouleur(255,255,255)
    *Mem + SizeOf(Vertex)
  Next i 
  ;Couleur devant
  *Mem.Vertex = *Ptr + 8 * SizeOf(Vertex)
  For i = 0 To 3
    *Mem\co=MaCouleur(255,255,0)
    *Mem + SizeOf(Vertex)
  Next i 
  ;Couleur derriere
  *Mem.Vertex = *Ptr + 12 * SizeOf(Vertex)
  For i = 0 To 3
    *Mem\co=MaCouleur(255,128,0)
    *Mem + SizeOf(Vertex)
  Next i 
  ;Couleur gauche
  *Mem.Vertex = *Ptr + 16 * SizeOf(Vertex)
  For i = 0 To 3
    *Mem\co=MaCouleur(0,255,0)
    *Mem + SizeOf(Vertex)
  Next i 
  ;Couleur droit
  *Mem.Vertex = *Ptr + 20 * SizeOf(Vertex)
  For i = 0 To 3
    *Mem\co=MaCouleur(255,0,0)
    *Mem + SizeOf(Vertex)
  Next i 
  SetMeshData(No, #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_Color | #PB_Mesh_UVCoordinate , *Ptr,24) 
  SetMeshData(No,#PB_Mesh_Face,?Triangles,12)
  CreateEntity(No,MeshID(No),MaterialID(r))
  ScaleEntity(No,Taille - 1,Taille - 1,Taille - 1)
  EntityLocate(No, x * Taille , y * Taille , z * Taille)
  No+1
Next r
;Fixe la position des repères
EntityLocate(1, 2 * Taille , 1 * Taille , 1 * Taille)
EntityLocate(2, 1 * Taille , 1 * Taille , 2 * Taille)


;-Camera
CreateCamera(0,0,0,100,100)
CameraBackColor(0,RGB(0,0,255))
AmbientColor(RGB(200,200,200))
CameraLocate(0,EntityX(Centre) + 250 ,EntityY(Centre)+ 250,EntityZ(Centre))
MoveCamera(0,0,40,350)
CameraLookAt(0,EntityX(Centre),EntityY(Centre),EntityZ(Centre))


Macro CosDeg(Angle)
   Cos((Angle) * 0.0174533)
EndMacro
Macro SinDeg(Angle)
  Sin((Angle) * 0.0174533)
EndMacro
Repeat
  If ExamineKeyboard()
    If KeyboardReleased(#PB_Key_Right)
      Repeat
        Entity(0)\AngleZ + 1
        AngleZ + 1
        RotateEntity(0,Entity(0)\AngleX,Entity(0)\AngleY,Entity(0)\AngleZ)  ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<< Pas d'angle X
        EntityLocate(0,50 - SinDeg(AngleZ-90)*Taille,50+CosDeg(AngleZ-90)*Taille,EntityZ(0))
        RenderWorld()
        FlipBuffers()
      Until AngleZ >= 90
      AngleZ = 0
    ElseIf KeyboardReleased(#PB_Key_Up)
        Repeat
          Entity(0)\AngleY + 1
          AngleY + 1
          RotateEntity(0,Entity(0)\AngleX,Entity(0)\AngleY,Entity(0)\AngleZ) ; <<<<<<<<<<<<<<<<<<<<<<<<<<<< Pas d'angle X
          EntityLocate(0,EntityX(0),50+CosDeg(AngleY)*Taille,50+SinDeg(AngleY)*Taille)
          RenderWorld()
          FlipBuffers()
        Until AngleY >= 90
        AngleY=0
    EndIf
  EndIf
  RenderWorld()
  StartDrawing(ScreenOutput())
  DrawText(0,0,"EntityAngleX(0) = " + StrF(EntityAngleX(0),2))
  DrawText(0,20,"Entity(0)\AngleX = " + StrF(Entity(0)\AngleX,2))
  DrawText(0,60,"pourquoi EntityAngleX(0) change , alors que je ne fais pas de rotation en X ? ")
  StopDrawing()
  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)

DataSection
Vertices:
;Dessus 0 à 3
Data.f -0.5,0.5,-0.5
Data.f 0,1,0
Data.l 0
Data.f 0,0

Data.f 0.5,0.5,-0.5
Data.f 0,1,0
Data.l 0
Data.f 0,1

Data.f 0.5,0.5,0.5
Data.f 0,1,0
Data.l 0
Data.f 1,1

Data.f -0.5,0.5,0.5
Data.f 0,1,0
Data.l 0
Data.f 1,0

;Dessous 4 à 7
Data.f -0.5,-0.5,0.5
Data.f 0,-1,0
Data.l 0
Data.f 0,0

Data.f 0.5,-0.5,0.5
Data.f 0,-1,0
Data.l 0
Data.f 0,1

Data.f 0.5,-0.5,-0.5
Data.f 0,-1,0
Data.l 0
Data.f 1,1

Data.f -0.5,-0.5,-0.5
Data.f 0,-1,0
Data.l 0
Data.f 1,0

;Devant 8 à 11
Data.f -0.5,0.5,0.5
Data.f 0,0,1
Data.l 0
Data.f 0,0

Data.f 0.5,0.5,0.5
Data.f 0,0,1
Data.l 0
Data.f 0,1

Data.f 0.5,-0.5,0.5
Data.f 0,0,1
Data.l 0
Data.f 1,1

Data.f -0.5,-0.5,0.5
Data.f 0,0,1
Data.l 0
Data.f 1,0

;Derrière 12 à 15
Data.f 0.5,0.5,-0.5
Data.f 0,0,-1
Data.l 0
Data.f 0,0

Data.f -0.5,0.5,-0.5
Data.f 0,0,-1
Data.l 0
Data.f 0,1

Data.f -0.5,-0.5,-0.5
Data.f 0,0,-1
Data.l 0
Data.f 1,1

Data.f 0.5,-0.5,-0.5
Data.f 0,0,-1
Data.l 0
Data.f 1,0

;Cote gauche 16 à 19
Data.f -0.5,0.5,-0.5
Data.f -1,0,0
Data.l 0
Data.f 0,0

Data.f -0.5,0.5,0.5
Data.f -1,0,0
Data.l 0
Data.f 0,1

Data.f -0.5,-0.5,0.5
Data.f -1,0,0
Data.l 0
Data.f 1,1

Data.f -0.5,-0.5,-0.5
Data.f -1,0,0
Data.l 0
Data.f 1,0

;Cote droit 20 à 23
Data.f 0.5,0.5,0.5
Data.f 1,0,0
Data.l 0
Data.f 0,0

Data.f 0.5,0.5,-0.5
Data.f 1,0,0
Data.l 0
Data.f 0,1

Data.f 0.5,-0.5,-0.5
Data.f 1,0,0
Data.l 0
Data.f 1,1

Data.f 0.5,-0.5,0.5
Data.f 1,0,0
Data.l 0
Data.f 1,0

Triangles:
;0 à 3
Data.w 2,1,0
Data.w 0,3,2
;4 à 7
Data.w 6,5,4
Data.w 4,7,6
;8 à 11
Data.w 10,9,8
Data.w 8,11,10
;12 à 15
Data.w 14,13,12
Data.w 12,15,14
;16 à 19
Data.w 18,17,16
Data.w 16,19,18
;20 à 23
Data.w 22,21,20
Data.w 20,23,22
EndDataSection

Publié : jeu. 16/févr./2006 13:39
par erix14
Bravo, c'est un excellent début :10:
j'ai hâte de pouvoir en faire une partie. :D