Page 2 sur 2

Re: Comment faire un jeu de lancer de dés en 3D

Publié : lun. 01/juin/2020 15:25
par Shadow
Ah ouais sympa en effet ^^

Re: Comment faire un jeu de lancer de dés en 3D

Publié : ven. 05/juin/2020 18:34
par Guillot
si ça foire, commenter "WorldShadows..."

Code : Tout sélectionner

Procedure.f POM(v.f)
    ProcedureReturn (Random(v*1000)-v*500)/500
EndProcedure

Procedure create_dice(mesh,taille.f)
    Protected i,j,k,kk,    num
    Protected.f vi,vj,vk,u,v
    
    CreateMesh(mesh)
    For kk=0 To 2
        For k=0 To 1
            AddSubMesh()
            For i=0 To 1
                For j=0 To 1
                    vi=(i-0.5)*taille
                    vj=(j-0.5)*taille
                    vk=(k-0.5)*taille
                    u=i*(k*2-1)
                    v=j
                    Select kk
                        Case 0:MeshVertex(vi,vk,vj,u,v,0)
                        Case 1:MeshVertex(-vk,vi,vj,u,v,0)
                        Case 2:MeshVertex(vi,vj,-vk,u,v,0)
                    EndSelect
                Next
            Next
            If k
                MeshFace(0,1,2)
                MeshFace(1,3,2)
            Else
                MeshFace(2,1,0)
                MeshFace(2,3,1)
            EndIf
            SetMeshMaterial(mesh,MaterialID(num+1),num)
            num+1
        Next
    Next       
    FinishMesh(1)
    NormalizeMesh(mesh)
EndProcedure

Define.f mousex,mousey,keyx,keyz,a,da
Define i,j,ex,ey,txt.s

