Code : Tout sélectionner
;Fichiers Include
IncludePath "..\Include\"
IncludeFile "d3dx9.pbi"
IncludeFile "dreamotion3d.pbi"
Global *camera.CEntity, *entity.CEntity
Global *font.CFont
Global *brush.CBrush
Global *texture.CTexture
If InitSprite() = 0 Or InitKeyboard() = 0
MessageRequester( "Erreur" , "Impossible d'initialiser DirectX 7 Ou plus" , 0 )
End
EndIf
ExamineDesktops()
Texte$ = "Morphing 3D"
Sx = DesktopWidth(0)
Sy = DesktopHeight(0)
Sd = DesktopDepth(0)
OpenScreen(Sx, Sy,Sd, Texte$)
DM_InitGraphics(ScreenID(), Sd, 1, 1)
*DM_d3d9 = DM_GetD3D9()
*DM_d3dDev9 = DM_GetDevice9()
DM_WIDTH = ScreenWidth
DM_HEIGHT = ScreenHeight
;-font
*font = DM_LoadFont("Arial", 8, 1)
DM_SetColorText(*font, 255, 255, 0,255)
#E = 2.71828182
Global Pas.f
Procedure.f Exp(value.f)
ProcedureReturn Pow(#E, value)
EndProcedure
Macro CX(p1,p2)
exp(p1/k)*Cos(p1)*(1+b*Cos(p2))
EndMacro
Macro CY(p1,p2)
exp(p1/k)*Sin(p1)*(1+b*Cos(p2))
EndMacro
Macro CZ(p1,p2)
exp(p1/k)*(1+b*Sin(p2))
EndMacro
Procedure CreateMeshCoquillage()
;http://aesculier.chez-alice.fr/fichiersPovray/coquillages/coquillages.html
; equation - Coquillage
;x=exp(p1/k)*Cos(p1)*(1+b*Cos(p2))
;y=exp(p1/k)*Sin(p1)*(1+b*Cos(p2))
;z=exp(p1/k)*(1+b*Sin(p2))
;Peut s'appliquer à toute surface paramétrique en mettant les
;bonnes formules dans CX, CY, CZ
k = 10
b.f = 0.49268
umin.f = -34
umax.f = -4
NbSommet = 25000
NbTriangle = 12500 * 2
vmin.f = 0 ;
vmax.f = 6.3 ;
uiter.f = 140 ; nombre de pas en u
viter.f = 40 ; nombre de pas en v
iu.f = (umax-umin)/uiter
iv.f = (vmax-vmin)/viter
Define.f uu, vv
Define.f x1, y1, z1
Define.f x2, y2, z2
Define.f x3, y3, z3
Define.f x4, y4, z4
uu = umin
p = 0
;rouge = $DB
;vert = 17
;bleu = $02
rouge = 255
vert = 0
bleu = 0
*entity = DM_CreateMesh(NbTriangle, NbSommet, 1, #Null)
While (uu<=umax)
vv = vmin
While (vv<=vmax)
;POINTS
DM_VertexCoords(*entity, i, CX(uu,vv), CY(uu,vv), CZ(uu,vv))
DM_VertexColor(*entity, i, rouge, vert, bleu, 255)
i + 1
uu=uu+iu
DM_VertexCoords(*entity, i, CX(uu,vv), CY(uu,vv), CZ(uu,vv))
DM_VertexColor(*entity, i, rouge, vert, bleu, 255)
i + 1
vv=vv+iv
DM_VertexCoords(*entity, i, CX(uu,vv), CY(uu,vv), CZ(uu,vv))
DM_VertexColor(*entity, i, rouge, vert, bleu, 255)
i + 1
uu=uu-iu
DM_VertexCoords(*entity, i, CX(uu,vv), CY(uu,vv), CZ(uu,vv))
DM_VertexColor(*entity, i, rouge, vert, bleu, 255)
i + 1
vv=vv-iv
;TRIANGLES
DM_VertexTriangle(*entity, t, p, p + 1, p + 2, 0)
t + 1
DM_VertexTriangle(*entity, t, p, p + 2, p + 3, 0)
t + 1
DM_VertexTriangle(*entity, t, p + 2, p + 1, p, 0)
t + 1
DM_VertexTriangle(*entity, t, p + 3, p + 2, p, 0)
t + 1
p + 4
vv = vv+iv
Wend
uu = uu+iu
Wend
DM_UpdateNormal(*entity)
DM_ScaleEntity(*entity, 120, 120, 120)
EndProcedure
;-Mesh
CreateMeshCoquillage()
;-camera
*camera = DM_CreateCamera(#Null)
DM_CameraClsColor(*camera, 0, 0, 85)
DM_MoveEntity(*camera, 0, 0, 400)
DM_PointEntity(*camera, *entity)
;-Light
DM_AmbiantLight(75,75,75)
*light = DM_CreateLight(0)
DM_LightColor(*light, 255, 255, 255, 255)
pas = 0.8
Repeat
DM_TurnEntity(*entity, pas, pas/2,-pas)
ExamineKeyboard()
DM_BeginScene()
DM_RenderWorld()
DM_EndScene()
Until KeyboardPushed(#PB_Key_Escape)