Problèmes dans les exemples 3D ou avec certaines fonctions

Généralités sur la programmation 3D
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Problèmes dans les exemples 3D ou avec certaines fonctions

Message par blendman »

salut
Etant donné que je fais quelques tests avec la 3D en ce moment, je rencontre pas mal de bugs ou de fonctions qui ne marchent plus.
Pouvez-vous me confirmer ça, avant que je ne poste ma rafale de bug sur le forum anglais ? :D

- CreateWater() : ne marche plus, la compil plante
- createTerrain() : le terrain n'apparait pas
- lightcolor() : la compilation plante
- specialeffects : ça ne fait rien
- l'alpha des particules buguent avec un fog
- staticgeometry : j'obtiens une invalid memory access sur ce genre de code (exemple des static geometry)

Code : Tout sélectionner

StaticGeometry =  CreateStaticGeometry(#PB_Any, 1000000, 1000000, 1000000, #True)
AddStaticGeometryEntity(StaticGeometry, #mesh, 4000,0,4000,200,200,200) 
AddStaticGeometryEntity(StaticGeometry, 1, 1500,0,1500,200,200,200) ; ça plante ici

Quelques questions
- peut-on changer l'intensité d'une light ?
- peut-on changer le "range" d'une light (distance à partir de laquelle l'intensité lumineuse diminue) ?
J'ai vu que le range dépendait du maillage du mesh, mais je me demandais si on pouvait définir ça directement sur les lights (un peu comme pour le spot)
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Problèmes dans les exemples 3D ou avec certaines fonctio

Message par graph100 »

tu utilises la dernière version de PB ?
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Problèmes dans les exemples 3D ou avec certaines fonctio

Message par blendman »

oui, la 4.61beta2
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Problèmes dans les exemples 3D ou avec certaines fonctio

Message par comtois »

- CreateWater() : ne marche plus, la compil plante
- createTerrain() : le terrain n'apparait pas
- lightcolor() : la compilation plante
- specialeffects : ça ne fait rien
- l'alpha des particules buguent avec un fog
- staticgeometry : j'obtiens une invalid memory access sur ce genre de code (exemple des static geometry)
Ces bogues sont connus.

LightColor() n'existe plus , il est remplacé par LightDiffuseColor(), il faudra mettre la doc à jour.

La syntaxe de la commande AddStaticGeometryEntity() est
AddStaticGeometryEntity(#StaticGeometry, EntityID, x, y, z [, ScaleX, ScaleY, ScaleZ])
Il faut utiliser la commande EntityID(), et un contrôle sera nécessaire pour éviter que tu obtiennes un IMA si tu utilises autre chose qu'un ID d'une entity.

Concernant l'alpha des particules, Tu as un exemple pour tester ?
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.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Problèmes dans les exemples 3D ou avec certaines fonctio

Message par blendman »

comtois a écrit :Ces bogues sont connus.
ok, j'imagine qu'il est prévu de les corriger alors ^^ (en ce moment, y'a beaucoup de correction de bugs, c'est classe :D)).
Concernant l'alpha des particules, Tu as un exemple pour tester ?
en fait, c'est très simple, il suffit d'ouvrir le fichier d'exemple :
Particle.pb

et d'ajouter par exemple cette ligne avant repeat :

Code : Tout sélectionner

Fog(RGB(255,255,255),10,10,500)
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Problèmes dans les exemples 3D ou avec certaines fonctio

Message par comtois »

Ok, je n'ai pas testé mais je comprends ce que tu veux dire maintenant, le problème est le même avec les SkyBox et SkyDome avec un fog.
Pour prendre en compte le fog ça nécessite des paramètres supplémentaires pour ces fonctions, voire une nouvelle fonction pour les materials.

C'est donc une suggestion d'amélioration plutôt qu'un bogue :)

Comme pour toutes les suggestions, au final c'est Fred qui décide ... wait and see !
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.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Problèmes dans les exemples 3D ou avec certaines fonctio

Message par blendman »

comtois a écrit :Ok, je n'ai pas testé mais je comprends ce que tu veux dire maintenant, le problème est le même avec les SkyBox et SkyDome avec un fog.
Pour prendre en compte le fog ça nécessite des paramètres supplémentaires pour ces fonctions, voire une nouvelle fonction pour les materials.

C'est donc une suggestion d'amélioration plutôt qu'un bogue :)
en fait, non, ce n'est pas même problème ;).

Avec les skybox ou skydom, le fog laisse apparaitre la boite, car il se "colle" aux coin de celle-ci.
Avec les particules et d'une manière général les billboard avec fond transparent, le fog supprime carrément la couche alpha de la texture.
Donc, ça fait penser à un bug :mrgreen:

Mais comme tu le dis :
Comme pour toutes les suggestions, au final c'est Fred qui décide ... wait and see !
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Problèmes dans les exemples 3D ou avec certaines fonctio

Message par comtois »

Tu peux désactiver le fog sur un material donné, voire ajouter un fog spécifique à un material. Tu peux le faire via un script

Code : Tout sélectionner

material Examples/Particles
{
	technique
	{
		pass
		{
		
			lighting off
			depth_write on
			scene_blend add
	      	fog_override true
			
			texture_unit
			{
				texture flare.png
			}

		}
	}
}
Et dans le programme Particles.pb

Code : Tout sélectionner

;     LoadTexture(0, "flare.png")
;     
;     CreateMaterial(0, TextureID(0))
;     DisableMaterialLighting(0, 1)
;     MaterialBlendingMode   (0, #PB_Material_Add)
      GetScriptMaterial(0, "Examples/Particles")   
Ou tu peux aussi essayer de comprendre ça
En clair, tu peux faire ce que tu veux via les scripts :)
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.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Problèmes dans les exemples 3D ou avec certaines fonctio

Message par blendman »

comtois a écrit :Tu peux désactiver le fog sur un material donné, voire ajouter un fog spécifique à un material. Tu peux le faire via un script

Code : Tout sélectionner

material Examples/Particles
{
	technique
	{
		pass
		{
		
			lighting off
			depth_write on
			scene_blend add
	      	fog_override true
			
			texture_unit
			{
				texture flare.png
			}

		}
	}
}
Et dans le programme Particles.pb

Code : Tout sélectionner

;     LoadTexture(0, "flare.png")
;     
;     CreateMaterial(0, TextureID(0))
;     DisableMaterialLighting(0, 1)
;     MaterialBlendingMode   (0, #PB_Material_Add)
      GetScriptMaterial(0, "Examples/Particles")   
Ou tu peux aussi essayer de comprendre ça
En clair, tu peux faire ce que tu veux via les scripts :)
hou, mais c'est top moumoute ça :D

Je crois qu'il faudrait ajouter plein d'exemples de ce type pour la 3D en purebasic, histoire d emontrer tout ce que l'on peut faire en pure avec Ogre.

Par exemple, je pense que s'il y avait dans les exemples :
- des exemples de shaders envmap, reflexion, refraction, fresnel, bump/normal map, etc..
- des exemples de post fx (compositor) comme bloom, distortion, motion blur, depth of field
- des exemples avec les ombres en soft shadows (j'imagine qu'on doit pouvoir le faire avec les scripts aussi ^^)

et un méga exemple avec tout ça d'activer, ce serait tip-top, ça donnerait un sérieux coup de boost à Purebasic pour ceux qui recherchent un langage puissant et rapide à développer pour faire de la 3D pro :D.

je peux me charger des modèles 3D si ça intéresse quelqu'un pour un méga exemple avec ce genre de chose ;).
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Problèmes dans les exemples 3D ou avec certaines fonctio

Message par Ar-S »

J’applaudis l'idée :P
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Problèmes dans les exemples 3D ou avec certaines fonctio

Message par blendman »

bon, j'ai continué à bosser sur mon éditeur 3D et ça commence à être très intéressant :).

Nouveautés :
- on peut positionner tous les objets en Z aussi maintenant.
- on peut positionner les lights (x, y et Z), avant ça bugguait. On peut gérer les ombres ou non.

Sinon, j'ai un peu tester les shaders et j'ai réussi à faire du "fake" Rampshader (comme blender). C'est classe.
Et les multitextures aussi c'est cool.

Je cherche un exemple qui fonctionne pour tous les modèles pour du normalmap/specular light, mais sinon, ça commence à le faire ^^.

Un des dernier screenshot (un de mes personnages) :
Image
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Re: Problèmes dans les exemples 3D ou avec certaines fonctio

Message par Frenchy Pilou »

Petite question :)
Ce développement de jeu est fait pour la vente ?
J'ai parcouru le site, il est marqué "disponible début ..." mais cela ne dit en rien si c'est un jeu "libre" ou "commercial" !

