DésoléDr. Dri a écrit :(sauf qu'à la fin j'avais envie de gerber lol)
Sphere 3D
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.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
-
Frenchy Pilou
- Messages : 2194
- Inscription : jeu. 27/janv./2005 19:07
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
la solution, mais moi j'ai jamais regardé, je veux trouver tout seul !
Pas encore réussi
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...

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...
-
Frenchy Pilou
- Messages : 2194
- Inscription : jeu. 27/janv./2005 19:07
Super balèze la démo que l'on peut "rotationner" 
13 seconde 57
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
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
13 seconde 57
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
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
Je crois que j'ai trouvé un bug dans ton code
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
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 Je serais tenté de dire que le pôle sud est en bas (u = 0 et v = 1)
Dri
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
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
EndDataSectionhttp://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.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.