Code source complet -Collision 3D et réponse
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Le problème actuellement est que la fonction SetEntityFriction est bugué dans la beta 7 donc il faut attendre la beta 8, pour pouvoir s'y remettre et que cela devienne intéressant !
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Parce que en gérant la friction, on lui met une friction de 100. Comme ca, il ne glisse plus sur les objets avec lequel il rentre en collision. Et la collision devient parfaite.
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
J'ai refait un autre essai avec la sphere dans le temple , j'ai juste repris ton code et j'ai changé le mesh circuit par le mesh temple.Progi1984 a écrit :Parce que en gérant la friction, on lui met une friction de 100. Comme ca, il ne glisse plus sur les objets avec lequel il rentre en collision. Et la collision devient parfaite.
C'est intéressant, en effet les collisions fonctionnent bien , mais j'ai encore du mal à diriger la sphère, je n'ai pas cherché à changer les paramètres , j'attends la nouvelle beta pour refaire des essais.
Il faudra aussi que je regarde si le FPS tient le choc avec ODE et un écran en 1024x768.
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.
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Du mal à diriger la sphère, je m'en doutais car moi aussi, au début, j'ai eu du mal. En fait, grace à ODE, il y a une sorte d'inertie sur l'objet (dans ton cas, la sphère).comtois a écrit :C'est intéressant, en effet les collisions fonctionnent bien , mais j'ai encore du mal à diriger la sphère.
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
Yahououuouou !!!
Je me suis levé ce matin , et je me suis dit : "Tiens et si tu réfléchissais un peu pour changer ?"
Du coup j'ai sorti une feuille blanche un crayon ,et j'ai fait des cercles trigos , et j'ai enfin compris mon erreur et pourquoi le vecteur directeur de mes rayons n'était pas correct
Avant je l'écrivais ainsi
Alors que ça fonctionne beaucoup mieux comme ça :
Rah lala , on ne fait jamais assez de cercles trigos avant de coder 
Bon je vais pouvoir passer à la suite ,depuis le temps que ça me turlupinait cette affaire.
Je me suis levé ce matin , et je me suis dit : "Tiens et si tu réfléchissais un peu pour changer ?"
Du coup j'ai sorti une feuille blanche un crayon ,et j'ai fait des cercles trigos , et j'ai enfin compris mon erreur et pourquoi le vecteur directeur de mes rayons n'était pas correct

Avant je l'écrivais ainsi
Code : Tout sélectionner
\Direction\x = COS_DEG(Camera\AngleX)
\Direction\y = SIN_DEG(Camera\AngleY)
\Direction\z = -SIN_DEG(Camera\AngleX)
Code : Tout sélectionner
\Direction\x = COS_DEG(Camera\AngleX)
\Direction\y = TAN_DEG(Camera\AngleY)
\Direction\z = -SIN_DEG(Camera\AngleX)

Bon je vais pouvoir passer à la suite ,depuis le temps que ça me turlupinait cette affaire.
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.
Et ca fonctionne dans toutes les directions ?
Voila comment moi je procédais dans T3D:
la caméra aux angles 0, 0, 0 a une direction de 0, 0, 1
(ou -1 dans ogre il me semble)
ensuite je fais tourner ce vecteur (avec une matrice où avec la méthode boeuf au choix)
je normalise (pas réellement nécessaire, sauf pour combiner des rotations par exemple) et hop j'ai mon vecteur directeur.
Dri
Voila comment moi je procédais dans T3D:
la caméra aux angles 0, 0, 0 a une direction de 0, 0, 1
(ou -1 dans ogre il me semble)
ensuite je fais tourner ce vecteur (avec une matrice où avec la méthode boeuf au choix)
je normalise (pas réellement nécessaire, sauf pour combiner des rotations par exemple) et hop j'ai mon vecteur directeur.
Dri
oui ça fonctionne dans tous les angles, il n'y a plus de soucis 
En ce qui concerne l'usage d'une matrice pour faire les rotations, j'envisage de le faire pour le rubick cube d'Erix14.
C'est un beau sujet, intéressant à coder, pour l'instant je l'ai mis de côté, mais j"y songe, ça sera un bon exercice , il faut tourner dans tous les sens, ça risque d'être bien prise de tête , je vais adorer ça