L'éditeur de personnage montré, est uniquement fait pour le jeu désigné, ou l'on peut l'imaginer servant pas exemple
à créer des personnages 3D (?) ex nihilo pour les exporter vers tout autres programmes 3D (?) Blender... ?
Dernière modification par Frenchy Pilou le mar. 01/mai/2012 14:11, modifié 1 fois.
Est beau ce qui plaît sans concept :)
Speedy Galerie
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Problèmes dans les exemples 3D ou avec certaines fonctio

Message par blendman »

Frenchy Pilou a écrit :Ce développement de jeu est fait pour la vente ?
J'ai parcouru le site, il est marqué "disponible début ..." mais cela ne dit en rien si c'est un jeu "libre" ou "commercial" !
oui, la plupart des jeux que je développe sont fait, pour le moment, pour être commercialisé si possible (il faut bien que je vive et que je rentabilise le développement des mes jeux ;)).

Cela dit, je peux filer des exemples fonctions ou de techniques sans problèmes si on me demande, je l'ai déjà fait ;).
L'éditeur de personnage montré, est uniquement fait pour le jeu désigné, où l'on peut l'imaginer servant pas exemple
à créer des personnages 3D (?) ex nihilo pour les exporter vers tout autres programmes 3D (?) Blender... ?
en fait, ce n'est pas un éditeur de personnage, mais un éditeur de scène/level.
D'ailleurs, je me suis gourré de sujet pour répondre juste avant ^^ , le sujet initial c'est :
http://www.purebasic.fr/french/viewtopi ... 13&t=12749

