Code source complet -Collision 3D et réponse
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Pour des collisions non glissantes, il faut augmenter la friction.
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
Une nouvelle version de TempleComplet avec les sources est dispo.
Elle inclut la gestion de plateformes , et d'ascenseurs.
Ce n'est pas fini , pour éviter de rester coller à la plateforme dans certains cas , j'ai supprimé certains calculs, du coup la plateforme peut vous rentrer dedans si vous n'allez pas dans la même direction.
J'ai ajouté des sphères à détruire , ça permet de tester la gestion du tir.
ça fonctionne au pixel près et en tenant compte des obstacles
Par contre j'ai un souci avec la matière des triangles créés lors d'une explosion , ils devraient prendre la matière de la sphère explosée ,ça fonctionne pour certains, mais d'autres sont noirs ? bug dans mon code ? bug dans PureBasic ? Problème de drivers ? vous constatez la même chose ?
autre truc curieux , c'est le faisceau (laser) qui normalement devrait être détruit immédiatement et remplacé par des triangles, or j'ai l'impression que le mesh n'est pas détruit et est utilisé pour générer certains triangles ?
J'utilise #PB_any pour les meshs et les entitys , là j'ai du mal à dire ce qu'il se passe , j'ai essayé de pister les valeurs de retour des meshs et des entitys , mais en vain , je n'ai rien trouvé d'anormal
http://perso.wanadoo.fr/comtois/sources ... pletV2.zip
Elle inclut la gestion de plateformes , et d'ascenseurs.
Ce n'est pas fini , pour éviter de rester coller à la plateforme dans certains cas , j'ai supprimé certains calculs, du coup la plateforme peut vous rentrer dedans si vous n'allez pas dans la même direction.
J'ai ajouté des sphères à détruire , ça permet de tester la gestion du tir.
ça fonctionne au pixel près et en tenant compte des obstacles

Par contre j'ai un souci avec la matière des triangles créés lors d'une explosion , ils devraient prendre la matière de la sphère explosée ,ça fonctionne pour certains, mais d'autres sont noirs ? bug dans mon code ? bug dans PureBasic ? Problème de drivers ? vous constatez la même chose ?
autre truc curieux , c'est le faisceau (laser) qui normalement devrait être détruit immédiatement et remplacé par des triangles, or j'ai l'impression que le mesh n'est pas détruit et est utilisé pour générer certains triangles ?
J'utilise #PB_any pour les meshs et les entitys , là j'ai du mal à dire ce qu'il se passe , j'ai essayé de pister les valeurs de retour des meshs et des entitys , mais en vain , je n'ai rien trouvé d'anormal

http://perso.wanadoo.fr/comtois/sources ... pletV2.zip
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.
C'est super, bon, les plateformes ne marchent pas parfaitement, mais les collisions avec les objets satiques sont nickels !
Voila le fichier log car il y a l'air d'avoir des trucs pas très "safe"
Voila le fichier log car il y a l'air d'avoir des trucs pas très "safe"

