j'ai bien aimé le code de zorro, c'est simple et ça donne un truc bien sympa
on peut aussi utiliser un seul mesh en coloriant les vertex
avec "SetMaterialColor(1, #PB_Material_AmbientColor,-1)"
j'ai fais une fonction "Createsurface" qui pourra vous etre utile
elle construit un mesh a partir d'un tableau 2d de type vertex (contenant position, uv, normal et couleur)
(de plus elle choisi la diagonal la plus adaptée (la disposition des 2 triangles formant les mails))
Code : Tout sélectionner
Structure vector2
x.f
y.f
EndStructure
Structure Vector3
x.f
y.f
z.f
EndStructure
Macro vec3d(v,vx,vy,vz)
v\x=vx
v\y=vy
v\z=vz
EndMacro
Macro vec2d(v,vx,vy)
v\x=vx
v\y=vy
EndMacro
Procedure.f lng3D(*v.Vector3)
ProcedureReturn Sqr(*V\x * *V\x + *V\y * *V\y + *V\z * *V\z)
EndProcedure
Macro sub3D(p,p1,p2)
p\x=p1\x-p2\x
p\y=p1\y-p2\y
p\z=p1\z-p2\z
EndMacro
Structure Svertex2
p.vector3
n.vector3
diag.b
ai.b
aj.b
uv.vector2
color.l
EndStructure
Procedure Createsurface(mesh,Array t.Svertex2(2))
Protected p,i,j,m,diag,nx=ArraySize(t(),2),nz=ArraySize(t(),1)
Protected.vector3 d1,d2,n
m=CreateMesh(mesh):If mesh=-1:mesh=m:EndIf
For j=0 To nz
For i=0 To nx
With t(j,i)
MeshVertexPosition(\P\x,\p\y,\p\z)
MeshVertexTextureCoordinate(\uv\x,\uv\y)
MeshVertexColor(\color)
MeshVertexNormal(\n\x,\n\y,\n\z)
EndWith
Next
Next
For j=0 To nz-1
For i=0 To nx-1
p=j*(nx+1)+i
diag=t(j,i)\diag
If diag=0
sub3d(d1,t(j,i)\p,t(j+1,i+1)\p)
sub3d(d2,t(j+1,i)\p,t(j,i+1)\p)
If lng3d(d1)>lng3d(d2):diag=1:Else:diag=-1:EndIf
EndIf
If diag=1
MeshFace(p,p+1,p+nx+1): MeshFace(p+nx+2,p+nx+1,p+1)
Else
MeshFace(p+nx+1,p,p+nx+2): MeshFace(p+1,p+nx+2,p)
EndIf
Next
Next
FinishMesh(1)
UpdateMeshBoundingBox(mesh)
ProcedureReturn mesh
EndProcedure
;####################################################################################################
Procedure image3d()
Protected i,j,dx,dy,c,h.f
StartDrawing(ImageOutput(0))
DrawingMode(#PB_2DDrawing_AllChannels)
dx=ImageWidth(0)-1
dy=ImageHeight(0)-1
Dim t.svertex2(dx,dy)
For j=0 To dy
For i=0 To dx
c=Point(i,j)
With t(i,j)
h=(Red(c)+Green(c)+Blue(c))/64
vec3d(\p,-(i-dx/2),h,-(j-dy/2))
vec2d(\uv,i,j)
\color=c
EndWith
Next
Next
StopDrawing()
createsurface(1,t())
NormalizeMesh(1)
CreateEntity(1,MeshID(1),MaterialID(1))
EndProcedure
UsePNGImageDecoder()
UseJPEGImageDecoder()
LoadFont(0,"arial",18)
OpenWindow(0,0,0,1200,800,"Déposer un fichier image",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
EnableWindowDrop(0,#PB_Drop_Files,#PB_Drag_Copy)
InitKeyboard():InitMouse():InitEngine3D():InitSprite()
OpenWindowedScreen(WindowID(0), 0, 0, WindowWidth(0),WindowHeight(0))
CreateImage(0,480,150,32)
StartDrawing(ImageOutput(0))
RoundBox(0,0,480,150,16,16,$ffffff)
RoundBox(4,4,472,142,16,16,$0000ff)
BackColor($0000ff)
DrawingFont(FontID(0))
DrawText(20,04,"Déposer un fichier image")
DrawText(20,30,"(Cliquer pour capturer/liberer la souris)")
DrawText(20,60,"Commandes : souris + curseur")
DrawText(20,90,"F12 : Fil de fer")
DrawText(20,116,"Esc : Quitter")
StopDrawing()
CreateLight(0, $ffffff, 1000, -1000, 1000)
AmbientColor($ffffff)
CreateCamera(0, 0, 0, 100, 100)
MoveCamera(0, 0,400,-80)
CameraLookAt(0, 0, 0,0.001)
CreateTexture(1,64,64):StartDrawing(TextureOutput(1)):Box(1,1,62,62,$ffffff):StopDrawing()
CreateMaterial(1, TextureID(1))
SetMaterialColor(1, #PB_Material_AmbientColor,-1)
image3d()
Define.f MouseX,Mousey,keyx,keyy,keyz, iu.b=1
Define a.f, fdf, event
Repeat
event=WindowEvent()
ExamineMouse()
MouseX = -MouseDeltaX() * 0.05
MouseY = -MouseDeltaY() * 0.05
ExamineKeyboard()
keyx=(-Bool(KeyboardPushed(#PB_Key_Left)<>0)+Bool(KeyboardPushed(#PB_Key_Right)<>0))*1
keyz=(-Bool(KeyboardPushed(#PB_Key_Down)<>0)+Bool(KeyboardPushed(#PB_Key_Up )<>0))*1+MouseWheel()*10
If KeyboardReleased(#PB_Key_F12):fdf=1-fdf:If fdf:CameraRenderMode(0,#PB_Camera_Wireframe):Else:CameraRenderMode(0,#PB_Camera_Textured):EndIf:EndIf
RotateCamera(0, MouseY, MouseX, 0, #PB_Relative):MoveCamera (0, KeyX, 0, -keyz) :MoveCamera(0,CameraX(0),CameraY(0),CameraZ(0),#PB_Absolute)
If event = #PB_Event_LeftClick And IsScreenActive():iu=1-iu: ReleaseMouse(iu):EndIf
If event=#PB_Event_WindowDrop:LoadImage(0,EventDropFiles()):image3d():EndIf
RenderWorld()
FlipBuffers()
Until event=#PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)