En gros, celui-ci servira à créer une scène ou level de jeu.
Je vais essayer de faire un système avec import/export du level en dll, histoire que l'on puisse sortir n'importe quoi comme fichier de sortie.
Mais ce n'est pas du tout un modeleur comme blender, car ça utilise les *.mesh du moteur Ogre intégré en pure. On ne pourra que bouger les objets, ajouter des lights, et sans doute paramètres quelques objets spéciaux (mobs, pnj, coffre, téléporteurs, etc..).
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Problèmes dans les exemples 3D ou avec certaines fonctio

Message par Ar-S »

Encore quelques mois et tu vas nous faire un Pure Game Maker !
Ce jour là j'apporterai moult offrandes au pied de la statue dorée que j'aurai érigé en ton honneur :mrgreen:
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Problèmes dans les exemples 3D ou avec certaines fonctio

Message par blendman »

J'ai trouvé un sujet dans lequel des utilisateurs ont fixé certains bugs des démos 3D de purebasic.

Je pense que l'exemple de ThirdPersonn.pb est vraiment meilleur tel que donné dans ce sujet :
http://www.purebasic.fr/english/viewtop ... 15&t=48108

La démo fonctionne vraiment bien mieux, le personnage arrête ses animations lorsque l'on arrête d'appuyer sur les flèches, etc..
Bref, je pense qu'il serait judicieux de remplacer l'exemple thirdpersonn.pb par le code qu'ils ont corrigé.