14:29:32: Creating resource group General
14:29:32: Registering ResourceManager for type Material
14:29:32: Registering ResourceManager for type Mesh
14:29:32: Registering ResourceManager for type Skeleton
14:29:32: OverlayElementFactory for type Panel registered.
14:29:32: OverlayElementFactory for type BorderPanel registered.
14:29:32: OverlayElementFactory for type TextArea registered.
14:29:32: Registering ResourceManager for type Font
14:29:32: ArchiveFactory for archive type FileSystem registered.
14:29:32: ArchiveFactory for archive type Zip registered.
14:29:32: DevIL version: Developer's Image Library (DevIL) 1.6.7 Aug 15 2005
14:29:32: DevIL image formats: jpg jpe jpeg pcx png tga vda icb vst raw
14:29:32: Registering ResourceManager for type HighLevelGpuProgram
14:29:32: Direct3D7 Rendering Subsystem created.
14:29:32: ----- DirectDraw Detection Starts
14:29:32: Detected DirectDraw driver Pilote d'affichage principal
14:29:32: ----- DirectDraw Detection Ends
14:29:32: Particle Emitter Type 'Point' registered
14:29:32: Particle Emitter Type 'Box' registered
14:29:32: Particle Emitter Type 'Ellipsoid' registered
14:29:32: Particle Emitter Type 'Cylinder' registered
14:29:32: Particle Emitter Type 'Ring' registered
14:29:32: Particle Emitter Type 'HollowEllipsoid' registered
14:29:32: Particle Affector Type 'LinearForce' registered
14:29:32: Particle Affector Type 'ColourFader' registered
14:29:32: Particle Affector Type 'ColourFader2' registered
14:29:32: Particle Affector Type 'ColourImage' registered
14:29:32: Particle Affector Type 'ColourInterpolator' registered
14:29:32: Particle Affector Type 'Scaler' registered
14:29:32: Particle Affector Type 'Rotator' registered
14:29:32: TerrainSceneManager: Registered a new PageSource for type Heightmap
14:29:32: Registering ResourceManager for type BspLevel
14:29:32: *-*-* OGRE Initialising
14:29:32: *-*-* Version 1.0.7 (Azathoth)
14:29:32: ***************************************
*** Direct3D Subsystem Initialising ***
***************************************
14:29:32: *****************************************
14:29:32: *** Direct3D Subsystem Initialised Ok ***
14:29:32: *****************************************
14:29:32: Registering ResourceManager for type GpuProgram
14:29:32: ResourceBackgroundQueue - threading disabled
14:29:32: D3D7 : Created D3D7 Rendering Window 'PureBasic Ogre' : 1280x1024, 32bpp
14:29:32: Creating DirectDraw surfaces for window with dimensions:
14:29:32: FULLSCREEN w:1280 h:1024 bpp:32
14:29:32: Successfully created full screen rendering surface / flipping chain.
14:29:32: ----- Direct3D Detection Starts
14:29:32: Detected Direct3D Device Microsoft Direct3D RGB Software Emulation
14:29:32: Direct3D Device Capabilities:
14:29:32: Hardware Accelerated: 0
14:29:32: Mipmapping: 1
14:29:32: Bilinear Filtering: 1
14:29:32: Trilinear Filtering: 1
14:29:32: Hardware Transform & Light: 0
14:29:32: Max rendering colour depth: 32
14:29:32: Max single-pass texture layers: 8
14:29:32: Pixel fog supported: 256
14:29:32: Vertex fog supported: 128
14:29:32: This device needs a Z-Buffer
14:29:32: Detected Direct3D Device Microsoft Direct3D Hardware acceleration through Direct3D HAL
14:29:32: Direct3D Device Capabilities:
14:29:32: Hardware Accelerated: 1
14:29:32: Mipmapping: 1
14:29:32: Bilinear Filtering: 1
14:29:32: Trilinear Filtering: 1
14:29:32: Hardware Transform & Light: 0
14:29:32: Max rendering colour depth: 32
14:29:32: Max single-pass texture layers: 8
14:29:32: Pixel fog supported: 256
14:29:32: Vertex fog supported: 128
14:29:32: This device needs a Z-Buffer
14:29:32: Detected Direct3D Device Microsoft Direct3D Hardware Transform and Lighting acceleration capable device
14:29:32: Direct3D Device Capabilities:
14:29:32: Hardware Accelerated: 1
14:29:32: Mipmapping: 1
14:29:32: Bilinear Filtering: 1
14:29:32: Trilinear Filtering: 1
14:29:32: Hardware Transform & Light: 1
14:29:32: Max rendering colour depth: 32
14:29:32: Max single-pass texture layers: 8
14:29:32: Pixel fog supported: 256
14:29:32: Vertex fog supported: 128
14:29:32: This device needs a Z-Buffer
14:29:32: ----- Direct3D Detection Ends
14:29:32: Determining best 3D Device...
14:29:32: Best 3D Device is: Microsoft Direct3D Hardware Transform and Lighting acceleration capable device
14:29:33: Direct3D - Creating Z-Buffer
14:29:33: Depth-Buffer created (32-bit, 8-bit stencil)
14:29:33: Registering ResourceManager for type Texture
14:29:33: RenderSystem capabilities
14:29:33: -------------------------
14:29:33: * Hardware generation of mipmaps: no
14:29:33: * Texture blending: yes
14:29:33: * Anisotropic texture filtering: yes
14:29:33: * Dot product texture operation: yes
14:29:33: * Cube mapping: yes
14:29:33: * Hardware stencil buffer: yes
14:29:33: - Stencil depth: 8
14:29:33: - Two sided stencil support: no
14:29:33: - Wrap stencil values: yes
14:29:33: * Hardware vertex / index buffers: no
14:29:33: * Vertex programs: no
14:29:33: * Fragment programs: no
14:29:33: * Texture Compression: no
14:29:33: * Scissor Rectangle: no
14:29:33: * Hardware Occlusion Query: no
14:29:33: * User clip planes: no
14:29:33: * VET_UBYTE4 vertex element type: no
14:29:33: * Infinite far plane projection: no
14:29:33: * Hardware render-to-texture: no
14:29:33: * Floating point textures: no
14:29:33: * Non-power-of-two textures: no
14:29:33: * Volume textures: no
14:29:33: Particle Renderer Type 'billboard' registered
14:29:33: Added resource location './Temple/' of type 'FileSystem' to resource group 'General'
14:29:33: Added resource location './Sphere/' of type 'FileSystem' to resource group 'General'
14:29:33: Added resource location './Cube/' of type 'FileSystem' to resource group 'General'
14:29:33: Added resource location './Robot/' of type 'FileSystem' to resource group 'General'
14:29:33: Added resource location './Textures/' of type 'FileSystem' to resource group 'General'
14:29:33: Parsing scripts for resource group General
14:29:33: Parsing script Temple.material
14:29:33: Parsing script Robot.material
14:29:33: Finished parsing scripts for resource group General
14:29:33: Texture: Wall06.jpg: Loading 1 faces(PF_B8G8R8,256x256x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,256x256x1.
14:29:33: Texture: RustySteel.jpg: Loading 1 faces(PF_B8G8R8,256x256x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,256x256x1.
14:29:33: Texture: smoke.jpg: Loading 1 faces(PF_B8G8R8,64x64x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,64x64x1.
14:29:33: Mesh: Loading Temple.mesh.
14:29:33: Mesh: Loading Sphere.mesh.
14:29:33: Mesh: Loading Cube.mesh.
14:29:33: Texture: Wall12.jpg: Loading 1 faces(PF_B8G8R8,256x255x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,256x256x1.
14:29:33: Texture: Wood01.jpg: Loading 1 faces(PF_B8G8R8,253x299x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,256x512x1.
14:29:33: Texture: Wall02.jpg: Loading 1 faces(PF_B8G8R8,256x256x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,256x256x1.
14:29:34: Texture: Wood02.jpg: Loading 1 faces(PF_B8G8R8,256x256x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,256x256x1.
14:29:34: Can't assign material PorcelaineShader to SubEntity of E2 because this Material does not exist. Have you forgotten to define it in a .material script?
14:29:34: Texture: Flare.png: Loading 1 faces(PF_B8G8R8,256x256x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,256x256x1.
14:29:34: WARNING: Mesh instance 'M12394136' was defined as manually loaded, but no manual loader was provided. This Resource will be lost if it has to be reloaded.
14:29:34: Can't assign material PorcelaineShader to SubEntity of E12394248 because this Material does not exist. Have you forgotten to define it in a .material script?
14:29:34: WARNING: Mesh instance 'M12394304' was defined as manually loaded, but no manual loader was provided. This Resource will be lost if it has to be reloaded.
14:29:34: Can't assign material PorcelaineShader to SubEntity of E12394416 because this Material does not exist. Have you forgotten to define it in a .material script?
14:29:34: WARNING: Mesh instance 'M12394472' was defined as manually loaded, but no manual loader was provided. This Resource will be lost if it has to be reloaded.
14:29:34: Can't assign material PorcelaineShader to SubEntity of E12394584 because this Material does not exist. Have you forgotten to define it in a .material script?
14:29:34: WARNING: Mesh instance 'M12394640' was defined as manually loaded, but no manual loader was provided. This Resource will be lost if it has to be reloaded.
14:29:34: Can't assign material PorcelaineShader to SubEntity of E12394752 because this Material does not exist. Have you forgotten to define it in a .material script?
14:29:34: WARNING: Mesh instance 'M12394808' was defined as manually loaded, but no manual loader was provided. This Resource will be lost if it has to be reloaded.
14:29:34: Can't assign material PorcelaineShader to SubEntity of E12394920 because this Material does not exist. Have you forgotten to define it in a .material script?
14:29:34: WARNING: Mesh instance 'M12394976' was defined as manually loaded, but no manual loader was provided. This Resource will be lost if it has to be reloaded.
14:29:34: Can't assign material PorcelaineShader to SubEntity of E12395088 because this Material does not exist. Have you forgotten to define it in a .material script?
14:29:34: WARNING: Mesh instance 'M12395144' was defined as manually loaded, but no manual loader was provided. This Resource will be lost if it has to be reloaded.
14:29:34: Can't assign material PorcelaineShader to SubEntity of E12395256 because this Material does not exist. Have you forgotten to define it in a .material script?
14:29:34: WARNING: Mesh instance 'M12395312' was defined as manually loaded, but no manual loader was provided. This Resource will be lost if it has to be reloaded.
14:29:34: Can't assign material PorcelaineShader to SubEntity of E12395424 because this Material does not exist. Have you forgotten to define it in a .material script?
14:29:34: WARNING: Mesh instance 'M12395480' was defined as manually loaded, but no manual loader was provided. This Resource will be lost if it has to be reloaded.
14:29:34: Can't assign material PorcelaineShader to SubEntity of E12395592 because this Material does not exist. Have you forgotten to define it in a .material script?
14:29:34: WARNING: Mesh instance 'M12395648' was defined as manually loaded, but no manual loader was provided. This Resource will be lost if it has to be reloaded.
14:29:34: Can't assign material PorcelaineShader to SubEntity of E12395760 because this Material does not exist. Have you forgotten to define it in a .material script?
14:29:34: WARNING: Mesh instance 'M12395816' was defined as manually loaded, but no manual loader was provided. This Resource will be lost if it has to be reloaded.
14:29:34: Can't assign material PorcelaineShader to SubEntity of E12395928 because this Material does not exist. Have you forgotten to define it in a .material script?
14:29:34: Can't assign material 1 - Default to SubEntity of E12395984 because this Material does not exist. Have you forgotten to define it in a .material script?
14:29:34: Can't assign material 1 - Default to SubEntity of E12396040 because this Material does not exist. Have you forgotten to define it in a .material script?
14:29:34: Creating viewport on target 'PureBasic Ogre', rendering from camera 'MyCam', relative dimensions L: 0.00 T: 0.00 W: 1.00 H: 1.00 ZOrder: 0
14:29:34: Viewport for camera 'MyCam', actual dimensions L: 0 T: 0 W: 1280 H: 1024
14:29:34: Texture: spot_shadow_fade.png: Loading 1 faces(PF_B8G8R8,128x128x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,128x128x1.
14:30:28: WARNING: Mesh instance 'M7' was defined as manually loaded, but no manual loader was provided. This Resource will be lost if it has to be reloaded.
Ah oui c'est vrai que j'avais supprimé le fichier PorcelaineShader.material,Can't assign material PorcelaineShader
mais c'est pas ça la source de mes ennuis

J'avais aussi modifié le mesh de la sphère pour utiliser PorcelaineShader, du coup je l'ai supprimé aussi et je n'ai plus ces messages.
Par contre les autres subsistes
c'est pas vraiment une erreur , juste un avertissement et effectivement j'ai des meshes faites manuellement.WARNING: Mesh instance 'M12395648' was defined as manually loaded,
Sinon pour mon premier problème j'ai trouvé, c'est juste une histoire d'éclairage, en mettant l'éclairage ambiant à $FFFFFF ,les textures apparaissent correctement.
Par contre le deuxième problème je ne sais toujours pas comment le résoudre , il faudrait que je prenne le temps de faire un petit code qui reproduise le problème. Mais j'ai pas le courage de m'y coller en ce moment

Pour les collisions avec les objets dynamiques , je suis en train d'y réfléchir, ça risque de prendre encore quelques mois avant qu'il y ait du nouveau. Dans cette démo les plateformes sont simples , mais j'essaye de traiter le cas le plus général pour utiliser des objets de formes différentes par la suite.
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.
Salut Comtois,
Très très joli travail...
J'imagine que cela te demande pas mal de temps pour programmer, non?
Concernant ma dll basée sur GLScene, je suis un peu en standby.
De plus l'arrivée des nouvelles fonctions 3d dans PureBasic me pousse à la laisser de côté pour plutôt m'investir dans les nouvelles commandes.
C'est pour cela que je suis de près tes travaux
Très très joli travail...

J'imagine que cela te demande pas mal de temps pour programmer, non?
Concernant ma dll basée sur GLScene, je suis un peu en standby.
De plus l'arrivée des nouvelles fonctions 3d dans PureBasic me pousse à la laisser de côté pour plutôt m'investir dans les nouvelles commandes.
C'est pour cela que je suis de près tes travaux

ça dépend ce que tu appelles pas mal de temps 
j'avais déjà fait les fonctions fumée et explosion , un simple copier /Coller.
Les faisceaux c'était déjà fait aussi , j'ai juste ajouté la liste.
Pour les collisions dynamiques, j'y avais déjà réfléchi un peu avant , donc ça ne m'a pris que quelques heures , d'autant plus que c'est presque la même chose que les triangles statiques. La seule chose à laquelle je n'avais pas trop réfléchi c'est la gestion des collisions entre objets, et c'est ce qui merdouille
Mais je m'y attendais , je voulais surtout dans un premier temps valider le principe que j'utilise , à savoir , je ne calcule qu'une seule fois la position des triangles dynamiques dans la base de l'ellipsoide, ensuite je me contente de faire un changement de repère à l'ellipsoide pour travailler dans le repère de l'objet dynamique, l'avantage c'est qu'il y a beaucoup moins de calculs à faire. Et ensuite le test des collisions est identique.
C'est à partir de là qu'il va falloir que je réfléchisse !! il faut que je tienne compte des déplacements des deux objets pour savoir à quel moment a lieu la collision et où ! pour ensuite calculer les réponses. J'ai une vague idée de ce qu'il faut faire, mais je n'ai pas trop le temps de m'y coller

j'avais déjà fait les fonctions fumée et explosion , un simple copier /Coller.
Les faisceaux c'était déjà fait aussi , j'ai juste ajouté la liste.
Pour les collisions dynamiques, j'y avais déjà réfléchi un peu avant , donc ça ne m'a pris que quelques heures , d'autant plus que c'est presque la même chose que les triangles statiques. La seule chose à laquelle je n'avais pas trop réfléchi c'est la gestion des collisions entre objets, et c'est ce qui merdouille

Mais je m'y attendais , je voulais surtout dans un premier temps valider le principe que j'utilise , à savoir , je ne calcule qu'une seule fois la position des triangles dynamiques dans la base de l'ellipsoide, ensuite je me contente de faire un changement de repère à l'ellipsoide pour travailler dans le repère de l'objet dynamique, l'avantage c'est qu'il y a beaucoup moins de calculs à faire. Et ensuite le test des collisions est identique.
C'est à partir de là qu'il va falloir que je réfléchisse !! il faut que je tienne compte des déplacements des deux objets pour savoir à quel moment a lieu la collision et où ! pour ensuite calculer les réponses. J'ai une vague idée de ce qu'il faut faire, mais je n'ai pas trop le temps de m'y coller

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.
Ce que j'appelle pas mal de temps c'est quand on est absorbé par son développement au point de ne plus savoir combien de temps s'est écoulé...Exemple, lorsque l'on dit: " J'arrive dans 5 minutes ", tu vois ce que je veux dire Comtois, non ?
Une question, comment obtiens tu ton "TempleTriangles.HD"
Une dernière : tu as déjà fais du darkbasic pro
C'est quand même mieux purebasic
Salutations,

Une question, comment obtiens tu ton "TempleTriangles.HD"

Une dernière : tu as déjà fais du darkbasic pro

C'est quand même mieux purebasic

Salutations,
je me suis fait un petit code, il faut d'abord créer le fichier Xml avec OgreXMLConverter.exe
J'ai commencé avec DarkBasic , ensuite j'ai acheté DB pro à alapage à 45 euros , et je n'ai jamais réussi à le faire tourner correctement , même les exemples fournis plantaient , du coup , je ne m'en suis jamais servi.
Et ça ne me manque pas du tout
Code : Tout sélectionner
;Comtois 10/02/06
;PB4.0 Beta 7
Source$="D:\Ogre\OgreCommandLineTools-1.0.6\Temple.xml" ; <<<< Fichier du mesh dans le format Xml
Destination$="D:\Ogre\OgreCommandLineTools-1.0.6\TempleTriangles.HD" ; <<<< Fichier contenant la liste des triangles
Structure s_Boite
Xmini.f
Ymini.f
Zmini.f
Xmaxi.f
Ymaxi.f
Zmaxi.f
EndStructure
Structure Face
v1.l
v2.l
v3.l
EndStructure
Structure Point3D
x.f
y.f
z.f
EndStructure
Structure Vecteur
x.f
y.f
z.f
EndStructure
Structure Triangle
P1.Point3D
P2.Point3D
P3.Point3D
Constante.f
Normale.Vecteur
EndStructure
NewList Face.Face()
Global NewList ListTriangle.Triangle()
Global Boite.s_Boite
Procedure.s StringFieldPerso(T$,Index)
Champ=0
Deb=0
Chaine$=""
For i=1 To Len(T$)
Car$=Mid(T$,i,1)
If Car$=Chr(34)
If Deb=0
Deb=1
Champ + 1
Continue
Else
Deb=0
EndIf
EndIf
If Champ=Index And Deb
Chaine$=Chaine$+Car$
EndIf
Next i
ProcedureReturn Chaine$
EndProcedure
OpenConsole()
SubMesh = 0
If OpenFile(0,Source$)
PrintN("Ouverture du fichier Xml : " + Source$)
While Eof(0)=0
Ligne$=ReadString(0)
If FindString(Ligne$,"<faces count=",1)
Pos=FindString(Ligne$,"count=",1)
Pos + 7
NbFace=Val(Mid(Ligne$,Pos,Len(Ligne$)-Pos-1))
SubMesh + 1
PrintN("SubMesh No : " + Str(SubMesh))
PrintN("Nombre de triangles : " + Str(NbFace))
;Lecture des Faces
ClearList(Face())
For i=1 To NbFace
Ligne$=ReadString(0)
AddElement(Face())
Face()\v1=Val(StringFieldPerso(Ligne$,1))
Face()\v2=Val(StringFieldPerso(Ligne$,2))
Face()\v3=Val(StringFieldPerso(Ligne$,3))
Next i
EndIf
;Cherche les vertices
If FindString(Ligne$,"<geometry vertexcount=",1)
Pos=FindString(Ligne$,"count=",1)
Pos + 7
NbVertex=Val(Mid(Ligne$,Pos,Len(Ligne$)-Pos-1))
PrintN("Nombre de sommets : " + Str(NbVertex))
Dim Vertex.Vecteur(NbVertex)
Dim Normale.Vecteur(NbVertex)
EndIf
If FindString(Ligne$,"<vertexbuffer",1)
Index=0
EndIf
;Lecture des vertex
If FindString(Ligne$,"<position",1)
Vertex(Index)\x=ValF(StringFieldPerso(Ligne$,1))
Vertex(Index)\y=ValF(StringFieldPerso(Ligne$,2))
Vertex(Index)\z=ValF(StringFieldPerso(Ligne$,3))
If Vertex(Index)\x < Boite\Xmini
Boite\Xmini = Vertex(Index)\x
ElseIf Vertex(Index)\x > Boite\Xmaxi
Boite\Xmaxi = Vertex(Index)\x
EndIf
If Vertex(Index)\y < Boite\Ymini
Boite\Ymini = Vertex(Index)\y
ElseIf Vertex(Index)\y > Boite\Ymaxi
Boite\Ymaxi = Vertex(Index)\y
EndIf
If Vertex(Index)\z < Boite\Zmini
Boite\Zmini = Vertex(Index)\z
ElseIf Vertex(Index)\z > Boite\Zmaxi
Boite\Zmaxi = Vertex(Index)\z
EndIf
EndIf
;Lecture des normales
If FindString(Ligne$,"<normal",1)
Normale(Index)\x=ValF(StringFieldPerso(Ligne$,1))
Normale(Index)\y=ValF(StringFieldPerso(Ligne$,2))
Normale(Index)\z=ValF(StringFieldPerso(Ligne$,3))
Index + 1
EndIf
;On peut enregistrer ce submesh
If FindString(Ligne$,"</vertexbuffer>",1)
ForEach Face()
AddElement(ListTriangle())
;v1
ListTriangle()\P1\x=Vertex(Face()\v1)\x
ListTriangle()\P1\y=Vertex(Face()\v1)\y
ListTriangle()\P1\z=Vertex(Face()\v1)\z
;v2
ListTriangle()\P2\x=Vertex(Face()\v2)\x
ListTriangle()\P2\y=Vertex(Face()\v2)\y
ListTriangle()\P2\z=Vertex(Face()\v2)\z
;v3
ListTriangle()\P3\x=Vertex(Face()\v3)\x
ListTriangle()\P3\y=Vertex(Face()\v3)\y
ListTriangle()\P3\z=Vertex(Face()\v3)\z
ListTriangle()\Normale\x=(Normale(Face()\v1)\x + Normale(Face()\v2)\x +Normale(Face()\v3)\x)/3
ListTriangle()\Normale\y=(Normale(Face()\v1)\y + Normale(Face()\v2)\y +Normale(Face()\v3)\y)/3
ListTriangle()\Normale\z=(Normale(Face()\v1)\z + Normale(Face()\v2)\z +Normale(Face()\v3)\z)/3
Next
EndIf
Wend
CloseFile(0)
PrintN("Total triangles : " + Str(CountList(ListTriangle())))
EndIf
;Génère un fichier contenant la liste des triangles
If CreateFile(0,Destination$)
PrintN("Creation du fichier triangle : " + Destination$)
WriteLong(0,CountList(ListTriangle()))
WriteData(0,@Boite,SizeOf(s_Boite))
ForEach ListTriangle()
WriteData(0,@ListTriangle(),SizeOf(Triangle))
Next
CloseFile(0)
PrintN("Operation terminee")
PrintN("Pressez la touche [Entree] pour quitter")
EndIf
PrintN("MiniX = " + StrF(Boite\XMini,3))
PrintN("MaxiX = " + StrF(Boite\XMaxi,3))
PrintN("MiniY = " + StrF(Boite\YMini,3))
PrintN("MaxiY = " + StrF(Boite\YMaxi,3))
PrintN("MiniZ = " + StrF(Boite\ZMini,3))
PrintN("MaxiZ = " + StrF(Boite\ZMaxi,3))
Input()
CloseConsole()
End
Et ça ne me manque pas du tout

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 :
Salut, je viens de tester ta démo. Sympa
Bugs rencontrés :
* je rentre dans les plateformes
* quand une boule explose, j'ai des triangles qui parfois sont énormes (aléatoires ?)
Bugs rencontrés :
* je rentre dans les plateformes
* quand une boule explose, j'ai des triangles qui parfois sont énormes (aléatoires ?)
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
oui j'ai prévénu, j'ai encore du boulot pour améliorer le trucProgi1984 a écrit :Bugs rencontrés :
* je rentre dans les plateformes

J'ai aussi constaté ça , je ne sais si c'est un bug de PureBasic, il faudrait que je prenne le temps de faire un petit snippet pour le mettre en évidence.* quand une boule explose, j'ai des triangles qui parfois sont énormes (aléatoires ?)
Peut-être que c'est mon code , je ne peux encore rien affirmer.
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 :
Concernant mes collisions via ODE, deux anglais m'ont expliqué qu'il faudra attendre la version complète de ODE pour pouvoir le faire. En attendant, je travaille sur le "Underwater effect" !
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
ça confirme ce que je pensais alors 
Alors du coup , je continue d'avancer sur mon système de collision.
Il y a aussi un gros travail à faire c'est la gestion des effets spéciaux.
Avec les particules, les billboard , les scripts material , ça fait pas mal de pistes à explorer pour se faire une biblio de fonctions, pour générer des explosions , des effets de pluie (Cederavic a déjà fait quelque chose à ce sujet).Bref pas mal d'effets à créer , et pas besoin d'Ode pour ça

Alors du coup , je continue d'avancer sur mon système de collision.
Il y a aussi un gros travail à faire c'est la gestion des effets spéciaux.
Avec les particules, les billboard , les scripts material , ça fait pas mal de pistes à explorer pour se faire une biblio de fonctions, pour générer des explosions , des effets de pluie (Cederavic a déjà fait quelque chose à ce sujet).Bref pas mal d'effets à créer , et pas besoin d'Ode pour ç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 :
Par contre, tu le dis à personne, mais je bosse sur ca actuellement 

Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
up de 2 ans et un jour 
@Comtois , lorsque tu avais terminer cela , est ce que tu est toujours obligé de tricher avec le sol ?
j'ai vu aussi que vous parlez de problème de Texture (on voit les arrêtes ), c'est du au fait que c'est un traitement linéaire(pour une texture de 2x2pixel vous ne pouvez pas voir un damier net par exemple...) , pour les "opengl-iste" il faut "clampé" la texture
ex : les skybox...



@Comtois , lorsque tu avais terminer cela , est ce que tu est toujours obligé de tricher avec le sol ?
j'ai vu aussi que vous parlez de problème de Texture (on voit les arrêtes ), c'est du au fait que c'est un traitement linéaire(pour une texture de 2x2pixel vous ne pouvez pas voir un damier net par exemple...) , pour les "opengl-iste" il faut "clampé" la texture

ex : les skybox...