InitEngine3D():InitSprite():InitKeyboard():InitMouse()
OpenWindow(0, 0, 0, 0,0, "souris + fleche - espace pour relancer",#PB_Window_Maximize)
ex=WindowWidth (0,#PB_Window_InnerCoordinate)
ey=WindowHeight(0,#PB_Window_InnerCoordinate)
OpenWindowedScreen(WindowID(0), 0, 0, ex, ey, 0, 0, 0)

CreateCamera(0, 0, 0, 100, 100):MoveCamera(0,0,10,-16)
CreateLight(0,$ffffff, 5, 5, 0)
AmbientColor($444444)
CameraBackColor(0,$0)
CameraLookAt(0,0,1,0)
LightAttenuation(0, 100,0.4)
; ----------------------------------------- table
CreateTexture(10,256,256)
StartDrawing(TextureOutput(10))
For i=0 To 255
    For j=0 To 255
        Plot(i,j,Random(150,100)*$000100)
    Next
Next
StopDrawing()
CreateMaterial(10,TextureID(10))
ScaleMaterial(10,0.2,0.2)

CreateCylinder(10,8,0.2,64,1,1)
CreateEntity(10,MeshID(10),MaterialID(10)):CreateEntityBody(10,#PB_Entity_StaticBody,1,0.1,1)

CreateTube(11,8,7.5,2,64,1)
CreateEntity(11,MeshID(11),MaterialID(10)):CreateEntityBody(11,#PB_Entity_StaticBody,1,0.1,1)

; ----------------------------------------- dés
LoadFont(0, "Arial", 200)
For i=1 To 6
    CreateTexture(i,256,256)
    StartDrawing(TextureOutput(i))
    BackColor($ff)
    FrontColor($ffff)
    Box(0,0,256,256,$ff)
    DrawingFont(FontID(0))
    txt=Str(i)
    DrawText((256-TextWidth(txt))/2,(256-TextHeight(txt))/2,txt)
    StopDrawing()
    CreateMaterial(i,TextureID(i))
Next

Create_dice(0,1)
For i=0 To 4
    CreateEntity(i,MeshID(0),#PB_Material_None):CreateEntityBody(i,#PB_Entity_BoxBody,1,0.5,1)
Next   

WorldShadows(#PB_Shadow_Modulative)

Procedure drop_dice()
    Protected i
    For i=0 To 4
        MoveEntity(i,pom(1),10+i*2,pom(1),#PB_Absolute)
        ApplyEntityTorqueImpulse(i,pom(1),pom(1),pom(1),#PB_Local )
    Next
EndProcedure

drop_dice()

Repeat
    ExamineMouse()
    MouseX = -MouseDeltaX() *  0.05
    MouseY = -MouseDeltaY() *  0.05
    ExamineKeyboard()
    If KeyboardReleased(#PB_Key_Space):drop_dice():EndIf
    keyx=(-Bool(KeyboardPushed(#PB_Key_Left)<>0)+Bool(KeyboardPushed(#PB_Key_Right)<>0))*0.1
    keyz=(-Bool(KeyboardPushed(#PB_Key_Down)<>0)+Bool(KeyboardPushed(#PB_Key_Up   )<>0)+MouseButton(1)-MouseButton(2))*0.1+MouseWheel()*1
    RotateCamera(0, MouseY, MouseX, 0, #PB_Relative):MoveCamera  (0, KeyX, 0, -keyz)
    RenderWorld()
    FlipBuffers()   
Until WindowEvent() = #PB_Event_CloseWindow Or KeyboardReleased(#PB_Key_Escape) Or MouseButton(3)

Re: Comment faire un jeu de lancer de dés en 3D

Publié : sam. 06/juin/2020 8:58
par kernadec
bjr Guillot
très très chouette, vraiment excellent
merci pour le partage
Cordialement

Re: Comment faire un jeu de lancer de dés en 3D

Publié : sam. 06/juin/2020 9:56
par Fig
Super cool !
Mais pourquoi Worldshadow() plante ?

Re: Comment faire un jeu de lancer de dés en 3D

Publié : sam. 06/juin/2020 11:05
par falsam
Fig a écrit :Mais pourquoi Worldshadow() plante ?
Bonjour Fig. Parce que a priori tu n'as pas DirectX9.

Si ton ordinateur est sous Windows 10, l'environnement DirectX9 n'est pas installé et DirectX11 ou DirectX12 n'est pas rétrocompatible avec DirectX9

Deux solutions : Installer DirectX9c ou Bien dans les options de compilation, activé OpenGl en sous-system.

J'ai déja évoqué ce souci ici https://www.purebasic.fr/french/viewtop ... 17#p206117

Je ne sais pas si ce souci peut être régler en natif :wink:

Re: Comment faire un jeu de lancer de dés en 3D

Publié : sam. 06/juin/2020 11:42
par Ollivier
Worldshadow() ne semble pas être présent dans la rubrique Bug report.

Donc ça peut durer encore longtemps...

Re: Comment faire un jeu de lancer de dés en 3D

Publié : sam. 06/juin/2020 12:15
par venom
Guillot... Que dire... Comme d'habitude tu gère de la 3D :D
Bravo bel exemple. Merci du partage :wink:

@falsam
C'est surement compliqué, mais purebasic ne peux pas rendre les fonctions compatibles DX11 et + ?






@++

Re: Comment faire un jeu de lancer de dés en 3D

Publié : sam. 06/juin/2020 14:37
par Guillot
je pense qu'il faut passer à une version plus récente d'ogre
je sais pas à partir de quand c'est compatible DX11 dans la ligné ogre 1.x (actuellement 1.12)

Re: Comment faire un jeu de lancer de dés en 3D

Publié : sam. 06/juin/2020 18:38
par Shadow
Whaaahooo c'est pas mal ça merci Guillot ! :D

Re: Comment faire un jeu de lancer de dés en 3D

Publié : dim. 07/juin/2020 19:48
par Kwai chang caine
Shadow a écrit :Whaaahooo c'est pas mal ça merci Guillot ! :D
Doux euphémisme.... :wink:
C'est splendide, merci du partage 8)