Voici une copie (à placer dans le même dossier que celui où se trouve thirdpersonn.pb). je me suis permis de changer 2 ou 3 bricoles (ajout d'une light sans ombre et worldshadows en additive, modification du saut pour que ce soit un peu plus réaliste) :

Code : Tout sélectionner

;
; ------------------------------------------------------------
;
;   PureBasic - Third Person
;
;    (c) 2011 - Fantaisie Software
;
; ------------------------------------------------------------
;

IncludeFile "Screen3DRequester.pb"

#PlayerSpeed = 60
#CameraSpeed = 10


Structure Vector3
  x.f
  y.f
  z.f
EndStructure

Structure s_Key
  Up.i
  Down.i
  Left.i
  Right.i
  StrafeLeft.i
  StrafeRight.i
  Jump.i
EndStructure

Structure s_Entity
  Entity.i
  EntityBody.i
  BodyOffsetY.f
  elapsedTime.f
  Key.s_Key
  MainNode.i 
  SightNode.i
  CameraNode.i 
  ForwardNode.i
  StrafeNode.i
EndStructure

Structure s_Camera
  Camera.i
  Tightness.f
  CameraNode.i
  TargetNode.i
EndStructure   

Macro GetNodePosition(Position, Node)
  Position\x = NodeX(Node) 
  Position\y = NodeY(Node) 
  Position\z = NodeZ(Node) 
EndMacro

Macro SubVector3(V, V1, V2)
  V\x = V1\x - V2\x
  V\y = V1\y - V2\y
  V\z = V1\z - V2\z
EndMacro

;-Declare
Declare HandleEntity(*Entity.s_Entity)
Declare CameraTrack(*Camera.s_Camera, *Entity.s_Entity)
Declare OnGround(*Entity.s_Entity)
Declare MakeColimacon(PX.f, PY.f, PZ.f, Length.i, Height.i, Width.i, Stair.i)
Declare MakeStair(PX.f, PY.f, PZ.f, Length.i, Height.i, Width.i, Stair.i)
Declare AddObjects()

Define Robot.s_Entity
Define Camera.s_Camera

If InitEngine3D()
 
  InitSprite()
  InitKeyboard()
  InitMouse()
 
  If Screen3DRequester()
    KeyboardMode(#PB_Keyboard_International)
   
    Add3DArchive("../Data/Textures"        , #PB_3DArchive_FileSystem)
    Add3DArchive("../Data/Models"          , #PB_3DArchive_FileSystem)
    Add3DArchive("../Data/Scripts"         , #PB_3DArchive_FileSystem)
    Add3DArchive("../Data/GUI"             , #PB_3DArchive_FileSystem)
    Add3DArchive("../Data/Packs/desert.zip", #PB_3DArchive_Zip)
    Parse3DScripts()
   
    WorldShadows(#PB_Shadow_Additive, 50)
   
    ;Texture
    CreateTexture(1, 256, 256)
    StartDrawing(TextureOutput(1))
    Box(0, 0, 256, 256, $002255)
    DrawingMode(#PB_2DDrawing_Outlined)
    Box(0, 0, 256, 256, $FFFFFF)
    Box(10, 10, 236, 236, $FFFF)
    StopDrawing()
   
    ;Material
    CreateMaterial(0, LoadTexture(0, "r2skin.jpg"))
    CreateMaterial(1, TextureID(1))
    CreateMaterial(2, LoadTexture(2, "Dirt.jpg"))
    CreateMaterial(3, LoadTexture(3, "Wood.jpg"))
    GetScriptMaterial(4, "Scene/GroundBlend")
   
    ;Robot
    LoadMesh   (0, "robot.mesh")
    CreateEntity (0, MeshID(0), #PB_Material_None);
    AnimateEntity(0, "Stop")    ;AnimateEntity(0, "Idle")
   
    ;Robot Body
    CreateEntity(1, MeshID(0), #PB_Material_None, 0, 26, 0)
    HideEntity(1, 1)
   
    ;Ground
    CreatePlane(2, 5000, 5000, 100, 100, 100, 100)
    CreateEntity(2, MeshID(2), MaterialID(1), 0, 0, 0)
   
    ;Body
    EntityPhysicBody(1, #PB_Entity_CapsuleBody, 1, 0, 0)
    EntityPhysicBody(2, #PB_Entity_StaticBody)
   
    ;Add some statics and dynamics objects
    CreateCube(3, 1)
    AddObjects() 
   
    ;Add some stairs
    MakeColimacon(120, 0, 120, 130, 7, 48, 15)
    MakeStair(360, 0, 220, 130, 11, 48, 15)
   
    ;-Light
    CreateLight(0,RGB(155,155,155),700,500,0)
    CreateLight(1,RGB(235, 175, 123),100,50,500)
    DisableLightShadows(1, 1)
    AmbientColor(RGB(85,85,85))
   
    ; Skybox
    SkyBox("desert07.jpg")
   
    ;
    With Robot
      \Entity = 0
      \EntityBody = 1
      \BodyOffsetY = 43
     
      \Key\Down        = #PB_Key_Down
      \Key\Left        = #PB_Key_Left
      \Key\Right       = #PB_Key_Right
      \Key\Up          = #PB_Key_Up
      \Key\StrafeLeft  = #PB_Key_X
      \Key\StrafeRight = #PB_Key_C
      \Key\Jump        = #PB_Key_Space
     
      \MainNode    = CreateNode(#PB_Any) ; Entity position
      \SightNode   = CreateNode(#PB_Any,  120,  20,  0) ; For cameraLookAt
      \CameraNode  = CreateNode(#PB_Any, -140, 100,  0) ; Camera position
      \ForwardNode = CreateNode(#PB_Any,    1,   0,  0) ; Direction normalized
      \StrafeNode  = CreateNode(#PB_Any,    0,   0, -1) ; Direction normalized
     
      AttachNodeObject(\MainNode, NodeID(\SightNode)  , #PB_Node_Node)
      AttachNodeObject(\MainNode, NodeID(\CameraNode) , #PB_Node_Node)   
      AttachNodeObject(\MainNode, NodeID(\ForwardNode), #PB_Node_Node)     
      AttachNodeObject(\MainNode, NodeID(\StrafeNode) , #PB_Node_Node)   
      AttachNodeObject(\MainNode, EntityID(\Entity)   , #PB_Node_Entity)
    EndWith
   
    ;-Camera
    CreateCamera(0, 0, 0, 100, 100)
    With Camera 
      \Camera = 0
      \Tightness = 0.035
      ; Camera use 2 nodes
      \CameraNode = CreateNode(#PB_Any, -3000, 700, 0) ; Camera position
      \TargetNode = CreateNode(#PB_Any) ; For cameraLookAt
      AttachNodeObject(\CameraNode, CameraID(\Camera), #PB_Node_Camera)
    EndWith 
   
    ;-Main loop  
    
    If ExamineMouse()
      MouseDeltaX()
      MouseDeltaY()
    EndIf
    
    Repeat
      Screen3DEvents()
     
      If Engine3DFrameRate(#PB_Engine3D_Current)
        Robot\elapsedTime = 40/Engine3DFrameRate(#PB_Engine3D_Current)
      EndIf       
     
      HandleEntity(@Robot)     
      CameraTrack(@Camera, @Robot)
     
      RenderWorld(50)
      FlipBuffers()
    Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
  EndIf
 
Else
  MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf

End

Procedure OnGround(*Entity.s_Entity)
  With *Entity
    ProcedureReturn RayCollide(NodeX(\MainNode),  NodeY(\MainNode)+3, NodeZ(\MainNode), NodeX(\MainNode), NodeY(\MainNode),  NodeZ(\MainNode))
  EndWith 
EndProcedure

Procedure IsStair(*Entity.s_Entity)
  Protected.f x, y, z
  With *Entity
    x = (NodeX(\ForwardNode) - NodeX(\MainNode))*30
    y = (NodeY(\ForwardNode) - NodeY(\MainNode))*30
    z = (NodeZ(\ForwardNode) - NodeZ(\MainNode))*30
    ;CreateLine3D(20, NodeX(\MainNode), NodeY(\MainNode)+20, NodeZ(\MainNode), $FFFF, NodeX(\MainNode)+V\x, NodeY(\MainNode)+V\y+20,  NodeZ(\MainNode)+V\z, $FFFF)
    Ray1 = RayCollide(NodeX(\MainNode), NodeY(\MainNode)+10, NodeZ(\MainNode),  NodeX(\MainNode)+x, NodeY(\MainNode)+y+10,  NodeZ(\MainNode)+z)
    Ray2 = RayCollide(NodeX(\MainNode), NodeY(\MainNode)+20, NodeZ(\MainNode),  NodeX(\MainNode)+x, NodeY(\MainNode)+y+20,  NodeZ(\MainNode)+z)
    If Ray1 And Ray2=0
      ProcedureReturn 1
    EndIf
    ProcedureReturn 0
  EndWith 
EndProcedure

Procedure HandleEntity(*Entity.s_Entity)
  Protected.Vector3 Forward, Strafe, PosMain, PosDir, PosStrafe
  Protected.f Speed, Speed2, x, y, MouseX, MouseY, Action.s
  Static Jump.f, MemJump.i, Rot.Vector3, Trans.Vector3, Clic, LastAction.s
 
  With *Entity
    GetNodePosition(PosMain, \MainNode)
    GetNodePosition(PosDir, \ForwardNode)
    GetNodePosition(PosStrafe, \StrafeNode)
    SubVector3(Forward, PosDir, PosMain)
    SubVector3(Strafe, PosStrafe, PosMain)
   
    Speed = #PlayerSpeed * \elapsedTime
    Speed2 = Speed / 2
   
    If ExamineKeyboard()
     
      If KeyboardReleased(#PB_Key_F5)
        WorldDebug(#PB_World_DebugBody)
      ElseIf KeyboardReleased(#PB_Key_F6)
        WorldDebug(#PB_World_DebugEntity)
      ElseIf KeyboardReleased(#PB_Key_F7)
        WorldDebug(#PB_World_DebugNone)
      EndIf
     
      If KeyboardPushed(\Key\Jump) And OnGround(*Entity)
        Jump = 4
        MemJump = 1
      EndIf 
      
      Rot\x * 0.30
      Rot\y * 0.30
      Rot\z * 0.30
      Trans\x * 0.20
      Trans\y = Jump
      Trans\z * 0.20
     
      Action = "Stop"      ;Action = "Idle"
     
      If KeyboardPushed(\Key\Up)
        Trans\x + Forward\x * Speed
        Trans\z + Forward\z * Speed
        Action = "Walk"
      ElseIf KeyboardPushed(\Key\Down)
        Trans\x + Forward\x * -Speed2
        Trans\z + Forward\z * -Speed2
        Action = "Walk"
      EndIf
     
      If KeyboardPushed(\Key\Left)
        Rot\y + 2 * \elapsedTime
        If Action <> "Walk"
          action="Idle"
        EndIf        
      ElseIf KeyboardPushed(\Key\Right)
        Rot\y - 2 * \elapsedTime
        If Action <> "Walk"
          action="Idle"
        EndIf 
      EndIf
     
      If KeyboardPushed(\Key\StrafeLeft)
        Trans\x + Strafe\x * Speed2
        Trans\z + Strafe\z * Speed2
        Action = "Walk"
      ElseIf KeyboardPushed(\Key\StrafeRight)
        Trans\x + Strafe\x * -Speed2
        Trans\z + Strafe\z * -Speed2
        Action = "Walk"
      EndIf
     
      If Action <> LastAction
        LastAction = Action
        AnimateEntity(0, Action)
      EndIf
      
      If OnGround(*Entity)
        Jump = 0
      ElseIf MemJump
        Jump + 20
        If Jump > 80
          MemJump = 0
        EndIf
      Else
        Jump - 9 * \elapsedTime
      EndIf 
      
      
      
      
      
      
      
      If IsStair(*Entity) And Jump = 0 And ( Abs(Trans\x)>=Speed / 2 Or Abs(Trans\z)>=Speed / 2)
        Jump = 22 ; Or more
      EndIf
     
    EndIf
   
    MoveEntity  (\EntityBody, Trans\x, Trans\y, Trans\z)
    RotateEntity(\EntityBody, 0, Rot\y, 0, #PB_Relative)   
   
    NodeLocate(\MainNode, EntityX(\EntityBody), EntityY(\EntityBody)-\BodyOffsetY, EntityZ(\EntityBody))
    RotateNode(\MainNode, 0, EntityYaw(\EntityBody), 0)
  EndWith   
EndProcedure


Procedure CameraTrack(*Camera.s_Camera, *Entity.s_Entity)
  Protected CameraPosition.Vector3, TargetPosition.Vector3, Temp.Vector3
  Protected V1.Vector3, V2.Vector3, x.f, y.f, z.f
 
  GetNodePosition(CameraPosition, *Entity\CameraNode)
  GetNodePosition(TargetPosition, *Entity\SightNode)
  x = NodeX(*Camera\CameraNode)
  y = NodeY(*Camera\CameraNode)
  z = NodeZ(*Camera\CameraNode)
  x = (CameraPosition\x - x) *  *Camera\Tightness
  y = (CameraPosition\y - y) *  *Camera\Tightness
  z = (CameraPosition\z - z) *  *Camera\Tightness
  MoveNode(*Camera\CameraNode, x, y, z)
 
  x = NodeX(*Camera\TargetNode)
  y = NodeY(*Camera\TargetNode)
  z = NodeZ(*Camera\TargetNode)
  x = (TargetPosition\x - x) *  *Camera\Tightness
  y = (TargetPosition\y - y) *  *Camera\Tightness
  z = (TargetPosition\z - z) *  *Camera\Tightness
  MoveNode(*Camera\TargetNode, x, y, z)
 
  CameraLookAt(*Camera\Camera, NodeX(*Camera\TargetNode), NodeY(*Camera\TargetNode), NodeZ(*Camera\TargetNode))
 
EndProcedure


Procedure MakeColimacon(PX.f, PY.f, PZ.f, Length.i, Height.i, Width.i, Stair.i)
  Protected.f Angle
  Protected.i a, Ent
 
  For a = 1 To Stair
    Ent = CreateEntity(#PB_Any, MeshID(3), MaterialID(2))
    ScaleEntity(Ent, Length, Height, Width)
    EntityLocate(Ent, PX + Cos(Radian(Angle)) * Width * 5, PY + (a-1) * Height * 4, PZ -Sin(Radian(Angle)) * Width * 5)
    RotateEntity(Ent, 0, Angle, 0)
    EntityPhysicBody(Ent, #PB_Entity_StaticBody)
    Angle = Mod(Angle + 30, 360)
  Next
EndProcedure

Procedure MakeStair(PX.f, PY.f, PZ.f, Length.i, Height.i, Width.i, Stair.i)
  Protected.i a, Ent, Nb
  Protected.f Size, Delta, H 
 
  For a = 1 To Stair
    Ent = CreateEntity(#PB_Any, MeshID(3), MaterialID(2))
    ScaleEntity(Ent, Length, Height, Width)
    EntityLocate(Ent, PX, PY + (a-1) * Height, PZ + (a-1) * Width * 0.8)
    EntityPhysicBody(Ent, #PB_Entity_StaticBody)
  Next a
 
  ;Add a plateform
  Ent = CreateEntity(#PB_Any, MeshID(3), MaterialID(2))
  ScaleEntity(Ent, Length*5, Height, Width*5)
  EntityLocate(Ent, PX, PY + (a-1) * Height, PZ + (a-1) * Width)
  EntityPhysicBody(Ent, #PB_Entity_StaticBody)
 
  ;Add Pyramid
  Nb = 7
  Delta = 0.01
  Size = 20
  H = EntityY(Ent) + Height/2
  For j = 0 To Nb
    For i= 0 To Nb-j
      Ent = CreateEntity(#PB_Any, MeshID(3), MaterialID(4))
      ScaleEntity(Ent, Size, Size, Size)
      EntityPhysicBody(Ent, #PB_Entity_BoxBody, 0.5)
      EntityLocate(Ent, 340 +  j * ((Size) / 2) + i * Size, H + ((Size) / 2) + (j * (Size)), 890)
    Next
  Next
EndProcedure

Procedure AddObjects()
  Protected Size.Vector3
  Protected.f x, z
  Protected.i Ent, i 
 
  For i = 0 To 100
    If Random(1)
      Size\x = Random(60) + 30
      Size\y = Random(60) + 30
      Size\z = Random(60) + 30     
      Volume.f = Size\x * Size\y * Size\z
      Ent=CreateEntity(#PB_Any, MeshID(3), MaterialID(3), Random(5000)-2600, 100, Random(5000)-2500)
      RotateEntity(Ent, 0, Random(360), 0)
      ScaleEntity(ent, Size\x, Size\y, Size\z)       
      EntityPhysicBody(Ent, #PB_Entity_BoxBody, (Volume / 7000), 0, 2)
    Else
      Size\x = Random( 60) + 30
      Size\y = Random(160) + 30
      Size\z = Random( 60) + 30     
     
      Repeat
        x = Random(5000)-2500
      Until x < -400 Or x > 400 
     
      Repeat
        z = Random(5000)-2500
      Until z < -400 Or z > 400 
     
      Ent=CreateEntity(#PB_Any, MeshID(3), MaterialID(2), x, Size\y/2 + Random(90) , z)
      RotateEntity(Ent, 0, Random(360), 0)
      ScaleEntity(Ent, Size\x, Size\y, Size\z)
      EntityPhysicBody(Ent, #PB_Entity_StaticBody)   
    EndIf
   
  Next
EndProcedure 
A propos de cette démo,

Ar-S a écrit :Encore quelques mois et tu vas nous faire un Pure Game Maker !
non, c'est juste un simple éditeur de level ;). Ca permettra de créer/charger/modifier/enregistrer des niveaux de jeux, mais on devra faire tout le reste du code quand même ;) (gameplay, interaction pnj/player/mob, interaction player/objet, etc..).
Ce jour là j'apporterai moult offrandes au pied de la statue dorée que j'aurai érigé en ton honneur :mrgreen:
fais plutôt ça pour Fred, c'est lui qu'il faut remercier (et G-rom et tmyke pour la 3D aussi grandement :D).
Répondre