Main menu 3D
Posted: Tue Nov 25, 2025 9:34 pm
A main menu 3D created with entitys. The menu is like other objects in the scene take care where you put.
You can modify to your needs.

You can modify to your needs.

Code: Select all
InitEngine3D(#PB_Engine3D_DebugLog):InitSprite():InitKeyboard():InitMouse()
OpenWindow(0, 0,0, 1280,720, "m3D - Menú3D",#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, WindowWidth(0),WindowHeight(0), 0, 0, 0)
CreateCamera(0,0,0,100,100):MoveCamera(0,0,5,-20,#PB_Absolute):CameraLookAt(0,0,5,0):CameraBackColor(0,$332211)
CreateLight(0,$ffffff,3,3,3)
Procedure decoradoTEST()
Protected.f o
Protected mate,mesh,enti, p
Protected tt3D= CreateTexture(#PB_Any,256,256)
StartDrawing(TextureOutput(tt3D))
DrawingMode(#PB_2DDrawing_AllChannels)
Box(0,0,OutputWidth(),OutputHeight(),$ff888888)
Box(0,0,256,4,$ff555555)
Box(0,0,4,256,$ff555555)
For p= 0 To 256 Step 64
Box(p,0,8,32,$ff555555)
Box(0,p,32,8,$ff555555)
LineXY(p,0,p,OutputHeight(),$ff555555)
LineXY(0,p,OutputWidth(),p,$ff555555)
Next p
StopDrawing()
mate= CreateMaterial(#PB_Any,TextureID(tt3D));suelo
mesh= CreatePlane(#PB_Any,20,20,10,10,20,20)
enti= CreateEntity(#PB_Any,MeshID(mesh),MaterialID(mate),0,0,0)
CreateEntityBody(enti,#PB_Entity_StaticBody)
SetEntityCollisionFilter(enti,1<<1,1<<1)
mesh= CreateCube(#PB_Any,1)
; meshLOD= CreatePlane(#PB_Any,0.1,0.1,1,1,1,1)
; AddMeshManualLOD(mesh,meshLOD,30)
; BuildMeshLOD(mesh, 1,30,100)
For p= -10 To 9 ;muros
o= Random(15) * 0.02
enti= CreateEntity(#PB_Any,MeshID(mesh),MaterialID(mate),p+0.5,0.5-o,10.5)
CreateEntityBody(enti,#PB_Entity_StaticBody)
SetEntityCollisionFilter(enti,1<<1,1<<1)
enti= CreateEntity(#PB_Any,MeshID(mesh),MaterialID(mate),p+0.5,0.5-o,-10.5)
CreateEntityBody(enti,#PB_Entity_StaticBody)
SetEntityCollisionFilter(enti,1<<1,1<<1)
enti= CreateEntity(#PB_Any,MeshID(mesh),MaterialID(mate),10.5,0.5-o,p+0.5)
CreateEntityBody(enti,#PB_Entity_StaticBody)
SetEntityCollisionFilter(enti,1<<1,1<<1)
enti= CreateEntity(#PB_Any,MeshID(mesh),MaterialID(mate),-10.5,0.5-o,p+0.5)
CreateEntityBody(enti,#PB_Entity_StaticBody)
SetEntityCollisionFilter(enti,1<<1,1<<1)
Next p
For p=1 To 10 ;obstaculos
x= Random(19)-10 : While x>-3 And x<3 : x= Random(19)-10 : Wend
y= Random(19)-10 : While y>-3 And y<3 : y= Random(19)-10 : Wend
enti= CreateEntity(#PB_Any,MeshID(mesh),MaterialID(mate),x+0.5,0.5,y+0.5)
CreateEntityBody(enti,#PB_Entity_StaticBody)
SetEntityCollisionFilter(enti,1<<1,1<<1)
Next p
enti= CreateEntity(#PB_Any,MeshID(mesh),MaterialID(mate),-1.5,0.02,-1.44)
ScaleEntity(enti,0.9,1,4.5,#PB_Absolute):RotateEntity(enti,12.8,0,0)
CreateEntityBody(enti,#PB_Entity_StaticBody)
SetEntityCollisionFilter(enti,1<<1,1<<1)
enti= CreateEntity(#PB_Any,MeshID(mesh),MaterialID(mate),-1.5,0.5,-4)
CreateEntityBody(enti,#PB_Entity_StaticBody)
SetEntityCollisionFilter(enti,1<<1,1<<1)
enti= CreateEntity(#PB_Any,MeshID(mesh),MaterialID(mate),-1.5,0,-5)
CreateEntityBody(enti,#PB_Entity_StaticBody)
SetEntityCollisionFilter(enti,1<<1,1<<1)
enti= CreateEntity(#PB_Any,MeshID(mesh),MaterialID(mate),-3.5,0.5,-3.5)
CreateEntityBody(enti,#PB_Entity_StaticBody)
SetEntityCollisionFilter(enti,1<<1,1<<1)
CreateLine3D(#PB_Any, -20,0,0,$0000ff, 20,0,0,$00ffff)
CreateLine3D(#PB_Any, 0,0,-20,$ff0000, 0,0,20,$ffff00)
CreateLine3D(#PB_Any, 0,0,0,$004400, 0,20,0,$00ff00)
CreateLine3D(#PB_Any, -10,0,-10,$004400, -10,20,-10,$ffffff)
EndProcedure
Procedure testGAME()
If KeyboardReleased(#PB_Key_C)
SetClipboardText("MoveCamera(camara,"+StrD(CameraX(0),2)+","+StrD(CameraY(0),2)+","+StrD(CameraZ(0),2)+",#PB_Absolute)")
EndIf
If KeyboardReleased(#PB_Key_F1)
WorldDebug(#PB_World_DebugNone)
CameraRenderMode(0,#PB_Camera_Textured)
ElseIf KeyboardReleased(#PB_Key_F2)
WorldDebug(#PB_World_DebugEntity)
ElseIf KeyboardReleased(#PB_Key_F3)
WorldDebug(#PB_World_DebugBody)
ElseIf KeyboardReleased(#PB_Key_F4)
CameraRenderMode(0,#PB_Camera_Wireframe)
ElseIf KeyboardReleased(#PB_Key_F5)
ElseIf KeyboardReleased(#PB_Key_F12)
ClearDebugOutput()
EndIf
EndProcedure
Procedure CameraUserControl(camera,speed.f=0.1,smooth.f=0.1,yfixed.f=1e10)
;pf_shadoko camera, thanks pf_shadoko!
Static.f MouseX,Mousey,depx,depz,sdepx,sdepz, fdf.b
depx=-speed*(KeyboardPushed(#PB_Key_Left)-KeyboardPushed(#PB_Key_Right))
depz=-speed*(KeyboardPushed(#PB_Key_Down)-KeyboardPushed(#PB_Key_Up)-MouseWheel()*40)
; depx=-speed*(KeyboardPushed(#PB_Key_A)-KeyboardPushed(#PB_Key_D))
; depz=-speed*(KeyboardPushed(#PB_Key_S)-KeyboardPushed(#PB_Key_W)-MouseWheel()*20)
If KeyboardReleased(#PB_Key_F12):fdf=1-fdf:If fdf:CameraRenderMode(0,#PB_Camera_Wireframe):Else:CameraRenderMode(0,#PB_Camera_Textured):EndIf:EndIf
MouseX = -MouseDeltaX() * 0.05
MouseY = -MouseDeltaY() * 0.05
RotateCamera(camera, MouseY, MouseX, 0, #PB_Relative)
sdepx+(depx-sdepx)*smooth
sdepz+(depz-sdepz)*smooth
MoveCamera (camera, sdepX, 0, -sdepz)
If yfixed<>1e10:MoveCamera(camera,CameraX(camera),yfixed,CameraZ(camera),#PB_Absolute):EndIf
EndProcedure
decoradoTEST()
;---- MENÚ 3D
Enumeration
#m3D_GAD_TEXT
#m3D_GAD_BUTTON
#m3D_GAD_TOGGLE
#m3D_GAD_SLIDER
#m3D_GAD_MULTI
EndEnumeration
Structure menu3D_offTime
e.i
time.i
EndStructure
Structure menu3D_gadg_item_stru
e.i
txt.s
state.b
EndStructure
Structure menu3D_gadg_stru
e.i
type.a
txt.s
w.f
h.f
state.b
tt3d.i ;textura
mate.i ;material
List item.menu3D_gadg_item_stru()
EndStructure
Structure menu3D_stru
ink.l
paper.l
inkHigh.l
meshPlane.i
meshCube.i
meshSphere.i
tt3Dw.c
tt3Dh.c
sprMouse.i
fontN.i
fontG.i
cursor.i
mateItemOn.i
mateItemOff.i
nodo.i
; curTt3D.i
; curMate.i
; curEnti.i
List gad.menu3D_gadg_stru()
List off.menu3D_offTime()
EndStructure
Global m3D.menu3D_stru
Procedure m3dCreateMouseCursor(color.l=$cc55ffff,borde.l=$ff000000)
Protected sprMouse= CreateSprite(#PB_Any,40,40,#PB_Sprite_AlphaBlending)
Protected i= CreateImage(#PB_Any,SpriteWidth(sprMouse),SpriteHeight(sprMouse),32,#PB_Image_Transparent)
StartVectorDrawing(ImageVectorOutput(i))
VectorSourceColor($77000000)
TranslateCoordinates(4,7)
AddPathSegments("M 0 0 L 31 15 L 31 31 L 15 31 L 0 0 C")
FillPath()
ResetCoordinates()
VectorSourceColor(color)
AddPathSegments("M 0 0 L 31 15 L 31 31 L 15 31 L 0 0 C")
FillPath(#PB_Path_Preserve)
VectorSourceColor(borde)
StrokePath(2)
StopVectorDrawing()
StartDrawing(SpriteOutput(sprMouse))
DrawingMode(#PB_2DDrawing_AllChannels)
DrawAlphaImage(ImageID(i),0,0)
StopDrawing()
FreeImage(i)
ProcedureReturn sprMouse
EndProcedure
Procedure m3Dini(paper.l=$aa221100,ink.l=$ffff3322,highlight.l=$ffffaa22, tt3dw.c=64,tt3dh.c=64)
m3d\ink= ink
m3d\inkHigh= highlight
m3d\paper= paper
m3d\meshSphere= CreateSphere(#PB_Any,0.5)
m3d\meshCube= CreateCube(#PB_Any,1)
; m3d\meshPlane= CreatePlane(#PB_Any,1,1,1,1,1,1)
m3d\meshPlane= CreateMesh(#PB_Any)
MeshVertex( 0.5, 0.5,0, 0,0, $ffffff, 0,0,1)
MeshVertex(-0.5, 0.5,0, 1,0, $ffffff, 0,0,1)
MeshVertex(-0.5,-0.5,0, 1,1, $ffffff, 0,0,1)
MeshVertex( 0.5,-0.5,0, 0,1, $ffffff, 0,0,1)
MeshFace(3,2,1,0)
FinishMesh(#True)
BuildMeshShadowVolume(m3d\meshPlane)
; BuildMeshTangents(m3d\meshPlane)
;cursor 3D
; m3d\curTt3D= CreateTexture(#PB_Any,400,100)
; StartDrawing(TextureOutput(m3d\curTt3D))
; DrawingMode(#PB_2DDrawing_AllChannels)
; Box(0,0,OutputWidth(),OutputHeight(),$ffffffff)
; Box(4,4,OutputWidth()-8,OutputHeight()-8,$77000000)
; StopDrawing()
; m3d\curMate= CreateMaterial(#PB_Any,TextureID(m3d\curTt3D))
; MaterialFilteringMode(m3d\curMate,#PB_Material_Trilinear)
; MaterialBlendingMode(m3d\curMate,#PB_Material_AlphaBlend)
; DisableMaterialLighting(m3d\curMate,0)
; m3d\curEnti= CreateEntity(#PB_Any,MeshID(m3D\meshPlane),MaterialID(m3d\curMate))
m3d\mateItemOff= CreateMaterial(#PB_Any,#Null, RGB(Red(m3D\ink),Green(m3D\ink),Blue(m3D\ink)))
m3d\mateItemOn= CreateMaterial(#PB_Any,#Null, RGB(Red(m3D\inkHigh),Green(m3D\inkHigh),Blue(m3D\inkHigh)))
m3d\tt3Dw= tt3dw
m3d\tt3Dh= tt3dh
m3d\fontN= LoadFont(#PB_Any,"Arial",28,#PB_Font_Bold)
m3d\fontG= LoadFont(#PB_Any,"Arial",44,#PB_Font_Bold)
;cursor ratón
m3d\sprMouse= CreateSprite(#PB_Any,40,40,#PB_Sprite_AlphaBlending)
Protected i= CreateImage(#PB_Any,SpriteWidth(m3d\sprMouse),SpriteHeight(m3d\sprMouse),32,#PB_Image_Transparent)
StartVectorDrawing(ImageVectorOutput(i))
VectorSourceColor($77000000)
TranslateCoordinates(4,7)
AddPathSegments("M 0 0 L 31 15 L 31 31 L 15 31 L 0 0 C")
FillPath()
ResetCoordinates()
VectorSourceColor(m3d\inkHigh)
AddPathSegments("M 0 0 L 31 15 L 31 31 L 15 31 L 0 0 C")
FillPath(#PB_Path_Preserve)
VectorSourceColor(m3d\ink)
StrokePath(2)
StopVectorDrawing()
StartDrawing(SpriteOutput(m3d\sprMouse))
DrawingMode(#PB_2DDrawing_AllChannels)
DrawAlphaImage(ImageID(i),0,0)
StopDrawing()
FreeImage(i)
m3d\nodo= CreateNode(#PB_Any)
EndProcedure
Procedure m3Ddraw()
Protected x,y,r=15, it
Protected.s txt
StartDrawing(TextureOutput(m3d\gad()\tt3d))
Select m3D\gad()\type
Case #m3D_GAD_MULTI
txt= StringField(m3d\gad()\txt, m3d\gad()\state+1,"|")
DrawingMode(#PB_2DDrawing_AllChannels)
Box(0,0,OutputWidth(),OutputHeight(),$00000000)
RoundBox(0,0,OutputWidth(),OutputHeight(),r,r, m3d\ink)
RoundBox(4,4,OutputWidth()-8,OutputHeight()-8,r,r, m3d\paper)
DrawingMode(#PB_2DDrawing_AlphaBlend|#PB_2DDrawing_Transparent)
DrawingFont(FontID(m3d\fontN))
x= (OutputWidth()-TextWidth(txt))/2
y= ((OutputHeight()*0.9)-TextHeight(txt))/2
DrawText(x,y,txt, m3d\ink)
Case #m3D_GAD_SLIDER
txt= StringField(m3d\gad()\txt, m3d\gad()\state+1,"|")
If txt= ""
txt= m3d\gad()\txt
EndIf
DrawingMode(#PB_2DDrawing_AllChannels)
Box(0,0,OutputWidth(),OutputHeight(),$00000000)
RoundBox(0,0,OutputWidth(),OutputHeight(),r,r, m3d\ink)
RoundBox(4,4,OutputWidth()-8,OutputHeight()-8,r,r, m3d\paper)
DrawingMode(#PB_2DDrawing_AlphaBlend|#PB_2DDrawing_Transparent)
DrawingFont(FontID(m3d\fontN))
x= (OutputWidth()-TextWidth(txt))/2
y= ((OutputHeight()*0.9)-TextHeight(txt))/2
DrawText(x,y,txt, m3d\ink)
Case #m3D_GAD_TEXT
txt= m3d\gad()\txt
DrawingMode(#PB_2DDrawing_AllChannels)
Box(0,0,OutputWidth(),OutputHeight(),$00000000)
; If m3d\gad()\state: tinta= m3d\inkHigh: Else: tinta= m3d\ink: EndIf
tinta= m3d\ink
RoundBox(0,0,OutputWidth(),OutputHeight(),r,r, m3d\paper)
; RoundBox(4,4,OutputWidth()-8,OutputHeight()-8,r,r, m3d\paper)
DrawingMode(#PB_2DDrawing_AlphaBlend|#PB_2DDrawing_Transparent)
DrawingFont(FontID(m3d\fontN))
x= (OutputWidth()-TextWidth(txt))/2
y= ((OutputHeight()*0.9)-TextHeight(txt))/2
DrawText(x,y,txt, tinta)
Case #m3D_GAD_BUTTON, #m3D_GAD_TOGGLE
txt= StringField(m3d\gad()\txt, m3d\gad()\state+1,"|")
Debug Str(m3D\gad()\state)+" "+Str(m3D\gad()\type)+" "+txt
If txt= ""
txt= m3d\gad()\txt
EndIf
DrawingMode(#PB_2DDrawing_AllChannels)
Box(0,0,OutputWidth(),OutputHeight(),$00000000)
If m3d\gad()\state: tinta= m3d\inkHigh: Else: tinta= m3d\ink: EndIf
RoundBox(0,0,OutputWidth(),OutputHeight(),r,r, tinta)
RoundBox(4,4,OutputWidth()-8,OutputHeight()-8,r,r, m3d\paper)
DrawingMode(#PB_2DDrawing_AlphaBlend|#PB_2DDrawing_Transparent)
DrawingFont(FontID(m3d\fontN))
x= (OutputWidth()-TextWidth(txt))/2
y= ((OutputHeight()*0.9)-TextHeight(txt))/2
DrawText(x,y,txt, tinta)
EndSelect
StopDrawing()
; If IsMaterial(m3d\gad()\mate):FreeMaterial(m3d\gad()\mate):EndIf
RemoveMaterialLayer(m3d\gad()\mate)
AddMaterialLayer(m3d\gad()\mate, TextureID(m3d\gad()\tt3d),#PB_Material_AlphaBlend)
EndProcedure
Procedure m3Dgad(x.f,y.f,z.f, w.f,h.f, txt.s, state.i, type.a=#m3D_GAD_BUTTON,mesh.i=-1,param.b=0)
If mesh=-1:mesh= m3d\meshPlane: EndIf
AddElement(m3d\gad())
With m3d\gad()
\w= w
\h= h
\txt= txt
\type= type
\state= state
\tt3d= CreateTexture(#PB_Any, m3d\tt3Dw * w, m3d\tt3Dh * h)
m3d\gad()\mate= CreateMaterial(#PB_Any,#Null,0)
MaterialFilteringMode(m3d\gad()\mate,#PB_Material_Trilinear)
MaterialBlendingMode(m3d\gad()\mate,#PB_Material_Color)
DisableMaterialLighting(m3d\gad()\mate,0)
AddMaterialLayer(m3d\gad()\mate, TextureID(m3d\gad()\tt3d),#PB_Material_AlphaBlend)
\e= CreateEntity(#PB_Any,MeshID(mesh),MaterialID(\mate),x,y,z)
ScaleEntity(\e, w,h,h,#PB_Absolute)
AttachNodeObject(m3d\nodo, EntityID(\e))
If m3d\gad()\type= #m3D_GAD_SLIDER
w= (\w / param); * 0.9
h= \h * 0.2
For p= 1 To param
AddElement(m3d\gad()\item())
m3d\gad()\item()\e= CreateEntity(#PB_Any,MeshID(m3d\meshPlane),MaterialID(m3d\mateItemOff), x+(\w/2)+(w/2)-(p*w), y-\h*0.5,-0.02)
ScaleEntity(m3d\gad()\item()\e, w*0.9,0.3,1,#PB_Absolute)
If ListIndex(m3d\gad()\item()) =< m3d\gad()\state
SetEntityMaterial(m3d\gad()\item()\e, MaterialID(m3d\mateItemOn))
Else
SetEntityMaterial(m3d\gad()\item()\e, MaterialID(m3d\mateItemOff))
EndIf
AttachNodeObject(m3d\nodo, EntityID(m3d\gad()\item()\e))
Next p
EndIf
m3Ddraw()
; If mesh= m3d\meshCube
; RotateEntity(\e,0,0,0,#PB_Absolute)
; Else
; If mesh= m3d\meshPlane
; RotateEntity(\e,-90,0,0,#PB_Absolute)
; EndIf
EndWith
ProcedureReturn m3d\gad()\e
EndProcedure
Procedure m3Devent()
Static.b lmb
Protected.b item
Protected gadget
If MouseButton(#PB_MouseButton_Left)
If Not lmb
lmb=1
e= MousePick(0,MouseX(),MouseY())
; Debug e
If e>-1
ForEach m3D\gad()
If e= m3d\gad()\e
Select m3d\gad()\type
Case #m3D_GAD_MULTI
m3d\gad()\state + 1 : If m3d\gad()\state >= CountString(m3D\gad()\txt,"|"): m3d\gad()\state= 0: EndIf
m3Ddraw()
Case #m3D_GAD_TOGGLE
m3d\gad()\state !1
m3Ddraw()
If m3d\gad()\state
; RotateEntity(m3d\gad()\e,25,0,0,#PB_Absolute)
ScaleEntity(m3d\gad()\e,m3d\gad()\w*1.05,m3d\gad()\h*1.05,1,#PB_Absolute)
Else
; RotateEntity(m3d\gad()\e,0,0,0,#PB_Absolute)
ScaleEntity(m3d\gad()\e,m3d\gad()\w,m3d\gad()\h,1,#PB_Absolute)
EndIf
ProcedureReturn m3d\gad()\e
Case #m3D_GAD_BUTTON
m3d\gad()\state= 1
; RotateEntity(m3d\gad()\e,25,0,0,#PB_Absolute)
m3Ddraw()
ScaleEntity(m3d\gad()\e,m3d\gad()\w*1.05,m3d\gad()\h*1.05,1,#PB_Absolute)
AddElement(m3d\off())
m3d\off()\e= m3d\gad()\e
m3d\off()\time= ElapsedMilliseconds()+250
ProcedureReturn m3d\gad()\e
EndSelect
; ScaleEntity(m3d\curEnti, m3d\gad()\w,m3d\gad()\h,1,#PB_Absolute)
; MoveEntity(m3d\curEnti, EntityX(m3d\gad()\e),EntityY(m3d\gad()\e),EntityZ(m3d\gad()\e)-0.1,#PB_Absolute)
; Debug m3d\gad()\txt
EndIf
ForEach m3d\gad()\item()
If ListIndex(m3d\gad()\item()) =< m3d\gad()\state
SetEntityMaterial(m3d\gad()\item()\e, MaterialID(m3d\mateItemOn))
Else
SetEntityMaterial(m3d\gad()\item()\e, MaterialID(m3d\mateItemOff))
EndIf
If e= m3d\gad()\item()\e
m3d\gad()\state= ListIndex(m3d\gad()\item())
; Debug m3d\gad()\state
; m3Ddraw()
gadget= m3d\gad()\e
item=#True
EndIf
Next
Next
If item
ForEach m3d\gad()
ForEach m3d\gad()\item()
If ListIndex(m3d\gad()\item()) =< m3d\gad()\state
SetEntityMaterial(m3d\gad()\item()\e, MaterialID(m3d\mateItemOn))
Else
SetEntityMaterial(m3d\gad()\item()\e, MaterialID(m3d\mateItemOff))
EndIf
Next
If gadget= m3d\gad()\e
ProcedureReturn m3d\gad()\e
EndIf
Next
EndIf
EndIf
EndIf
Else
lmb= 0
EndIf
If KeyboardReleased(#PB_Key_W)
m3d\cursor-1: If m3d\cursor < 0: m3d\cursor=ListSize(m3d\gad())-1: EndIf
SelectElement(m3d\gad(),m3d\cursor): m3dDraw()
ElseIf KeyboardReleased(#PB_Key_S)
m3d\cursor+1: If m3d\cursor >= ListSize(m3d\gad()): m3d\cursor=0: EndIf
SelectElement(m3d\gad(),m3d\cursor): m3dDraw()
EndIf
;desactiva botón
ForEach m3d\off()
If ElapsedMilliseconds() > m3d\off()\time
ForEach m3d\gad()
If m3d\gad()\e= m3d\off()\e
m3d\gad()\state= 0
m3Ddraw()
RotateEntity(m3d\gad()\e,0,0,0,#PB_Absolute)
ScaleEntity(m3d\gad()\e,m3d\gad()\w,m3d\gad()\h,1,#PB_Absolute)
Break
EndIf
Next
DeleteElement(m3d\off())
Break
EndIf
Next
ProcedureReturn 0
EndProcedure
m3Dini()
l1= m3Dgad(-10,12,0, 5,0.9,"MENÚ",0,#m3D_GAD_TEXT)
l1= m3Dgad(-10,11,0, 5,0.9,"Jugar",0,#m3D_GAD_BUTTON)
b1= m3Dgad(-10,10,0, 5,0.9,"Nuevo",0,#m3D_GAD_BUTTON)
b2= m3Dgad(-10, 9,0, 5,0.9,"Carga",0,#m3D_GAD_BUTTON)
b3= m3Dgad(-10, 8,0, 5,0.9,"Graba",0,#m3D_GAD_BUTTON)
t1= m3Dgad(-10, 7,0, 5,0.9,"1 Player|2 Players|",0,#m3D_GAD_TOGGLE);, m3d\meshCube)
t2= m3Dgad(-10, 6,0, 5,0.9,"Shadows Off|Shadows ON|",0,#m3D_GAD_TOGGLE);, m3d\meshCube)
v1di= m3Dgad(-10, 5,0, 5,0.9,"Fácil|Normal|Díficil|",0,#m3D_GAD_MULTI)
t3= m3Dgad(-10, 4,0, 5,0.9,"Quality",3,#m3D_GAD_SLIDER,-1,8);, m3d\meshCube)
exit= m3Dgad(-10, 2,0, 5,0.9,"Salir",0,#m3D_GAD_BUTTON)
Repeat
While WindowEvent():Wend
ExamineMouse(): ExamineKeyboard()
testGAME()
m3Dev= m3Devent()
If m3Dev
Select m3Dev
Case b1
; Debug "B1"
Case t1
; Debug "T1"
Case exit
Break
EndSelect
EndIf
CameraUserControl(0,0.1)
If KeyboardReleased(#PB_Key_V)
EndIf
If KeyboardReleased(#PB_Key_C)
SetClipboardText("MoveCamera(camara,"+StrD(CameraX(camara),2)+","+StrD(CameraY(camara),2)+","+StrD(CameraZ(camara),2)+",#PB_Absolute)")
EndIf
; RotateNode(m3d\nodo,1,0,0,#PB_Relative)
renderTime= RenderWorld()
DisplayTransparentSprite(m3d\sprMouse, MouseX(),MouseY())
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
End