Ah, mon bidule commence à ressembler à quelquechose
Alors la caméra se controle avec la souris (bouton gauche pour avancer, droit pour reculer).
Ca met un moment à s'animer, faut être patient.
La barre espace réinitialise la séquence.
Code : Tout sélectionner
#pi=3.141593
#larjmap=125 : #profmap=125
#tailfacette=1
Structure lignmap
x.l[#larjmap+1]
EndStructure
Structure hmap
z.lignmap[#profmap+1]
EndStructure
Global _hmap.hmap
Procedure initiale()
If InitEngine3D()=0
MessageRequester("AU SECOURS JE ME NGLOUGLouglou","échoué à initialiser la 3D - Vérifiez la présence de "+Chr('"')+"Engine3D.dll"+Chr('"'))
End
EndIf
If InitSprite()=0 Or InitKeyboard()=0 Or InitMouse()=0 Or OpenScreen(800,600,32,"Martin & Matrice")=0
MessageRequester("Aaaaargh!","échec de l'initialisation de DirectX7")
End
EndIf
CreateTexture(0,2,2)
StartDrawing(TextureOutput(0))
Plot(0,0,$ffffff)
Plot(0,1,$ff)
Plot(1,0,$ff00)
Plot(1,1,$ff0000)
StopDrawing()
CreateMaterial(0,TextureID(0))
M3D_CreateMeshMatrix(0,#larjmap*#tailfacette,#profmap*#tailfacette,#larjmap,#profmap,1)
CreateEntity(0,MeshID(0),MaterialID(0))
EntityLocate(0,-#larjmap*#tailfacette/2,0,#profmap*#tailfacette)
M3D_PrepareMatrixTexture(0,0,1,1)
M3D_UpDateVertex(0)
M3D_FillMatrix(0,0)
M3D_UpDateTexture(0)
CreateLight(0,$ffffff,-#larjmap*#tailfacette/2,400,-#profmap*#tailfacette/2)
EndProcedure
Procedure martinet()
_hmap\z[0]\x[0]=((_hmap\z[#profmap]\x[0]+_hmap\z[1]\x[0]+_hmap\z[#profmap]\x[#larjmap]+_hmap\z[0]\x[1])/4+1)&$3ff
For x=1 To #larjmap-1
_hmap\z[0]\x[x]=((_hmap\z[#profmap]\x[x]+_hmap\z[1]\x[x]+_hmap\z[0]\x[x-1]+_hmap\z[0]\x[x+1])/4+1)&$3ff
Next
_hmap\z[0]\x[#larjmap]=((_hmap\z[#profmap]\x[#larjmap]+_hmap\z[1]\x[#larjmap]+_hmap\z[0]\x[#larjmap-1]+_hmap\z[1]\x[0])/4+1)&$3ff
For z=1 To #profmap-1
_hmap\z[z]\x[0]=((_hmap\z[z-1]\x[0]+_hmap\z[z+1]\x[0]+_hmap\z[z-1]\x[#larjmap]+_hmap\z[z]\x[1])/4+1)&$3ff
For x=1 To #larjmap-1
_hmap\z[z]\x[x]=((_hmap\z[z-1]\x[x]+_hmap\z[z+1]\x[x]+_hmap\z[z]\x[x-1]+_hmap\z[z]\x[x+1])/4+1)&$3ff
Next
_hmap\z[z]\x[#larjmap]=((_hmap\z[z-1]\x[#larjmap]+_hmap\z[z+1]\x[#larjmap]+_hmap\z[z]\x[#larjmap-1]+_hmap\z[z+1]\x[0])/4+1)&$3ff
Next
_hmap\z[#profmap]\x[0]=((_hmap\z[#profmap-1]\x[0]+_hmap\z[0]\x[0]+_hmap\z[#profmap-1]\x[#larjmap]+_hmap\z[#profmap]\x[1])/4+1)&$3ff
For x=1 To #larjmap-1
_hmap\z[#profmap]\x[x]=((_hmap\z[#profmap-1]\x[x]+_hmap\z[0]\x[x]+_hmap\z[#profmap]\x[x-1]+_hmap\z[#profmap]\x[x+1])/4+1)&$3ff
Next
_hmap\z[#profmap]\x[#larjmap]=((_hmap\z[#profmap-1]\x[#larjmap]+_hmap\z[0]\x[#larjmap]+_hmap\z[#profmap]\x[#larjmap-1]+_hmap\z[0]\x[0])/4+1)&$3ff
EndProcedure
Procedure reinitmap()
debu=@_hmap
fin=debu+SizeOf(hmap)-4
For *ptr.long=debu To fin Step 4
*ptr\l=0
Next
EndProcedure
Procedure appmap()
For x=0 To #larjmap : For z=0 To #profmap
M3D_SetVertexHeight(0,x,z,_hmap\z[z]\x[x]/25)
Next:Next
M3D_UpDateVertex(0)
M3D_NormalesMatrix(0)
EndProcedure
#vitcam=4
Procedure gercam()
Static rotx.f,roty.f
rotx-MouseDeltaY()/400
If rotx>#pi/2
rotx=#pi/2
ElseIf rotx<-#pi/2
rotx=-#pi/2
EndIf
roty-MouseDeltaX()/400
DefType.f vizx,vizy,vizz
vizx=CameraX(0)+Sin(roty)*#vitcam
vizz=CameraZ(0)+Cos(roty)*#vitcam
vizy=CameraY(0)+Sin(rotx)*#vitcam
CameraLookAt(0,vizx,vizy,vizz)
If MouseButton(1)
CameraLocate(0,vizx,vizy,vizz)
ElseIf MouseButton(2)
CameraLocate(0,2*CameraX(0)-vizx,2*CameraY(0)-vizy,2*CameraZ(0)-vizz)
EndIf
EndProcedure
;-DEPART
initiale()
CreateCamera(0,0,0,100,100)
CameraLocate(0,0,20,0)
;CameraLookAt(0,100,200,100)
Repeat
ExamineKeyboard() : ExamineMouse()
If KeyboardReleased(#pb_key_space)
reinitmap()
Else
martinet()
EndIf
appmap()
gercam()
ClearScreen(0,0,0)
RenderWorld()
FlipBuffers()
Until KeyboardReleased(#pb_key_escape) Or IsScreenActive()=0
Au fait, pourquoi cette limite de 125 ?
les utilisateurs en veulent toujours plus!