En ce qui concerne l'usage d'une matrice pour faire les rotations, j'envisage de le faire pour le rubick cube d'Erix14.
C'est un beau sujet, intéressant à coder, pour l'instant je l'ai mis de côté, mais j"y songe, ça sera un bon exercice , il faut tourner dans tous les sens, ça risque d'être bien prise de tête , je vais adorer ça

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.
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
@Comtois : tu parles pour koi là ? tes collisions ?
Moi aussi, j'ai pensé ce matin. ODE pourra permettre de faire des trucs cool.
Genre :
- comme sous ET, imaginer que l'on est sur de la glace (en mettant 0 à la friction, je pense)
- un bowling (là c du costaud)
- plein de trucs sympas : imaginer un truc à la HL2
Moi aussi, j'ai pensé ce matin. ODE pourra permettre de faire des trucs cool.
Genre :
- comme sous ET, imaginer que l'on est sur de la glace (en mettant 0 à la friction, je pense)
- un bowling (là c du costaud)
- plein de trucs sympas : imaginer un truc à la HL2
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
C'est bizzarre : t'as dlé le fichier avec les data ?
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
ça me parait difficile.Not Found
The requested URL /ogre3dtest.zip was not found on this server.
Euh, les gars, quand vous réalisez une démo, vous pouvez pas faire un zip avec tout dedans ? Les hébergeurs gratuits c'est pas ça qui manque !
Parce que franchement, ça donne pas envie de tester, de devoir télécharger un fichier data, un fichier avec la dll, de devoir compiler le code soi-même, etc...
Bon, c'était mon coup de gueule

- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
La gaffe, c'est moi qui m'était trompé de fichier
Dsl
http://www.purebasic.com/odetest3d.zip
Remodifié dans le sujet
Désolé, je suis là pour donner du code. J'aurais donné un package complet dans le cas où j'aurais trouvé cela intéressant à packager. Là, ce n'est qu'un petit code de rien du tt expliquant les collisions avec ode et comment déplacer des objets et leur mettre une inertie.

http://www.purebasic.com/odetest3d.zip
Remodifié dans le sujet

