Re: [n3xt-D] un moteur pour PureBasic
Publié : mar. 13/oct./2009 19:14
merci...Cpl.Bator a écrit :Ouais , mais fait vite quoi !
j'ai pas que ca à foutre de t'attendre !![]()
je rigole hein ! bon app
tant pis alors, je finis mon fromage sur le clavier, me femme m'apporte ma part de gâteau et mes filles sont partie me préparer mon café avec
leur pyjama '3D with PB without N3xtD is for loosers' brodé dans le dos ...
Bon, pour revenir à nos moutons, en fait j'ai refais sebsiblement le même code, mais en passant par les
fonctions GUI de N3xtD.
Cela donne ceci (basé sur le code précedent, a quelques lignes près) :
Code : Tout sélectionner
; Include files
IncludePath "includes" : IncludeFile "n3xtD_PB.pbi"
; Globales
Global anglex.f, angley.f, flagXDown.w
Global mox.f, omx.f, moy.l, omy.l
Global *app.l, Quit.l
;----------------------------------------------------------
; open n3xt-D screen
*app = iCreateGraphics3D(800,600)
; << OR >>
;*app = iCreateGraphics3D(800,600, 32, #False, #True, #EDT_DIRECT3D9)
If *app= #Null
End
EndIf
SetCurrentDirectory("media/")
;-----------------------------------------
; set ambient light
; iAmbientLight( color.l=$ffaaaaaa)
;----------------------------------------
; create light and set position
*light.ILight = iCreateLight($ffffffff, 45)
iPositionNode(*light, 0,30,10)
; turn off MipMap
iTextureCreation( #ETCF_CREATE_MIP_MAPS, #False )
;----------------------------------------
; load 3D objects
Global *obj1.IObject = iLoad3DObject("plane.3ds")
Global *obj2.IObject = iLoad3DObject("earth.x")
;-----------------------------------------
; create plane
*plane.IMesh = iCreateMesh(*obj1)
;-----------------------------------------
; create tiger
Global *sphere.IMesh = iCreateMesh(*obj2)
iPositionNode(*sphere, 0,0.5,5)
iScaleMeshBuffer(iMeshGeometry(*sphere), 1.5,1.5,1.5)
;-----------------------------------------
; create first camera
Global *cam.ICamera = iCreateCamera( )
iPositionNode(*cam, 0,10,-15)
iTurnNode(*cam, 15,0,0)
;-----------------------------------
; load font png
iLoadFont("courriernew.png")
Global *font.IGUIFont = iGetFont()
iPointNode(*cam, *sphere)
;-----------------------
; create GUI Image
*logo.ITexture = iLoadTexture("logo_128.png")
*img.IGUIImage = iAddImageGUI(*logo, 0,15,#True, "text")
iColor_GUIImage(*img, $55ffffff )
; ---------------------------------------
; main loop
; ---------------------------------------
Repeat
; control earth
If iGetKeyDown(#KEY_ARROW_UP)
iTranslateNode(*sphere, 0,0,0.5)
iPointNode(*cam, *sphere)
EndIf
If iGetKeyDown(#KEY_ARROW_DOWN)
iTranslateNode(*sphere, 0,0,-0.5)
iPointNode(*cam, *sphere)
EndIf
If iGetKeyDown(#KEY_ARROW_RIGHT)
iTranslateNode(*sphere, 0.5,0,0)
iPointNode(*cam, *sphere)
EndIf
If iGetKeyDown(#KEY_ARROW_LEFT)
iTranslateNode(*sphere, -0.5,0,0)
iPointNode(*cam, *sphere)
EndIf
If iGetKeyDown(#KEY_KEY_R)
iTranslateNode(*sphere, 0,0.5,0)
iPointNode(*cam, *sphere)
EndIf
If iGetKeyDown(#KEY_KEY_F)
iTranslateNode(*sphere, 0,-0.5,0)
iPointNode(*cam, *sphere)
EndIf
; move camera with dir key and mouse (left click)
If iGetMouseEvent(#MOUSE_BUTTON_LEFT)
If flagXDown=0
omx = iGetMouseX()
omy = iGetMouseY()
flagXDown=11
Else
moy = iGetMouseY()-omy
angley=(moy/10.0)
omy= iGetMouseY()
mox = iGetMouseX()-omx
anglex=(mox/10.0)
omx= iGetMouseX()
iTurnNode(*cam, angley, anglex,0)
EndIf
Else
flagXDown=0
EndIf
; if Escape Key, exit
If iGetKeyDown(#KEY_ESCAPE)
Quit=1
EndIf
xx.l = iProjectedX(*sphere)
yy.l = iProjectedY(*sphere)
; ---------------
; Render
; ---------------
iBeginScene()
iDrawScene()
iDrawGUI()
iDrawText(*font, "DirKey and R/F for move earth", 10,10,0,0, $ff00ffff)
iRelativePositionGUI(*img, xx,yy)
iEndScene()
Until Quit=1
; end
iFreeEngine()