Désolé, je suis là pour donner du code. J'aurais donné un package complet dans le cas où j'aurais trouvé cela intéressant à packager. Là, ce n'est qu'un petit code de rien du tt expliquant les collisions avec ode et comment déplacer des objets et leur mettre une inertie.
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
MAJ de mon code (pour les datas aller voir page 11 de ce topic) pour la beta 8
Code : Tout sélectionner
;
; ------------------------------------------------------------
;
; PureBasic - Entity
;
; (c) 2002 - Fantaisie Software
;
; ------------------------------------------------------------
;
Define.f KeyX, KeyY,KeyXCam, KeyYCam, MouseX, MouseY
Define.l actif
Global actifmesh.s
IncludeFile "Screen3DRequester.pb"
#PB_Entity_StaticBody = 1
#PB_Entity_BoxBody = 2
#PB_Entity_SphereBody = 3
#PB_Shadow_None = 0
#PB_Shadow_Modulative = 1 ; Black shadow (fast)
#PB_Shadow_Additive = 2 ; Additive translucent shadow (more expensive with severl lights)
#PB_Entity_Solid = 0
#PB_Entity_Wireframe = 1 << 0
#PB_Entity_Plot = 1 << 1
#PB_Entity_CastShadow = 1 << 2
#PB_3DArchive_Recursive = 2
Enumeration
#TrackEntity
#OgreEntity
#CubeEntity
#NinjaEntity
#SphereEntity
EndEnumeration
actif=#CubeEntity
actifmesh="Cube"
If InitEngine3D()
Add3DArchive("Data\Skybox.zip", #PB_3DArchive_Zip)
Add3DArchive("Data\Dragon.zip", #PB_3DArchive_Zip)
Add3DArchive("Data\Ogre\" , #PB_3DArchive_FileSystem)
Add3DArchive("Data\Circuit\", #PB_3DArchive_FileSystem)
Add3DArchive("Data\Cube\" , #PB_3DArchive_FileSystem)
Add3DArchive("Data\Ninja\" , #PB_3DArchive_FileSystem)
Add3DArchive("Data\Sphere\" , #PB_3DArchive_FileSystem)
Add3DArchive("Data\" , #PB_3DArchive_FileSystem)
Parse3DScripts()
InitSprite()
InitKeyboard()
InitMouse()
If Screen3DRequester()
AmbientColor(RGB(128,128,128))
EnableWorldPhysics(1)
WorldShadows(#PB_Shadow_Additive)
EnableWorldCollisions(1)
OgreMesh = LoadMesh(#PB_Any, "OgreHead.mesh")
TrackMesh = LoadMesh(#PB_Any, "racingcircuit.mesh")
CubeMesh = LoadMesh(#PB_Any, "Cube.mesh")
SphereMesh = LoadMesh(#PB_Any, "Sphere.mesh")
Text = LoadTexture(#PB_Any, "r2skin.jpg")
Mat = CreateMaterial(#PB_Any, TextureID(Text))
Steel = LoadTexture(#PB_Any, "RustySteel.jpg")
SteelMaterial = CreateMaterial(#PB_Any, TextureID(Steel))
DisableDebugger
CreateEntity(#OgreEntity , MeshID(OgreMesh), 0, 10, 40, 0)
CreateEntity(#TrackEntity , MeshID(TrackMesh), 0, 0, 00, 0)
CreateEntity(#CubeEntity , MeshID(CubeMesh), MaterialID(Mat), 20, 40, 0)
CreateEntity(#SphereEntity, MeshID(SphereMesh), MaterialID(SteelMaterial), 0, 40, 0)
EnableDebugger
EntityPhysicBody(#TrackEntity, #PB_Entity_StaticBody)
EntityRenderMode(#TrackEntity, 0)
EntityPhysicBody(#OgreEntity, #PB_Entity_BoxBody)
EntityRenderMode(#OgreEntity, 0)
ScaleEntity(#OgreEntity, 0.1, 0.1, 0.1)
SetEntityMass(#OgreEntity, 1)
SetEntityFriction(#OgreEntity,30)
EntityPhysicBody(#SphereEntity, #PB_Entity_SphereBody)
EntityRenderMode(#SphereEntity,0)
ScaleEntity(#SphereEntity, 0.05, 0.05, 0.05)
SetEntityMass(#SphereEntity,1)
SetEntityFriction(#SphereEntity, 30)
EntityPhysicBody(#CubeEntity, #PB_Entity_BoxBody)
EntityRenderMode(#CubeEntity,0)
ScaleEntity(#CubeEntity, 0.1, 0.1, 0.1)
SetEntityMass(#CubeEntity, 1)
SetEntityFriction(#CubeEntity, 30)
CreateLight(0, RGB(255,255,255), 100.0, 100, 0)
SkyBox("desert07.jpg")
CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0,0,0,30)
Repeat
Screen3DEvents()
ClearScreen(RGB(0, 0, 0))
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Pad1) Or KeyboardPushed(#PB_Key_1)
actif=#CubeEntity
actifmesh="Cube"
ElseIf KeyboardPushed(#PB_Key_Pad2) Or KeyboardPushed(#PB_Key_2)
actif=#SphereEntity
actifmesh="Sphere"
ElseIf KeyboardPushed(#PB_Key_Pad3) Or KeyboardPushed(#PB_Key_3)
actif=#OgreEntity
actifmesh="Ogre"
EndIf
If KeyboardPushed(#PB_Key_Left)
KeyX = -100
ElseIf KeyboardPushed(#PB_Key_Right)
KeyX = 100
Else
KeyX = 0
EndIf
If KeyboardPushed(#PB_Key_Up)
KeyY = -100
ElseIf KeyboardPushed(#PB_Key_Down)
KeyY = 100
Else
KeyY = 0
EndIf
If KeyboardPushed(#PB_Key_A)
KeyXCam = -1
ElseIf KeyboardPushed(#PB_Key_D)
KeyXCam = 1
Else
KeyXCam = 0
EndIf
If KeyboardPushed(#PB_Key_W)
KeyYCam = -1
ElseIf KeyboardPushed(#PB_Key_S)
KeyYCam = 1
Else
KeyYCam = 0
EndIf
If KeyboardPushed(#PB_Key_Space)
MoveEntity(#OgreEntity, 10, 40, 0)
EndIf
EndIf
If ExamineMouse()
MouseX = -MouseDeltaX()/10
MouseY = -MouseDeltaY()/10
EndIf
;If KeyXCam<>0: Debug "KeyXCam"+Str(KeyXCam):EndIf
;If KeyYCam<>0:Debug "KeyYCam"+Str(KeyYCam):EndIf
;If KeyX<>0:Debug "KeyX"+Str(KeyX):EndIf
;If KeyY<>0:Debug "KeyY"+Str(KeyY):EndIf
RotateCamera(0, MouseX, MouseY, 0)
MoveCamera (0, KeyXCam, 0, KeyYCam)
MoveEntity(actif,KeyX, 0, KeyY)
If ExamineWorldCollisions()
While NextWorldCollision()
If CheckEntityCollision(#CubeEntity, #SphereEntity)
Debug "Cube and Sphere collide !"
ElseIf CheckEntityCollision(#CubeEntity, #OgreEntity)
Debug "Cube and Ogre collide !"
ElseIf CheckEntityCollision(#SphereEntity, #OgreEntity)
Debug "Sphere and Ogre collide !"
EndIf
Wend
EndIf
RenderWorld()
Screen3DStats()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
End
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
ça reste encore difficile à contrôler , et autre chose que je voulais te dire la dernière fois , ça gère bien des collisions , la boule rebondit , mais que faire pour obtenir des collisions glissantes ? je me vois mal avec un personnage rebondissant sur les murs 
Pour moi il manque encore des trucs à ODE dans PB pour que je puisse l'utiliser.
Par contre , je pense que le bowling ça doit être faisable ?
il suffit de lancer la boule ,elle chamboule les quilles à sa guise,ensuite il faut tester la position des quilles , celles qui n'ont pas bougées sont remontées , on évacue les autres avec un cube qui avance par exemple , et on remet en place les quilles restantes.

Pour moi il manque encore des trucs à ODE dans PB pour que je puisse l'utiliser.
Par contre , je pense que le bowling ça doit être faisable ?
il suffit de lancer la boule ,elle chamboule les quilles à sa guise,ensuite il faut tester la position des quilles , celles qui n'ont pas bougées sont remontées , on évacue les autres avec un cube qui avance par exemple , et on remet en place les quilles restantes.
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.